第一次编程作业

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

ithub仓库地址:https://github.com/ARIES-7/FIRST

代码行数:205行

作业所需数字转换:

-汉转数:

int change(char x[]){
    if(strcmp(x,"零") == 0)
        return 0;
    if(strcmp(x,"一") == 0)
        return 1;
    if(strcmp(x,"二") == 0)
        return 2;
    if(strcmp(x,"三") == 0)
        return 3;
    ... (同上)
}

-数转汉:

void change2(int a){
    int x,y;
    if(a == 0)
        printf("零"); //特殊情况
    if(a%10 == 0)
    {
        switch(a/10){
            case 1:
                printf("十");break;
            case 2:
                printf("二十");break;
            case 3:
                printf("三十");break;
            ...
        }
    }
    else{
        x=a/10;
        y=a%10;
        switch(x){
            case 1:
                printf("十");break;
            case 2:
                printf("二十");break;
            case 3:
                printf("三十");break;
            case 4:
                printf("四十");break;
            ...
        }
        switch(y){
            case 1:
                printf("一");break;
            case 2:
                printf("二");break;
            case 3:
                printf("三");break;
            case 4:
                printf("四");break;
            ... (同)
        }
    
    }
}

此处数字汉字转换还未考虑到上百

遇到提取引号内文字:

void tq(char y[]){
    char s[100];
    int i=0,n=0;
    while(y[i]!='"' && y[i]!='\0' )
                i++;
            while(1){
                i++;
                if(y[i]!='"') 
                    s[n++]=y[i];
                else
                    break;
            }
            s[n++]='\0';
    printf("%s\n",s);
}

主函数实现:

    while(scanf("%s",&y1)){      //先输入一个字符串,进行判断  案例共有四种可能
        if(strcmp(y1,"整数") == 0){        //读入数据
            if(flag == 0){
                scanf("%s %s %s",&x1,&x3,&x4);
                a+=change(x4);
                flag=1;
            }
            else{
                scanf("%s %s %s",&x2,&x3,&x4);
                b+=change(x4);
            }
        }
        else if(strcmp(y1,"看看") == 0){    //打印数据
            scanf("%s",&y2);
            if(strcmp(y2,x1) == 0){ 
                change2(a);
                printf("\n");
            }
            if(strcmp(y2,x2) == 0){ 
                change2(b);
                printf("\n");
            }
        }
        else if(strcmp(y1,"如果") == 0){  //特殊处理
            scanf(...);
            if(strcmp(z5,"看看") == 0)
                if(strcmp(z1,x1) == 0){
                    if(a>change(z3)) tq(z6);
                    else tq(z9);
                }
                else{
                    if(b>change(z3)) tq(z6);
                    else tq(z9);
                }
            else{
                if(strcmp(z1,x1) == 0){
                    if(a>change(z3)) 
                        if(strcmp(z6,"增加") == 0)
                            if(strcmp(z5,x1) == 0) a+=change(y3);
                            else b+=change(y3);
                                
                        else if(strcmp(z6,"减少") == 0)
                            if(strcmp(z5,x1) == 0) a-=change(y3);
                            else b-=change(y3); 
                    else
                        if(strcmp(z9,"无") == 0) break;
                }
                else{
                    if(b>change(z3)) 
                        (重复) 同上增减
                }
            }
        }
        else{         //数据处理
            scanf("%s %s",&y2,&y3);
            if(strcmp(y2,"增加") == 0){
                if(strcmp(y1,x1) == 0)
                    a+=change(y3);
                else
                    b+=change(y3);
            }       
            else if(strcmp(y2,"减少") == 0){
                if(strcmp(y1,x1) == 0)
                    a-=change(y3);
                else
                    b-=change(y3);
            }   
        }
    }
    return 0;
}

第一次编程作业_第1张图片

第一次编程作业_第2张图片

作业中的问题:

本次代码只能实现部分固定句式的测试,若是增加或句式改变,仍然存在问题。

你可能感兴趣的:(第一次编程作业)