编程题

Posted ph1212

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编程题相关的知识,希望对你有一定的参考价值。

三、编程题

题目
中国文化博大精深,从仓颉造字开始,汉字一直流传到了今天。我们在感叹汉字的源远流长时,也不禁感慨,为什么没有一门使用汉字编程的语言?
汉字真的不能编程吗?最近文言文编程火了一把,吾有一數。曰三。名之曰「甲」。这朴实无华的变量定义无疑不是几千年来中华文化的发展中一朵奇葩。
今天小王同学想,文言文能编程那白话文呢?他找到了你,让你帮帮他。
编程要求
编写一个程序,输入满足以下语法要求的一段文字,输出运行后的结果。
变量定义:整数 钱包 等于 零
运算(加法):钱包 增加 四
运算(减法):钱包 减少 四
输出:看看 钱包
样例
输入:
整数 钱包 等于 零
钱包 增加 四
钱包 减少 三
看看 钱包
输出:

思考过程:

我需要先将中文转换成int才能进行计算,然后再将它转化成中文输出,这其中还要考虑十几与几十几的差别。数字转化代码如下:

int change1(char num[])
{
    if (strcmp(num, "一") == 0)
        return 1;
    else if (strcmp(num, "二") == 0)
        return 2;
    else if (strcmp(num, "三") == 0)
        return 3;
    else if (strcmp(num, "一") == 0)
        return 1;
    else if (strcmp(num, "四") == 0)
        return 4;
    else if (strcmp(num, "五") == 0)
        return 5;
    else if (strcmp(num, "六") == 0)
        return 6;
    else if (strcmp(num, "七") == 0)
        return 7;
    else if (strcmp(num, "八") == 0)
        return 8;
    else if (strcmp(num, "九") == 0)
        return 9;
    else if (strcmp(num, "零") == 0)
        return 0;
}

我在主函数中将0~99分为0~9,10~19,20~99三部分讨论,所以定义的转化函数只需要将数字转化。
刚开始我想直接用pintf输出中文的整数,钱包,然后发现出错,我重新打开一个界面试了一下直接输出中文可以吗,它显示出错,我才排除这个想法。
技术图片
然后我决定通过数组输出中文,再通过定义的转化中文的函数进行预算,具体代码如下:

#include<stdio.h>
#include<string.h>
int change1(char num[])
{
    if (strcmp(num, "一") == 0)
        return 1;
    else if (strcmp(num, "二") == 0)
        return 2;
    else if (strcmp(num, "三") == 0)
        return 3;
    else if (strcmp(num, "一") == 0)
        return 1;
    else if (strcmp(num, "四") == 0)
        return 4;
    else if (strcmp(num, "五") == 0)
        return 5;
    else if (strcmp(num, "六") == 0)
        return 6;
    else if (strcmp(num, "七") == 0)
        return 7;
    else if (strcmp(num, "八") == 0)
        return 8;
    else if (strcmp(num, "九") == 0)
        return 9;
    else if (strcmp(num, "零") == 0)
        return 0;
}
char* change2(int n)
{
    if (n == 0)  return "零";
    else if (n == 1) return "一";
    else if (n == 2) return "二";
    else if (n == 3) return "三";
    else if (n == 4) return "四";
    else if (n == 5) return "五";
    else if (n == 6) return "六";
    else if (n == 7) return "七";
    else if (n == 8) return "八";
    else if (n == 9) return "九";
    else if (n == 10) return "十";
}
int main()
{
     int result;
    char a[10],name[10],b[10],c[10];
   scanf("%s %s %s %s",a,name,b,c);
    if(strcmp(a,"整数")!=0||strcmp(c,"等于")!=0)
    {printf("输入错误
");
     return 0;
    }
    result=change1(c);
    while(strcmp(name,"看看")!=0)
    {
        scanf("%s %s",b,c);
        if(strcmp(b,"增加")==0)
        {
        result+=change1(c);
        }
        else if(strcmp(b,"减少")==0)
        {
        result-=change1(c);
        }
        else printf ("格式错误
");
    }
    if (result<=10)
    {
        printf("%s",change2(result));
    }
    else if(result%10==0&&result<100)
    {
        printf("%s十",change2(result/10));
    }
    else if (result<20)
    {
        result%=10;
        printf("十%s",change2(result));
    }
    else if (result<100)
    {
        printf("%s十%s", change2(result/10),change2(result%10));
    }
    return 0; 
 } 

函数运行结果如下:
技术图片
总结反思:
如果钱包数字更大或者有小数,我的方法就会更复杂,我希望学会更简便能够转化中文的方法。

以上是关于编程题的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段9——JS中的面向对象编程

使用 Pygments 检测代码片段的编程语言

面向面试编程代码片段之GC

如何在 Django Summernote 中显示编程片段的代码块?

以编程方式将按钮添加到片段

前端面试题之手写promise