面向对象程序设计作业3

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

原文地址:https://www.cnblogs.com/dudu340/p/12310718.html