基于控制台的四则运算

1.1具体任务

1.除了整数以外,还要支持真分数的四则运算,真分数的运算,例如:1/6 + 1/8 = 7/24

2.运算符为 +, −, ×, ÷

3.并且要求能处理用户的输入,并判断对错,打分统计正确率。

4.要求能处理用户输入的真分数, 1/2, 5/12

5.使用 -n 参数控制生成题目的个数,例如执行下面命令将生成10个题目
   Myapp.exe -n 10

1.21.需求分析

  • 1、整数四则运算(数字随机生成);
  • 2、真分数四则运算(数字随机生成);
  • 3、小学生故结果不能出现负数;
  • 3、使用 -n 参数控制生成题目的个数。
  • 系统

1.3系统模块设计

 

系统共设计了两大模块:

一.整数四则

 

//整数加法
void intadd(int min,int max)

//整数减法
void intsub(int min,int max)//考虑负数问题

//整数乘法
void intmul(int min,int max)

//整数除法
int intdiv(int min,int max)//考虑整除问题

二.真分数四则

//考虑约分还有结果比较问题

出现约分问题故需要最大公约数则许编写int gcd(int a,int b)函数

//真分数加法
void zfsadd()

//真分数减法
void zfssub()

//真分数乘法
void zfsmul()

//真分数除法
void zfsdiv()

1.3系统实现

开发环境

Pcdevcpp(编译)

主要代码

主函数

int main(int argc,char *argv[])    
{
         int min,max,choice,n;
        min=0;
        max=99;
            n=atoi(argv[2]);
       // n=10;
    
        showMenu(n);
        scanf("%d",&choice);
        if(choice>0&&choice<5)
        {
                printf("请输入你要整数运算的范围0~?(默认0~99)\n");
                scanf("%d",&max);
    
        }
        
    
        for(int i=0;i<n;i++)
        { 

            switch(choice) 
            {
                
                case 1:
                
                    intadd(min,max);
                    break;
                case 2:
                    intsub(min,max);
                    
                    break;    
                case 3:
                    intmul(min,max);
                    break;    
                case 4:
                    intdiv(min,max);
                    break;
                case 5: zfsadd();
                    break;                        
                case 6:zfssub();
                    break;
                case 7:zfsmul();
                    break;
                case 8:zfsdiv();
                    break;
                    default :printf("就不做啦啦啦!"); 
                    break;    
                    
            }


    }
        printf("正确率为%f%%",(float)right/(float)n*100);
return 0;
    
    
    
}        

 

最大公约数

 

int gcd(int a,int b)
{
    while(a%b!=0)
    {
        int t=a%b;
        a=b;
        b=t;
    }
    return b;
}

 

 //整数减法

 

void intsub(int min,int max)
{	
    int a,b,uanswer,t;
    srand(time(NULL));        //初始化随机数种子
    a=rand()%max+min;            
    b=rand()%max+min; 
    if(a<b)
    {
        t=a;
	a=b;
	b=t;
    }
     printf("%d-%d=",a,b);
     scanf("%d",&uanswer); 
     if(uanswer==a-b)
    {
//真分数减法
void zfssub()
{
	int x,y,t;
	char ranswer[20],uanswer[20],p[20];
	int x1,y1,x2,y2;
	srand(time(NULL));  
	x1=rand()%10+1;
	x2=rand()%10+1;
	y1=rand()%10+1;
	y2=rand()%10+1;
	if((float)x1/(float)y1<(float)x2/(float)y2) //避免出现负数的情况 
	{
		t=x1;x1=x2;x2=t;
		t=y1;y1=y2;y2=t;
	}
	x=x1*y2-x2*y1;
	y=y1*y2;
	t=gcd(x,y);
	x=x/t;
	y=y/t;
	printf("%d/%d -%d/%d=",x1/gcd(x1,y1),y1/gcd(x1,y1),x2/gcd(x2,y2),y2/gcd(x2,y2));
	itoa(x,ranswer,10);
	itoa(y,p,10);    
    strcat(ranswer,"/");
    strcat(ranswer,p);
    scanf("%s",&uanswer);
         if(strcmp(ranswer,uanswer)==0)
		 {
		 	printf("right\n");
		 	right++;
         }
         else
		 {
		 	printf("wrong\n正确答案是%s\n",ranswer);

		}
}

  

printf("right\n"); right++; } else { printf("wrong\n正确答案是%d\n",a-b); } }

 

 

 

结果截图

 

 

整数减法运算

真分数减法运算

代码链接  https://git.coding.net/wengbm/bm.git

实验总结:

没有画流程图所以在整体美观和功能实现上和现实有较大的出入。在真分数的约分上有点小问题考虑的不够全面。

 

转载于:https://www.cnblogs.com/wengbm/p/6506036.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值