面向对象程序设计寒假作业3

天涯浪子 提交于 2020-02-16 21:59:01
这个作业属于哪个课程 2020面向对象程序设计
这个作业要求在哪里 面向对象程序设计寒假作业3
这个作业的目标 1、继续完成编程题2、发布博客
我的GitHub仓库 仓库

(还没有弄懂GitHub的上传方法,所以这次的代码没有上传到我之前的仓库地址里)
上面我把我的仓库地址挂出来,虽然仓库还是空的(可能之后会传上去)

编程题(请使用C语言或者C++完成以下题目):
1、继续完成作业二的编程题。
2、优化架构,思考代码的拓展性,比如我需要增加其他功能,如选择,循环语句怎么办。
3、思考:可以参考现有的编程语言,把这些语言的内容加入。如选择、循环语句、函数、或者扩大数字范围,支持负数等。

在思考代码的拓展性时,发现原代码中实现输出部分存在一些bug,如:
1、输出三十、四十等整十数时,存在末尾错输出为三十零、四十零的情况,输出整百时也有这种情况。
2、输出小于十一的正整数时,有数字前多输出零的情况。
所以将输出部分改写如下,还顺带添加了输出结果为负数的功能。

void output(int num)
{
    int x,y,z;
    if(num<0)
    {   num=-num;
        printf("负");
    }
    z=num%10;
    y=num%100/10;
    x=num/100;
    if(x!=0)
    {   outputchange(x);
        printf("百");
    }
    if(y!=0)
    {   outputchange(y);
        printf("十");
    }
    else if(x!=0&&z!=0)
    printf("零"); 
    if(z!=0)
    outputchange(z);
    else if(x==0&&y==0)
    printf("零");
}

实验结果如下

然后我将原本包含在主函数中的运算部分提取出来作为一个运算函数,我在运算部分中又加入了乘和除的功能(除法部分因为整形变量的限制,只能取整而没有小数部分)

void run()
{
    while(1)
    {   scanf("%s",e);
        if(strcmp(e,"看看")==0)
        break;
        scanf("%s",f);
        scanf("%s",g);
        if(strcmp(f,"增加")==0)
        num=num+inputchange(g);
        else if(strcmp(f,"减少")==0)
        num=num-inputchange(g);
        else if(strcmp(f,"乘以")==0)
        num=num*inputchange(g);
        else if(strcmp(f,"除以")==0)
        num=num/inputchange(g);
        else
        printf("输入错误\n");
    }
}

实验结果如下


完整代码如下

#include<stdio.h>
#include<string.h>
int num;
char a[10],b[10],c[10],d[10],e[10],f[10],g[10];
int inputchange(char shu[])
{
    if(strcmp(shu,"一")==0) return 1;
    if(strcmp(shu,"二")==0) return 2;
    if(strcmp(shu,"三")==0) return 3;
    if(strcmp(shu,"一")==0) return 1;
    if(strcmp(shu,"四")==0) return 4;
    if(strcmp(shu,"五")==0) return 5;
    if(strcmp(shu,"六")==0) return 6;
    if(strcmp(shu,"七")==0) return 7;
    if(strcmp(shu,"八")==0) return 8;
    if(strcmp(shu,"九")==0) return 9;
    if(strcmp(shu,"零")==0) return 0;
    if(strcmp(shu,"十")==0) return 10;
}
void outputchange(int n)
{
    if(n==0) printf("零");
    if(n==1) printf("一");
    if(n==2) printf("二");
    if(n==3) printf("三");
    if(n==4) printf("四");
    if(n==5) printf("五");
    if(n==6) printf("六");
    if(n==7) printf("七");
    if(n==8) printf("八");
    if(n==9) printf("九");
    if(n==10) printf("十");
}
void output(int num)
{
    int x,y,z;
    if(num<0)
    {   num=-num;
        printf("负");
    }
    z=num%10;
    y=num%100/10;
    x=num/100;
    if(x!=0)
    {   outputchange(x);
        printf("百");
    }
    if(y!=0)
    {   outputchange(y);
        printf("十");
    }
    else if(x!=0&&z!=0)
    printf("零"); 
    if(z!=0)
    outputchange(z);
    else if(x==0&&y==0)
    printf("零");
}
void run()
{
    while(1)
    {   scanf("%s",e);
        if(strcmp(e,"看看")==0)
        break;
        scanf("%s",f);
        scanf("%s",g);
        if(strcmp(f,"增加")==0)
        num=num+inputchange(g);
        else if(strcmp(f,"减少")==0)
        num=num-inputchange(g);
        else if(strcmp(f,"乘以")==0)
        num=num*inputchange(g);
        else if(strcmp(f,"除以")==0)
        num=num/inputchange(g);
        else
        printf("输入错误\n");
    }
}
int main()
{
    scanf("%s %s %s %s",a,b,c,d);
    if(strcmp(a,"整数")!=0)
    {   printf("输入错误\n");
        return 0;
    }
    num=inputchange(d);
    run();
    output(num);
    return 0;
}

这段代码还是不能一次输入含多个汉字表示的数字来进行计算,能力有限,我还是没有想出解决的方法。
~~~

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!