习题 6.12 有一行电文,已按下面规律译成密码:A-Z a-z即第一个字母变成第26个字母,第i个字母变成第(26-i+1)个字母。非字母字符不变。要求编程序将密码译回原文,并输出密码和原文。

C程序设计(第四版) 谭浩强 习题6.12 个人设计

习题 6.12 有一行电文,已按下面规律译成密码:A-Z a-z B-Y b-y即第一个字母变成第26个字母,第i个字母变成第(26-i+1)个字母。非字母字符不变。要求编程序将密码译回原文,并输出密码和原文。

代码块:

方法1:(利用数组结构)

#include 
int main()
{
    char a[26], b[26], c[15], m, n;
    int i, j;
    for (i=1, m='A'; i<=26; i++)
        a[i]=m++;
    for (i=1, n='a'; i<=26; i++)
        b[i]=n++;
    for (i=0; i<15; i++)              //输入密码
        scanf("%c", &c[i]);               
    for (i=0; i<15; i++)              //输出原密码
        printf("%c", c[i]);
    printf("\n");
    for (i=0; i<15; i++){
        for (j=1; j<=26; j++){
            if (c[i]==a[j]){
                c[i]=a[26-i+1];
                break;
            }
            else if (c[i]==b[j]){
                c[i]=b[26-j+1];
                break;
            }
        }
    }
    for (i=0; i<15; i++)              //输出译出的原文
        printf("%c", c[i]);
    printf("\n");
    return 0;
}

尝试输入以下密码:Gsrh rh z hsrg!

方法2:(利用switch结构)

#include 
int main()
{
    char p[20];
    //输入密码
    printf("Please enter password: ");
    gets(p);
    //输出原密码
    printf("Password: ");
    puts(p);
    //密码转换规律
    for (int i=0; i<20; i++){
        if (p[i]>='A' && p[i]<='Z')
            switch(p[i]){
            case 'A': p[i]='Z'; break;
            case 'B': p[i]='Y'; break;
            case 'C': p[i]='X'; break;
            case 'D': p[i]='W'; break;
            case 'E': p[i]='V'; break;
            case 'F': p[i]='U'; break;
            case 'G': p[i]='T'; break;
            case 'H': p[i]='S'; break;
            case 'I': p[i]='R'; break;
            case 'J': p[i]='Q'; break;
            case 'K': p[i]='P'; break;
            case 'L': p[i]='O'; break;
            case 'M': p[i]='N'; break;
            case 'N': p[i]='M'; break;
            case 'O': p[i]='L'; break;
            case 'P': p[i]='K'; break;
            case 'Q': p[i]='J'; break;
            case 'R': p[i]='I'; break;
            case 'S': p[i]='H'; break;
            case 'T': p[i]='G'; break;
            case 'U': p[i]='F'; break;
            case 'V': p[i]='E'; break;
            case 'W': p[i]='D'; break;
            case 'X': p[i]='C'; break;
            case 'Y': p[i]='B'; break;
            case 'Z': p[i]='A'; break;
            default: break;
            }
        else if (p[i]>='a' && p[i]<='z')
            switch(p[i]){
            case 'a': p[i]='z'; break;
            case 'b': p[i]='y'; break;
            case 'c': p[i]='x'; break;
            case 'd': p[i]='w'; break;
            case 'e': p[i]='v'; break;
            case 'f': p[i]='u'; break;
            case 'g': p[i]='t'; break;
            case 'h': p[i]='s'; break;
            case 'i': p[i]='r'; break;
            case 'j': p[i]='q'; break;
            case 'k': p[i]='p'; break;
            case 'l': p[i]='o'; break;
            case 'm': p[i]='n'; break;
            case 'n': p[i]='m'; break;
            case 'o': p[i]='l'; break;
            case 'p': p[i]='k'; break;
            case 'q': p[i]='j'; break;
            case 'r': p[i]='i'; break;
            case 's': p[i]='h'; break;
            case 't': p[i]='g'; break;
            case 'u': p[i]='f'; break;
            case 'v': p[i]='e'; break;
            case 'w': p[i]='d'; break;
            case 'x': p[i]='c'; break;
            case 'y': p[i]='b'; break;
            case 'z': p[i]='a'; break;
            default: break;
            }
    }
    //输出原文
    printf("Original: ");
    puts(p);
    return 0;
}

方法3:(方法1精简)

#include 
int main()
{
    char cl[26], sl[26], p[20];
    int i, j, k;
    for (i=0, j='A', k='a'; i<26; cl[i]=j++, sl[i]=k++, i++);
    printf("Please enter password: ");
    gets(p);
    printf("Password: ");
    puts(p);
    for (i=0; i<20; i++)
        for (j=0; j<26; j++){
            if (p[i]==cl[j]){
                p[i]=cl[25-j]; break;
            }
            if (p[i]==sl[j]){
                p[i]=sl[25-j]; break;
            }
        }
    printf("Original: ");
    puts(p);
    return 0;
}

方法4:(利用函数的模块化设计)

#include 
void pass(char s[]);                    //定义密码破译函数
void input(char s[]);                   //定义输入函数
int main()
{
    char p[20];                         //定义密码数组
    input(p);                           //调用输入函数,输入密码
    printf("Password: ");               //输出原密码
    puts(p);
    pass(p);                            //调用密码破译函数
    printf("Original: ");               //输出原文
    puts(p);
    return 0;
}
//输入函数
void input(char s[])
{
    printf("Please enter password: ");
    gets(s);
}
//密码破译函数
void pass(char s[])
{
    char cl[26], sl[26];
    int i, j, k;
    for (i=0, j='A', k='a'; i<26; cl[i]=j++, sl[i]=k++, i++);
    for (i=0; i<20; i++)
        for (j=0; j<26; j++){
            if (s[i]==cl[j]){
                s[i]=cl[25-j]; break;
            }
            if (s[i]==sl[j]){
                s[i]=sl[25-j]; break;
            }
        }
}

你可能感兴趣的:(C程序设计,(第四版),谭浩强,课后答案)