大哥 能给小弟讲讲if(c>='Z'&&c<='Z'+4||c>'z') c=c-26; 是什么意思吗

char c;
while((c=getchar())!='\n')
{if((c>='A'&&c<='Z')||(c>='a'&&c<='z'))
{c=c+4;
if(c>='Z'&&c<='Z'+4||c>'z')
c=c-26;
}
printf("%c",c);
}
printf("\n");

这就是一个简单的加密程序,对输入的字母序列进行加密,用原来的字母在字母表中的后面第4个字母代替原来的字母,例如:输入A输出的是E,字母表首尾相连,输入z输出d,,因此你如果输入China那么输出的就是Glmre。
if中的条件其实就是比较,使用的是字母对应的ASCII码值,比如你加密,你可以使用你的加密方式。
希望对你有帮助。追问

if(c>='Z'&&c'z')
大哥 小弟想知道是,为什么小写字母'z'没有进行,c>='z'&&c'z'呀

追答

c>='Z'&&c'z',这句话你需要从结合律和优先级看这个问题,>=、的优先级比&& 和||高,也就是说:(c>='Z') && (c'z');其次从结合律来看,&&和||是左结合的,也就是说,这个判断条件可以划分为:((c>='Z') && (c'z'),这下应该能看明白了吧,也就是说当前面的((c>='Z') && (c'z')为真,则执行if内语句,只有当两个都为假时,才不执行if内语句。
回答你为什么不写成:c>='z'&&c<='z'+4,你可以去看一下ASCII码表,因为大写的字母的ASCII码值为:65--90,小写的为:97--122,如果前面不写&&c<= 'Z'+4,的话,你输入的小写的a就会执行c=c-26,从而变成大写的K,很显然你不想让他这样。但是后面就不用判断这个了,因为如果值在199-122的话,c=c-26其实就是首尾相接的小写字母,你可以对照ASCII码表看看。
希望对你有帮助。

来自:求助得到的回答
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-05-14
这个貌似是一个加密算法,应该是大学的某门课程里的,具体的记不得了。
程序大概是说从键盘接收一个字符串,当输入是‘a’时,输出‘e’,‘A’时输出‘E’,如果是‘v’输出'a‘,’V‘输出’A‘,循环输出。
char c;//定义一个字符
while((c=getchar())!='\n')//从键盘接受字符
{if((c>='A'&&c<='Z')||(c>='a'&&c<='z'))//判断接受的字符是不是英文字母
{c=c+4;//加密算法,取得输入之后的第4个字母
if(c>='Z'&&c<='Z'+4||c>'z')//判断,如果变换后的字符超过‘Z’字符或‘z’,则循环至前面输出
c=c-26;//算法,如果超过英文的ASCII,变换,W~Z变换为A~D
}
printf("%c",c);//输出加密后的英文字符
}
printf("\n");

以上,这个不是很难,自己跑一下就应该明白了。不知道我说的你明白没~~追问

if(c>='Z'&&c'z')
大哥 小弟想知道是,为什么小写字母'z'没有进行,c>='z'&&c'z'呀

追答

看ASC II码,小写字母比大写字母数值大,所以在判断大写字母时需要判断c 'z'就可以了,因为在前面已经判断是否为字符了,以上。

相似回答