qq_53065809 2021-05-11 08:41 采纳率: 88.9%
浏览 117
已采纳

C语言,编译密码怎么弄?

将"China"译成密码,密码规律是:用原来的字母后面第4个字母代替原来的 字母。例如,字母"A"后面第4个字母是"E",用"E"代替"A"。因此,"China"应 译为"Glmre"。请编一程序,用赋初值的方法使c1,c2,c3,c4,c5这5个变量的值分 别为'C,h,'i,'n'a'经过运算,使c1,c2,c3,c4,c5分别变为G,"','m',r','e'。分别用 putchar函数和printf函数输出这5个字符。 1)输人事先己编好的程序,并运行该程序。分析是否符合要求。 2)改变c1,c2,c3,c4,c5的初值为:T'o';d,'a,y'对译码规律做如下补充:W"用'A'代替,X'用B'代替,"Y用'C'代替,Z用D'代替。修改程序并运行。 3)将译码规律修改为:将一个字母被它前面第4个字母代替,列如E用'A' 代替.'Z'用U'代替,D'用Z代替,'C用Y'代替,B'用X'代替,'A'用"V'代替。修 改程序并运行。

  • 写回答

2条回答 默认 最新

  • qfl_sdu 2021-05-11 09:55
    关注

    你第三条要求中,A用V代替错了吧,应该用W吧。详细代码如下,望采纳,谢谢。

    #include <stdio.h>

    int main()
    {
        char buf[8] = {0};    //保存输入的字符
        char buf2[8] = {0};   //保存转换后的字符--后4个字母
        char buf3[8] = {0};   //保存转换后的字符--前4个字母

        //从终端输入字符
        char c = 0;
        for (int i= 0; i < 5; i++)
        {
            if (c != 0x0A)
                printf("请输入第%d个字符:",i+1); //windows下敲击回车时,会有一个换行符输入
            
            //从终端输入字符
            c = getchar();
            
            if( (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z')  )
                buf[i] = c;
            else if (c == 0x0A)
            {
                i--;
                continue; //windows下敲击回车时,会有一个换行符输入
            }else
            {
                printf("\n您输入的字符不在a-z 或 A-Z之间,请重新输入!\n");
                i--;
                continue;
            }
            //printf("\n");
            //转换为大写
            if(buf[i] >= 'a' && buf[i] <= 'z')
            {
                buf2[i] = buf[i] - 32;
                buf3[i] = buf[i] - 32;
            }
            else
            {
                buf2[i] = buf[i];
                buf3[i] = buf[i];
            }
            //转换为后4个字母
            if (buf2[i] >= 'A' && buf2[i] <= 'V')
            {
                buf2[i] = buf2[i] + 4;
            }else
                buf2[i] = 'A' + (buf2[i] - 'V' - 1);

            //前向转换
            if(buf3[i] >= 'E' && buf3[i] <= 'Z')
                buf3[i] = buf3[i] - 4;
            else
                buf3[i] = 'W' + (buf3[i] - 'A');

        }
        

        printf("使用putchar输出:\n");
        printf("  >>原始输入:");
        for(int i = 0; i < 5;i++)
            putchar(buf[i]);
        printf("\n  >>后向调整后字符:");
        for(int i = 0; i < 5;i++)
            putchar(buf2[i]);
        printf("\n  >>前向调整后字符:");
        for(int i = 0; i < 5;i++)
            putchar(buf3[i]);

        printf("\n使用pritnf输出:\n");
        printf("  >>原始输入:%s\n",buf);
        printf("  >>后向调整后字符:%s\n",buf2);
        printf("  >>前向调整后字符:%s\n",buf3);

        //
        getchar();
        getchar();

    }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 使用MATLAB进行余弦相似度计算加速
  • ¥15 服务器安装php5.6版本
  • ¥15 我想用51单片机和数码管做一个从0开始的计数表 我写了一串代码 但是放到单片机里面数码管只闪烁一下然后熄灭
  • ¥20 系统工程中,状态空间模型中状态方程的应用。请猛男来完整讲一下下面所有问题
  • ¥15 我想在WPF的Model Code中获取ViewModel Code中的一个参数
  • ¥15 arcgis处理土地利用道路 建筑 林地分类
  • ¥20 使用visual studio 工具用C++语音,调用openslsx库读取excel文件的sheet问题
  • ¥100 寻会做云闪付tn转h5支付链接的技术
  • ¥15 DockerSwarm跨节点无法访问问题
  • ¥15 使用dify通过OpenAI 的API keys添加OpenAI模型时报了“Connection Error”错误