C语言高手帮忙做题~~~急!!!!题目如补充所示:
把一串密码译成明文,密码以字符@表示结束。译码规则如下:
(1)如果是字母,转换成字母序列的下三个字母。如字母A译成D、B译成E。
(2)如果是字母Z,译成C。
(3)无论是大小写字母,都译成小写字母。
(4)其他字符一律找原样译出。
答案:#include<stdio.h>
void main()
{
int i,k=0;
char a[100];
printf("输入密文:\n");
for(i=0;i<100;i++)
{
scanf("%c",&a[i]);
k++;
if(a[i]=='@')
break;
}
for(i=0;i<k;i++)
{
if((a[i]>='a'&&a[i]<='z')||(a[i]>='A'&&a[i]<='Z'))
{
if(a[i]=='z')
a[i]='c';
else if(a[i]=='Z')
a[i]='C' ;
else if((a[i]>='A')&&(a[i]<='Z'))
a[i]+=32;
else
a[i]+=3;
}
}
for(i=0;i<k;i++)
printf("%c ",a[i]);
}
你看一下,经过运行,没有错误,有什么问题再HI我!
其他:先用if判断出小写字符的,a-w就直接用编码加3在输出。大写的就转化为小写在用前方法,或者是在编码那加3加26,非字母的直接输出。 #include"stdio.h"
void main()
{
char s[81];
int i,k;
gets(s);
for(i=0;s[i];i++)
if(s[i]>='a'&&s[i]<='z')
{ k=s[i]-'a';
k=(k+3)%26;
s[i]='a'+k;
}
else if(s[i]>='A'&&s[i]<='Z')
{
k=s[i]-'A';
k=(k+3)%26;
s[i]='a'+k;
}
printf("%s\n",s);
} #include <stdio.h>
void main()
{
int i=0;
char s[100],c;
while((c=getchar())!='@')
{ if(c>='A'&&c<='Z')c+=32;//如果c是大写字母则转换成小写字母
if(c>='a'&&c<='z')c=97+(c+3-97)%26;//字母转换为后三个字母
s[i++]=c;//存储字母
}
s[i]='\0';//存储结束符
puts(s);//输出转换后的字符
}
上一个:求C/C++源代码!!!!!!!!!!!!!!!!!
下一个:C语言灰常简单的问题