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

  • 相关阅读:
    第四天——列表(一)
    第十二天—collections模块(十二)
    第十二天——sys模块(十)
    第十二天——os模块(九)
    第十二天——序列化模块(八)
    第十二天——random模块(七)
    第十二天——from ... import ...的使用(三)
    第十二天——import 使用(二)
    vue系列---------vuejs基础学习1.0
    前端随心记---------谈谈开发的工作规范
  • 原文地址:https://www.cnblogs.com/dudu340/p/12310718.html
Copyright © 2011-2022 走看看