zoukankan      html  css  js  c++  java
  • 第一次编程作业-汉字编程

    这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzzcxy/SE/
    这个作业要求在哪里 https://edu.cnblogs.com/campus/fzzcxy/SE/homework/10283
    这个作业的目标 汉字编程
    作业正文 如下
    其他参考文献 ...

    编程要求
    请编写一个程序,制作一个简易的中文语言编译器,即使用中文语法进行编程,输入为逐行输入,每行为一个语句,一个语句代变一个操作,满足以下语法要求(括号内代变格式类型,具体参考样例):

    变量定义:整数 (变量名) 等于 (数字)
    运算(加法):(变量名) 增加 (数字)
    运算(减法):(变量名) 减少 (数字)
    输出:看看 (变量名) or 看看 “(字符串内容)”
    附加要求:

    选择:如果 (判断语句) 则 (操作语句) 否则 (操作语句)
    若否则后没有任何操作使用(无)来进行填充(参考样例2)。

    记录:

    1.记录自己的代码行数,需求分析时间,编码时间。

    代码行数:133+153
    需求分析时间:2小时
    编码时间:>7小时

    2.分解需求的思路,分解成多个模块,并阐述为什么这么分,优势在哪,可以附上代码片段。

    分解需求的思路:
    主要是分为将汉字转换为数字,
    将数字转换为汉字,
    然后进行加法减法。
    (优化过程):刚开始只考虑0-10,后面修改之后有增加两位数的代码

    github仓库地址:https://github.com/TracerLin/TracerLIn

    //样例1
    //将汉字变为数字
    int hangzi(char num[])
    {
        if (strcmp("零", num) == 0) return 0;
        else 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 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 10;
        else{
            int i, a, b, c;
            char x[2], y[2];
            for (i = 0; i < 2; i++){
                x[i] = num[i];
                y[i] = num[i + 2];
            }
            if (strcmp("十", x) == 0){
                a = 10;
                b = hangzi(y);
                c = a + b;
            }
            else {
                a = hangzi(x);
                b = hangzi(y);
                c = a * 10 + b;
            }//超过十的情况就转化成十几或者是几十几
            return c;
        }
    }
    
    
    //将数字转化成汉字
    void shuzi(int a)
    {
        if (a == 0) printf("零");
        if (a == 1) printf("一");
        if (a == 2) printf("二");
        if (a == 3) printf("三");
        if (a == 4) printf("四");
        if (a == 5) printf("五");
        if (a == 6) printf("六");
        if (a == 7) printf("七");
        if (a == 8) printf("八");
        if (a == 9) printf("九");
        if (a == 10) printf("十");
    }
    
    void change(int a)
    {
        void shuzi(int b);
        int x, y;
        if (a <= 10) shuzi(a);
        //输入为个位数
        else if (a > 10 && a < 20) {
            printf("十");
            x = a % 10;
            shuzi(x);
        }
        //输入为大于10小于20
        else if (a >= 20 && a % 10 == 0) {
            y = a / 10;
            shuzi(y);
            printf("十");
        }
        else {
            x = a / 10;
            shuzi(x);
            printf("十");
            y = a % 10;
            shuzi(y);
        }
    }
    
    
    
    int main()
    {
        int hangzi(char num[]);
        void shuzi(int a);
        char a[50], b[50], c[50], d[50],x[50],y[50],z[50];
        char p1[50],p2[50],p3[50],p4[50],p5[50],p6[50],p7[50],p8[50],p9[50],p10[50];
        int qiwen,k;
        int tem=0;
        scanf("%s %s %s %s", a, b, c, d);
        qiwen = hangzi(d);
        for(int a;a<100;a++) {
            scanf("%s %s", x, y);
            if (strcmp(x, "看看") == 0 && strcmp(y, "气温") == 0){
                shuzi(qiwen);
                break;
            }
          //进行增减
            if (strcmp(x, "气温") == 0) {
                if (strcmp(y, "增加") == 0) {
                    scanf("%s", z);
                    k = hangzi(z);
                    qiwen += k;
                }
                if (strcmp(y, "减少") == 0) {
                    scanf("%s", z);
                    k = hangzi(z);
                    qiwen -= k;
                }
        
            }
    
        }
        //附加条件
        scanf("%s %s %s %s %s %s %s %s %s %s", p1, p2, p3, p4, p5, p6, p7, p8, p9, p10);
        tem=hangzi(p4);
        shuzi(qiwen);
        printf("
    ");
        
        if(qiwen>tem){
            printf("%s
    ",p7);
        }else{
            printf("%s
    ",p10);
        }
     
    }
    
    
    //样例2
    int hangzi(char num[])//年龄汉字转数字
    {
        if (strcmp("零", num) == 0) return 0;
        if (strcmp("一", num) == 0) return 1;
        if (strcmp("二", num) == 0) return 2;
        if (strcmp("三", num) == 0) return 3;
        if (strcmp("四", num) == 0) return 4;
        if (strcmp("五", num) == 0) return 5;
        if (strcmp("六", num) == 0) return 6;
        if (strcmp("七", num) == 0) return 7;
        if (strcmp("八", num) == 0) return 8;
        if (strcmp("九", num) == 0) return 9;
        if (strcmp("十", num) == 0) return 10;
        else{
            return 0;
        }
    }
    int hangzi1(char num[])//钱汉字转数字
    {
        if (strcmp("零", num) == 0) return 0;
        if (strcmp("一", num) == 0) return 1;
        if (strcmp("二", num) == 0) return 2;
        if (strcmp("三", num) == 0) return 3;
        if (strcmp("四", num) == 0) return 4;
        if (strcmp("五", num) == 0) return 5;
        if (strcmp("六", num) == 0) return 6;
        if (strcmp("七", num) == 0) return 7;
        if (strcmp("八", num) == 0) return 8;
        if (strcmp("九", num) == 0) return 9;
        if (strcmp("十", num) == 0) return 10;
        else{
            return 0;
        }
    }
    
    
    //将数字变为汉字
    void shuzi(int a)
    {
        if (a == 0) printf("零");
        if (a == 1) printf("一");
        if (a == 2) printf("二");
        if (a == 3) printf("三");
        if (a == 4) printf("四");
        if (a == 5) printf("五");
        if (a == 6) printf("六");
        if (a == 7) printf("七");
        if (a == 8) printf("八");
        if (a == 9) printf("九");
        if (a == 10) printf("十");
    }
    
    void change(int a)
    {
        void shuzi(int b);
        int x, y;
        if (a <= 10) shuzi(a);
        //输入为个位数
        else if (a > 10 && a < 20) {
            printf("十");
            x = a % 10;
            shuzi(x);
        }
        //输入为大于10小于20
        else if (a >= 20 && a % 10 == 0) {
            y = a / 10;
            shuzi(y);
            printf("十");
        }
        else {
            x = a / 10;
            shuzi(x);
            printf("十");
            y = a % 10;
            shuzi(y);
        }
    }
    
    
    
    int main()
    {
        int hangzi(char num[]);
        int hangzi1(char num[]);
        void shuzi(int a);
        char a[50], b[50], c[50], d[50],x[50],y[50],z[50];
        char a1[50], b1[50], c1[50], d1[50],x1[50],y1[50],z1[50];
        char p1[50],p2[50],p3[50],p4[50],p5[50],p6[50],p7[50],p8[50],p9[50],p10[50];
        int money,k,k1;
        int age=0;
        scanf("%s %s %s %s", a, b, c, d);
        scanf("%s %s %s %s", a1, b1, c1, d1);
        age=hangzi(d);
        money = hangzi1(d1);
        for(int a;a<100;a++) {
            scanf("%s %s", x, y);
            if (strcmp(x, "看看") == 0 && strcmp(y, "小杨零花钱") == 0){
                shuzi(money);
                break;
            }
            
            if (strcmp(x, "小杨年龄") == 0) {
                if (strcmp(y, "增加") == 0) {
                    scanf("%s", z);
                    k = hangzi(z);
                    money += k;
                }
                if (strcmp(y, "减少") == 0) {
                    scanf("%s", z);
                    k = hangzi(z);
                    money -= k;
                }
                
            }
            if (strcmp(x1, "小杨零花钱") == 0) {
                if (strcmp(y1, "增加") == 0) {
                    scanf("%s", z1);
                    k1 = hangzi1(z1);
                    money ++;
                }
                if (strcmp(y1, "减少") == 0) {
                    scanf("%s", z1);
                    k1 = hangzi1(z1);
                    money --;
                }
                
            }//进行增减
    
            
        }
        
        scanf("%s %s %s %s %s %s %s %s %s %s", p1, p2, p3, p4, p5, p6, p7, p8, p9, p10);
        age=hangzi(p4);
        money=hangzi1(p7);
        shuzi(money);
        if(age>*p4){
            printf("%s
    ",&money);
        }else{
            printf("无");
        }
    
        printf("
    ");
    }
    
    

    运行结果:

    样例一

    样例二

    3.记录不会的知识的学习过程以及修改优化的过程;

    (1)还是不能去除双引号。
    (2)还不会乘除的运算。
    (3)不能将两个案例融合为一个代码,还要继续学习修改一下。

  • 相关阅读:
    SpringCloud笔记(一)服务注册与发现
    个人备忘录
    ActiveMQ 消息持久化到Mysql数据库
    染色 [组合数 容斥]
    各种图床
    NOIP2012 疫情控制
    网格计数
    找钱 [多重背包 计数]
    序列[势能线段树]
    牛客挑战赛33 B-鸽天的放鸽序列
  • 原文地址:https://www.cnblogs.com/TracerLin/p/12285916.html
Copyright © 2011-2022 走看看