zoukankan      html  css  js  c++  java
  • 四则运算(修改版)

    四则运算(修改版)

           之前的一篇随笔“四则运算:我的设计和设想(未完成版)”中的程序在和同伴共同讨论审核后发现诸多格式书写问题程序问题,格式问题已在代码中修改,代码放置于此博文的附录内,的可审阅在此只对程序问题做出提出和修改。

    程序问题:###

    1. 执行整数加法,q 键退出后随及出现真分数加法运算。
    2. 真分数的任意运算的结果都显示为0.00,无法正常计算。
    3. 真分数进行任一运算得出的结果都为未约分数,如何化为最简式?(未解决)
    4. 修改版的代码仍存在冗长现象,如何利用函数将其简化?(未解决)

    解决办法:

    1. 程序内,整数和真分数的运算是以switch语句区分开的,但每个case语句后并未加上break语句,所以造成无退出继续运行的状况。(PS: 找到解决办法才发现,问这个问题充分的显示了我的智商到达了一定的程度(di)。)
    2. 写出一个函数progress(int f1,int f2),求取最大公约数,在之后的运算中可调用使用。(程序参考网络:http://www.zybang.com/question/e431cf54c7fabec2ffae8691e3dcfaba.html

    注明:随运行结果可正常显示无error,但无法保证其正确性。对于此问题,后续再补充。


    程序截图:

    1.整数减法运算

    2.真分数除法运算

    附录:源代码(未完成版)###

    别瞎找着!点我!

    源代码(修改版)

    #include<stdio.h>
    #include <stdlib.h>
    #include <time.h>								
    
    // 求最大公约数 
    //(参考:http://www.zybang.com/question/e431cf54c7fabec2ffae8691e3dcfaba.html) 
    int process(int f1,int f2)
    {
    	int fx;
    	while(f2!=0){
    		fx=f1%f2;
    		f1=f2;
    		f2=fx;
    	}
    	return f1;
    }
     
    
    int main()
    {
    int a,b,x,y,s=0,r=0,e=0,result;  //s总题数  r正确数 e错误数 
    float fen1,fen2; //真分数 
    char c;  //答题者输入的值 (比如其中的a+b=c) 
    int m,n; //输入的数值,确定性 
    printf("
    		【小朋友~又到了检验自己实力的时候啦!让我们开始吧!】
    
    ");
    
    printf("输入要练习的题型吧(1整数 / 2真分数):");      
    scanf("%d",&n);
    
    printf("
    根据下面序列号,可以选择试题哦
    ");
    printf("1.+ 加法
    ");
    printf("2.- 减法
    ");
    printf("3.* 乘法
    ");
    printf("4./ 除法");
    printf("
     提示:1.整数间运算 要保留到小数点到整数部分!
    ") ;  
    printf("       2.按q键退出哦!
    ") ;  
    	
    printf("
    输入要练习的对应序号吧:");      
    scanf("%d",&m);
    printf("*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
    ");
    
    printf("
    小测试开始啦!认真答题吧!
    "); 
    srand( (unsigned)time( NULL ) );    //取随机数 
    
    switch(n){
    
    /*整数开始*/
    case 1:{
    	 while ((c=getchar())!='q')   //按q退出
    	{
    	  s++;
    	  a=rand()%100;
    	  b=rand()%100;
          x=rand()%100;  
          y=rand()%x; //保证减法、除法 可应用 
      
    
    //加法 + 
    	if(m==1)
        {
           printf("%d+%d=",a,b);       
    	   scanf("%d",&c);
           if (a+b==c) r++;
           else{
    	   		printf("要细心呀!正确答案为:%d
    ",a+b);
    			e++;
    			}
    	 }
    	 
    //减法 -		 
    	else if(m==2)
    	{                           
    		printf("%d-%d=",x,y);
    		scanf("%d",&c);
    		if (x-y==c) r++;
    		else{
    			 printf("要细心呀!正确答案为:%d
    ",x-y);
    			 e++;
    			}
    	}
    
    //乘法 *	
    	else if(m==3)
    	{                             
    		printf("%d*%d=",a,b);
    		scanf("%d",&c);
    		if (a*b==c) r++;
    		else{
    			 printf("要细心呀!正确答案为:%d
    ",a*b);
    			 e++;
    			 }
    	}
    
    //除法 / 
    	else if(m==4)
    	{   
    		if(y!=0){                 //排除 除数=0的情况 
    			printf("%d/%d=",x,y);
    			scanf("%d",&c);
    			float shang=x/y;
    			if (x/y==c) r++;
    			else{
    				 printf("要细心呀!正确答案为:%.2f
    ",shang);  
    				 e++;
    	 		}//else结束 
    		}//if(y!=0)结束                     
    	} 
        else	
    		printf("请输入正确序号!
    "); //输入其他数字,提示输出错误
    		result=100*r/s; //整体得分 
    	}
    }//整数结束 
    break;
    
    /*真分数 开始*/
    case 2:{	
    	while ((c=getchar())!='q')     
    	{
    	  s++;	
    	  float t;      //t做转换的中间因子。fen1,fen2转换		 
    	  x=rand()%100;   
    	  y=rand()%x; 
    	  a=rand()%100;
    	  b=rand()%a;
    	  fen1=y/x;  //设定两个不同的真分数 
    	  fen2=b/a;
    	  int f1,f2,min,result2;  //求最大公约数所设定的值 
      
    //加法 + 
    	if(m==1)
    	{
           printf("%d/%d+%d/%d=",y,x,b,a);       
    	   scanf("%d",&result2); 
    	   f1=y*a+x*b;
    	   f2=a*x;
    	   min=process(f1,f2);
    	   if (fen1+fen2==result2) r++;
           else{
    	 		  printf("要细心呀!正确答案为:%d/%d
    ",f1/min,f2/min);
    			  e++;
    			}
    	 }
    	 
    //减法 -		 
    	else if(m==2)
    	{         
    		if(fen1>fen2)
    		{
    			printf("%d/%d-%d/%d=",y,x,b,a);       
    	   		scanf("%d",&result2);
    	   		f1=y*a+x*b;
    	   		f2=a*x;
    	   		min=process(f1,f2);
    			if (fen1-fen2==result2) r++;
           		else{
    	   				printf("要细心呀!正确答案为:%d/%d
    ",f1/min,f2/min);
    					e++;
    			}
    		}
    		else{
    				t=fen1;
    				fen1=fen2;
    				fen2=t;	   //减数>被减数,则转换 
    				printf("%d/%d-%d/%d=",y,x,b,a);       
    	   			scanf("%d",&result2);
    	   			f1=y*a+x*b;
    	   			f2=a*x;
    	   			min=process(f1,f2);
    				if (fen1-fen2==result2) r++;
           			else{
                         printf("要细心呀!正确答案为:%d/%d
    ",f1/min,f2/min);
    					e++;
    			}
    		}                  
    	}
    
    //乘法 *	
    	else if(m==3)
    	{
    		int j=y*b,k=x*a; //分子or分母间的相乘 
           printf("%d/%d*%d/%d=",y,x,b,a);       
    	   scanf("%d",&result2);
    	   f1=y*a+x*b;
    		f2=a*x;
    		min=process(f1,f2);
           if (j*k==result2) r++;
           else{
    	   		printf("要细心呀!正确答案为:%d/%d
    ",f1/min,f2/min);
    			e++;
    			}
    	 }
    
    //除法 / 
    	else if(m==4)
    	{
    		int o=y*a,p=x*b; //相除等于乘于一个倒数 
    	    if(p!=0){       //防止分母=0,即p!=0 
           			printf("(%d/%d)/(%d/%d)=",y,x,b,a);       
    	   			scanf("%d",&result2);
    	   			f1=y*a+x*b;
    				f2=a*x;
    				min=process(f1,f2);
           			if (o*p==result2) r++;
          		    else{
    	   					printf("要细心呀!正确答案为:%d/%d
    ",f1/min,f2/min);
    						e++;
    				}
    	  }
    	}
         else	
    		printf("请输入正确序号!
    "); //输入其他数字,提示输出错误
    		result=100*r/s;      //得分
    	}
    }//真分数结束 
    break;
    }
    
    
    //成绩显示 
    printf("
    本次答题成绩:%d
    
    ",result);
    printf("本次共有%d道题。
    回答正确有 %d 道
    回答错误有 %d 道
    ",s,r,e);
    
    //评语     
    if(result>60&&result<80)
    {
     printf("
    
    评语:还差一点就要满分咯!继续前进吧!");  
    }
    else if(result>80&&result<100)
    {
     printf("
    
    评语:就差一丢丢了!再接再厉!");  
    }  
    else if(result==100)
    	{
    		printf("非常棒哦!为你点赞!"); 
    	}
    	else
    	{
          printf("
    
    评语:要多加练习哟!你的潜力很大呢!");  
    	} 
    }
  • 相关阅读:
    Day4-装饰器
    Day3-递归函数、高阶函数、匿名函数
    Day3-函数及作用域
    Day2-字符编码转换
    Day2-文件操作
    Day2-列表、字符串、字典、集合
    Day1-模块初识
    JavaScript 笔试题
    从JavaScript 数组去重谈性能优化
    prototype
  • 原文地址:https://www.cnblogs.com/JINGY/p/5310634.html
Copyright © 2011-2022 走看看