不知道为什么自己写的不对,以后再来看问题。
1
7-4 输出英文字母的前驱和后继字母 (10 分)
从键盘输入一个英文字母,输出其前驱字母(即前一个字母)、后继字母(即后一个字母)及其ASCII值。比如输入的字母是b,则前驱字母是a,后继字母是c。而如果输入的字母是a,则前驱字母是z,后继字母是b;如果输入的字母是z,则前驱字母是y,后继字母是a。大写字母的前驱后继字母求法与小写字母相同。
输入格式:
输入一个英文字母。
输出格式:
第一行输出该字母的前驱字母及其ASCII值,第二行输出后继字母及其ASCII值,字母与ASCII值之间用一个空格分隔。
输入样例1:
b
结尾无空行
输出样例1:
a 97
c 99
结尾无空行
输入样例2:
a
结尾无空行
输出样例2:
z 122
b 98
结尾无空行
正确答案:
#include <stdio.h>
int main ()
{
char m,f,l;
m=getchar();
f=m-1;
l=m+1;
if(m>='a'&&m<='z')
{
if(f<'a')
f='z';
if(l>'z')
l='a';
}
else
{
if(f<'A')
f='Z';
if(l>'Z')
l='A';
}
printf("%c %d\n",f,f);
printf("%c %d\n",l,l);
return 0;
}
我的问题:
1.f<'a'能否直接写成当m='a'等等?(没过编译)
2.大佬的代码
if(f<'a')
f='z'-('a'-f)+1;
if(b>'z')
b='z'-f+'a'-1;
是什么意思?