中易网

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

答案:2  悬赏:0  
解决时间 2021-01-11 12:21
  • 提问者网友:遁入空寂
  • 2021-01-10 16:56
大哥 能给小弟讲讲if(c>='Z'&&c<='Z'+4||c>'z') c=c-26; 是什么意思吗
最佳答案
  • 二级知识专家网友:掌灯师
  • 2021-01-10 17:54
这就是一个简单的加密程序,对输入的字母序列进行加密,用原来的字母在字母表中的后面第4个字母代替原来的字母,例如:输入A输出的是E,字母表首尾相连,输入z输出d,,因此你如果输入China那么输出的就是Glmre。
if中的条件其实就是比较,使用的是字母对应的ASCII码值,比如你加密,你可以使用你的加密方式。
希望对你有帮助。
追问:if(c>='Z'&&c<='Z'+4||c>'z')
大哥 小弟想知道是,为什么小写字母'z'没有进行,c>='z'&&c<='z'+4,而写成c>'z'呀
追答:c>='Z'&&c<='Z'+4||c>'z',这句话你需要从结合律和优先级看这个问题,>=、<=、>的优先级比&& 和||高,也就是说:(c>='Z') && (c<='Z'+4 ) || (c>'z');其次从结合律来看,&&和||是左结合的,也就是说,这个判断条件可以划分为:((c>='Z') && (c<='Z'+4 )) || (c>'z'),这下应该能看明白了吧,也就是说当前面的((c>='Z') && (c<='Z'+4 ))为真的时候直接执行if内的语句,如果前面为假,(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楼网友:持酒劝斜阳
  • 2021-01-10 18:56
这个貌似是一个加密算法,应该是大学的某门课程里的,具体的记不得了。
程序大概是说从键盘接收一个字符串,当输入是‘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'+4||c>'z')
大哥 小弟想知道是,为什么小写字母'z'没有进行,c>='z'&&c<='z'+4,而写成c>'z'呀
追答:看ASC II码,小写字母比大写字母数值大,所以在判断大写字母时需要判断c <= 'Z'+4,确保需要转换的字符是大写的,而小写的就不需要了,只需要判断该数值>'z'就可以了,因为在前面已经判断是否为字符了,以上。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息