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

  • 相关阅读:
    /etc/sysctl.conf 控制内核相关配置文件
    python 并发编程 非阻塞IO模型
    python 并发编程 多路复用IO模型
    python 并发编程 异步IO模型
    python 并发编程 阻塞IO模型
    python 并发编程 基于gevent模块 协程池 实现并发的套接字通信
    python 并发编程 基于gevent模块实现并发的套接字通信
    python 并发编程 io模型 目录
    python 并发编程 socket 服务端 客户端 阻塞io行为
    python 并发编程 IO模型介绍
  • 原文地址:https://www.cnblogs.com/dudu340/p/12310718.html
Copyright © 2011-2022 走看看