输出英文字母的前驱和后继字母

从键盘输入一个英文字母,输出其前驱字母(即前一个字母)、后继字母(即后一个字母)及其ASCII值。比如输入的字母是b,则前驱字母是a,后继字母是c。而如果输入的字母是a,则前驱字母是z,后继字母是b;如果输入的字母是z,则前驱字母是y,后继字母是a。

大写字母的前驱后继字母求法与小写字母相同。

输入格式: 输入一个英文字母(大写或小写字母)。

输出格式: 第一行输出该字母的前驱字母及其ASCII值,第二行输出后继字母及其ASCII值,字母与ASCII值之间用一个空格分隔。

int main()
{
    char ch;
    scanf("%c",&ch);
    if(ch>='a'&&ch<='z')
    {
         //要了解如何输出前驱,请先看如何输出后继
        //输出前驱时,由于0减去1为-1,对-1取26的模,结果还是为-1
        //为了避免出现-1,把原编号加上26,再对26取模就可以了
        printf("%c %d\n",'a'+(ch+26-'a'-1)%26,'a'+(ch+26-'a'-1)%26);
        
        
        //输出后继字母
        //由于字母z的后继要变成a,故采用循环的方式,设字母a编号为0,则z的编号为25
        //采用取模的方式可以使得字母可以循环输出,由于是26个字母,故取模26
        //要把a-z的ASCII码变成编号0至25,用ASCII码减去'a'即可
        //要把a重新变成ASCII码,重新加上'a'即可
        printf("%c %d",'a'+(ch-'a'+1)%26,'a'+(ch-'a'+1)%26);
    }
    else
    {
        printf("%c %d\n",'A'+(ch+26-'A'-1)%26,'A'+(ch+26-'A'-1)%26);
        printf("%c %d",'A'+(ch-'A'+1)%26,'A'+(ch-'A'+1)%26);
    }
    return 0;
}