面向对象程序设计作业3

不羁岁月 提交于 2020-02-16 01:13:09
这个作业属于哪个课程 【面向对象程序设计寒假作业3】(https://edu.cnblogs.com/campus/fzu/2020OOP/homework/10288
这个作业的目标 1.继续完成作业二的编程题。2.优化架构,思考代码的拓展性,比如我需要增加其他功能,如选择,循环语句怎么办。3.思考:可以参考现有的编程语言,把这些语言的内容加入。如选择、循环语句、函数、或者扩大数字范围,支持负数等。
作业正文 【面向对象程序设计作业3】(https:////www.cnblogs.com/dudu340/p/12310718.html
【仓库地址】(https://github.com/dudu340/FZU--OOP--homework)(但是我的代码并没有编译成功,具体失败见下文)

编程题
对于编程题的优化,我首先对于我上次作业的输出进行了调整,改为了:

# include<stdio.h>
# include<string.h>
int main()
    {
        int sum,m,n;
        int zhi(char s[15]);
        int zengjia(char s[15]);
        int jianshao(char s[15]);
        char *shuchu(int sum);
        char s1[15],s2[15],s3[15],s4[15];
        char str1[15],str2[15],str3[15];
        char a[15],b[15];
        scanf("%s %s %s %s",s1,s2,s3,s4);
        sum=zhi(s4);
        while(1)
            {
                scanf("%s %s %s",str1,str2,str3);
                if(strcmp(str1,"输出")==0)
                break;
            else
                {
                    if(strcmp(str2,"增加")==0)
                    {
                    sum=sum+zengjia(str3);
                }
                else
                if(strcmp(str2,"减少")==0)
                        {
                    sum=sum-jianshao(str3);
                    }
            }
         }
        scanf("%s %s",a,b);
        if(strcmp(b,str2)==0)
                {
                if(sum<10)
                    {
                    printf("%s",*shuchu(sum));  
                }   
            else
                {
                    m=sum/10;n=sum%10;
                if(n==0)
                    {
                    printf("%s十",*shuchu(m));   
                } 
                else
                {
                    printf("%s十%s,*shuchu(m),*shuchu(n));
                }
            }
        return 0;
    }
int zhi(char s[15])
    {
        if(strcmp(s,"零")==0)
        return 0;
    else
        if(strcmp(s,"一")==0)
        return 1;
        else
            if(strcmp(s,"二")==0)
            return 2;
        else
            if(strcmp(s,"三")==0)
            return 3;
        else
            if(strcmp(s,"四")==0)
            return 4;
        else
            if(strcmp(s,"五")==0)
            return 5;
        else
            if(strcmp(s," 六")==0)
            return 6;
        else
            if(strcmp(s,"七")==0)
            return 7;
        else
            if(strcmp(s,"八")==0)
            return 8;
        else
            return 9; 
 }
int zengjia(char s[15])
    {
        if(strcmp(s,"零")==0)
        return 0;
        else
        if(strcmp(s,"一")==0)
            return 1;
        else
        if(strcmp(s,"二")==0)
            return 2;
    else
        if(strcmp(s,"三")==0)
        return 3;
    else
        if(strcmp(s,"四")==0)
        return 4;
    else
        if(strcmp(s,"五")==0)
        return 5;
    else
        if(strcmp(s," 六")==0)
        return 6;
    else
        if(strcmp(s,"七")==0)
        return 7;
    else
        if(strcmp(s,"八")==0)
        return 8;
    else
        return 9; 
    }
int jianshao(char s[15])
    {
    if(strcmp(s,"零")==0)
        return 0;
        else
        if(strcmp(s,"一")==0)
        return 1;
    else
        if(strcmp(s,"二")==0)
        return 2;
    else
        if(strcmp(s,"三")==0)
        return 3;
    else
        if(strcmp(s,"四")==0)
        return 4;
    else
        if(strcmp(s,"五")==0)
                return 5;
    else
        if(strcmp(s," 六")==0)
            return 6;
    else
        if(strcmp(s,"七")==0)
            return 7;
    else
        if(strcmp(s,"八")==0)
            return 8;
    else
        return 9; 
    }
char *shuchu(int x)
    { 
        char s1[3]="一",s2[3]="二",s3[3]="三",s4[3]="四",s5[3]="五",s6[3]="六",s7[3]="七",s8[3]="八",s9[3]="九";
        if(x==1)
            return s1;
        else 
        if(x==2)
            return s2;
        else
            if(x==3)
            return s3;
        else
            if(x==4)
            return s4;
        else
            if(x==5)
                return s5;
        else
            if(x==6)
                return s6;
        else
        if(x==7)
            return s7;
        else
        if(x==8)
        return s8;
        else
            return s9;           
    }

但是这样又导致了另外一个问题的出现:

所以这个可能也告败了(但是还没想到其他的实现方法,也有可能是我的地址没有弄好,下次再试试)
接下来,就是对代码进行一定的扩展。
一、负数的输入输出
在我看来,在生活中并没有直接说输入一个负数,其实就是“减去一个正数”,所以其实我们并没有必要考虑负数的输入,只要考虑负数的输出就可以了。然后我的实现方法是先判断是大于0还是小于0,然后:

else
    {
        printf("负");
        if(sum>-10)
        {
            printf("%s",*shuchu(sum));
        } 
    else
        {
            sum=-sum;
            m=sum/10;n=sum%10;
        if(n==0)
            {
                printf("%s十",*shuchu(m));   
            } 
        else
            {
                printf("%s十%s",*shuchu(m),*shuchu(n));
            }
            }
                    } 

这样做的话,我认为就可以将输出为负数的问题解决了。但是显然,我这个做法太麻烦了。其实有更简单的,只是我把正、负数的代码又复制了一遍,其实这样就可以了。

if(sum<0)
    {
        printf("负");
        sum=-sum;
    }

二、关于乘除法的实现
我觉得乘除法的实现与加减法的实现其实相差并不多,只要我再创建两个函数来分别实现乘除法就可以了。具体实现方法如下:

int cheng(char s[15]);
int chu(char s[15]);
if(strcmp(str2,"乘上")==0)
    {
        sum=sum*cheng(str3);
    }
else
    if(strcmp(str2,"除以")==0)
    {
        sum=sum/chu(str3);
    }
int cheng(char s[15])
    {
        if(strcmp(s,"零")==0)
        return 0;
    else
        if(strcmp(s,"一")==0)
        return 1;
    else
        if(strcmp(s,"二")==0)
        return 2;
    else
        if(strcmp(s,"三")==0)
            return 3;
    else
        if(strcmp(s,"四")==0)
        return 4;
        else
        if(strcmp(s,"五")==0)
        return 5;
    else
        if(strcmp(s," 六")==0)
        return 6;
    else
        if(strcmp(s,"七")==0)
            return 7;
    else
        if(strcmp(s,"八")==0)
        return 8;
    else
        return 9; 
    }
int chu(char s[15])
    {
        if(strcmp(s,"零")==0)
        return 0;
    else
        if(strcmp(s,"一")==0)
            return 1;
    else
        if(strcmp(s,"二")==0)
        return 2;
    else
        if(strcmp(s,"三")==0)
        return 3;
    else
        if(strcmp(s,"四")==0)
        return 4;
    else
        if(strcmp(s,"五")==0)
        return 5;
    else
        if(strcmp(s," 六")==0)
        return 6;
    else
        if(strcmp(s,"七")==0)
        return 7;
    else
        if(strcmp(s,"八")==0)
            return 8;
    else
        return 9; 
    }

或者也可以采用另一种方法,如下所示:(仅以乘法示例)

int cheng(char s[15],int sum);
sum=cheng(str3,sum);
int cheng(char s[15],int sum)
    {
        int m,n;
        m=zhi(str3);
        n=m*sum;
        return n;
    }

在乘法这个函数中,对输入的数组(str3)再运用一个函数(zhi),这样可以对输入的数值进行判断,然后再进行运算后,对最终的数值返回。这样就可以实现乘法运算了。
至于其他各位大佬早就实现的输入数为几十的问题,我目前还没有什么想法。至于其他的扩展我也还没有想法,后续会再去努力。
反思
这三次的作业,其实绝大部分都是我原先都不会的,虽然到最后我也没有将作业真正做得好,但是我在这三次作业中学到了很多的新知识,学会了如何使用命令行和脚本语言(虽然只是粗略浅的使用)等,但毕竟是一个进步。新学期马上就开始了,再努力!

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