为使电文保密,往往按一定规律将电文转换成密码,收报人再按约定的规律将其译回原文。例如,可以按以下规律将电文变成密码:将字母A变成字母E,a变成e,即变成其后的第4个字母,W变成A,X变成B,Y变成C,Z变成D。字母按上述规律转换,非字母字符不变,如"Wonderful!"转换为"Asrhivjyp!"。输入一行字符,要求输出其相应的密码。
解题思路:
转换的规律是将原来的字符c加4,就得到密码字符的ASCII码。可用c=c+4来处理。但是还要对w,x,y,z(包括大小写)这4个字母作专门处理,使它们变为大小写的a,b,c,d。方法是如果执行完c=c+4后,c的新值已大于z(或Z),则表示原来的字母在v(或V)之后,应按规律将它转换为a~d(或A~D),办法是使c减26。
编写程序:
运行结果:
程序分析:
while语句中括号内的表达式有3个作用:①从键盘输入一个字符,这是用 getchar 函数实现的;②将读入的字符赋给字符变量c;③判别这个字符是否为'\n'(即换行符)。如果不是换行符就执行 while 语句中的复合语句(即花括号内的语句),对输入的非换行符的字符进行转换处理。
按前面分析的思路对输入的字符进行处理。有一点请读者注意:内嵌的if语句不能写成
if(c>'Z'11 c>'z') c=c-26;
因为所有小写字母都满足"c>'Z'"条件,从而也执行"c=c-26;"语句,这就会出错。因此必须限制其范围为"c>'Z'&&c<='Z'+4",即原字母为'W'~'Z',在此范围以外的不是原大写字母W~Z,不应按此规律转换。