个人作业1——四则运算题目生成程序(基于控制台)

码市地址:https://coding.net/u/keyi123/p/kekeke/git/blob/master/四则运算.cpp
https://coding.net/u/keyi123/p/kekeke/git/blob/master/四则运算.exe

a.需求分析

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

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

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

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

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

b.功能设计

  1. 自动生成的随机数

  2. 能够进行整数和真分数的四则运算

  3. 随机生成运算符号

  4. 判断对错,得出正确答案,打分统计正确率以及计算得分

c.设计实现

 本程序是通过c++来实现的,一共有三个方法和一个主函数,gys(int x,int y)用于求最大公约数函数,gbs(int x,int y)用于求最小公倍数函数,yuefen(int &fz,int &fm)用于定义约分函数,主函数中能够生成随机数,整数和真分数的四则运算,以及判断对错,得出正确答案,打分统计正确率以及计算得分。

d.代码说明

gys(int x,int y)用于求最大公约数函数

int gys(int x,int y)    //定义求最大公约数函数
{
    return y?gys(y,x%y):x;  //递归调用gys,返回最大公约数
}

gbs(int x,int y)用于求最小公倍数函数

int gbs(int x,int y)    //定义求最小公倍数函数
{
    return x/gys(x,y)*y;
}

yuefen(int &fz,int &fm)用于定义约分函数

void yuefen(int &fz,int &fm)          //定义约分函数
{
    int s=gys(fz,fm);
    fz=fz/s;
    fm=fm/s;
}

main函数的主要部分
(1)整数运算

		for(i=0;i<num;i++)
		{
			srand((int)time(0));
			int a=rand()%100+1;   //生成1~99范围内随机数
			int b=rand()%100+1;
			int c=rand()%3;     //生成0~3范围内随机数。0表示加法,1表示减法,2表示乘法,3表示除法 
			if(c==0)
			{
				result1=a+b;
				printf("%d+%d=",a,b);
			}
				if(c==1)
			{
				while((a-b)<0){
				int a=rand()%100+1;   //生成1~99范围内随机数
		        int b=rand()%100+1;
				}
				result1=a-b;
				printf("%d-%d=",a,b);
			}
				if(c==2)
			{
				result1=a*b;
				printf("%d*%d=",a,b);
			}
				if(c==3)
			{
				result1=a/b;
				printf("%d÷%d=",a,b);
			}
			cin>>answer1;        
			if(answer1==result1)
			{
				printf("correct\n"); 
				co=co+1;             //若正确,co+1 
			}
			else 
			{
				printf("wrong\n");

(2)真分数运算

		
		for(i=0;i<num;i++)
		{
			srand((int)time(0));
			int a=rand()%100+1;   //生成1~99范围内随机数
			int b=rand()%100+1;
			int c=rand()%100+1;
			int d=rand()%100+1;
			int e=rand()%3;     //生成0~3范围内随机数。0表示加法,1表示减法,2表示乘法,3表示除法 
			if(a<b&&c<d) 
			{
				if(e==0)
			  	{
			  		
					int u1,u2,v=gbs(b,d);
	   				u1=(v/b*a);
	   				//cout<<u1<<endl;
	   				u2=v/d*c;
	    			fz1=u1+u2;
	    			fm1=v;
	    			yuefen(fz1,fm1);
	    			printf("%d/%d+%d/%d=",a,b,c,d);
	    			
				
				}
				if(e==1)
				{
					while((a*d-b*c)<0){
					int a=rand()%100+1;   //生成1~99范围内随机数
		            int b=rand()%100+1;
			        int c=rand()%100+1;
			        int d=rand()%100+1;	
					}
					int u1,u2,v=gbs(b,d);
	    			u1=v/b*a;
	    			u2=v/d*c;
	    			fz1=u1-u2;
	    			fm1=v;
	    			yuefen(fz1,fm1);
	    			printf("%d/%d-%d/%d=",a,b,c,d);
	    			
		
				}
				if(e==2)
				{
	    			fz1=a*c;
	    			fm1=b*d;
	   				yuefen(fz1,fm1);
	    			printf("(%d/%d)*(%d/%d)=",a,b,c,d);
	    		
				}
				if(e==3)
				{
	    			fz1=a*d;
	    			fm1=b*c;
	   				yuefen(fz1,fm1);	
	   				printf("(%d/%d)÷(%d/%d)=",a,b,c,d);
	   				
				}
				cin>>answer2;  //输入答案
				float result2=(float)fz1/(float)fm1;
				cout<<"正确的答案为:"<<result2<<endl;
				if (abs(answer2-result2)<0.000001)         
				{
					printf("correct\n"); 
					co=co+1;             //若正确,co+1
				}
				else printf("wrong\n");
			}
			else i=i-1;
		}
		zhengquelv=(co*1.0)/num;        //计算正确率 
		printf("\n正确率为:%f",zhengquelv);
		printf("得分为:%f",zhengquelv*100);

e.测试运行
(1)整数运算

(2)真分数运算

PSP表:

e.小结
1、第一次做软件工程的作业,程序语言掌握的不是很熟练花费了一些时间,通过百度和请教同学,将循环、递归、浮点型比较等慢慢掌握熟练。
2、随机数写在循环里,导致程序运行较慢,以后要注意。
3、markdown的排版、、、写进去,没有注意中英文,导致无法自动排版,以后要多注意中英文的变换。
4、日后要多熟悉程序语言,也要多向同学们学习。

posted on 2017-03-07 22:31  柯yi123  阅读(163)  评论(3编辑  收藏  举报