第一次编程作业-汉字编程

这个作业属于哪个课程 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("\n");
    
    if(qiwen>tem){
        printf("%s\n",p7);
    }else{
        printf("%s\n",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\n",&money);
    }else{
        printf("无");
    }

    printf("\n");
}

运行结果:

样例一

样例二

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

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

posted @ 2020-02-09 15:38  骑摩托的可乐  阅读(298)  评论(0编辑  收藏  举报