一道练习题
有一行电文,已按下面规律译成密码:A->Z a->z;B->Y b->y;即第1个字母变成第26个字母,第i个字母变成第(26-i+1)个字母,非字母字符不变。要求C语言编程将密码译回原文,并输出密码和原文。
可以定义一个数组ch,在其中存放电文。如果字符ch[j]是大写字母,则它是26个字母中的第(ch[j]-64)个大写字母,
由于此密码的规律是对称转换,即第1个字母转换为最后一个字母,最后一个转换为第1个字母,因此从原文译为密码和从密码译为原文,都是同一个公式。
#include<stdio.h>//头文件
int main()//主函数
{
int j,n;//定义整型变量
char ch[80],tran[80];//定义字符数组
printf("输入密码:\n");//提示语句
gets(ch);//键盘输入
printf("\n密码是:\n%s",ch);//密码
j=0;//赋初值
while(ch[j]!='\0')//不是最后一个字符时
{
if((ch[j]>='A')&&(ch[j]<='Z'))//ASCII中A对应的值是65,a对应的值是97
{
tran[j]=155-ch[j];
}
else if((ch[j]>='a')&&(ch[j]<='z'))//小写
{
tran[j]=219-ch[j];
}
else
{
tran[j]=ch[j];
}
j++;
}
n=j;
printf("\n输出原文:\n");//提示语句
for(j=0;j<n;j++)//遍历输出
{
putchar(tran[j]);
}
printf("\n");//换行
return 0;//函数返回值为0
}