小学四则运算


博客班级 AHPU软件工程
作业要求 实现小学四则运算
作业目标
学号 3180701211

一、题目要求

写一个能自动生成小学四则运算题目的程序,然后在此基础上扩展:

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

2)程序要求能处理用户的输入,判断对错,累积分数

3)程序支持可以由用户自行选择加、减、乘、除运算

4)使用-n参数控制生成题目的个数,例如Myapp.exe -n 10,将生成10个题目

二、代码

1.整数加法

void add()
{
	int s=0;
	int a,b,c,n;
	//输入要生成的题目数量
	printf("\t请输入要生成的题目数量:");
	scanf("%d",&n);
	while(s<n)
	{
		srand(time(0));
		a=rand()%100;
		b=rand()%100;
		c = a + b ;
		printf("\t%d+%d=",a,b);
		scanf("%d",&sum);
		if(sum==c)
		{
			printf("\t回答正确!\n");
			right++;
		}
		else
		{
			printf("\t回答错误!\n");
			wrong++;
		}
		s++;
	}
	printf("\t答对了%d题,打错了%d题\n",right,wrong);
}

2.整数减法

void sub()
{
	int s=0;
	int a,b,c,n,q;
	//输入要生成的题目数量
	printf("\t请输入要生成的题目数量:");
	scanf("%d",&n);
	while(s<n)
	{
		srand(time(0));
		a=rand()%100;
		b=rand()%100;
		if(a<b)
		{
			q=a;
			a=b;
			b=q;
		}
		c = a - b ;
		printf("\t%d-%d=",a,b);	
		scanf("%d",&sum);	
		if(sum==c)	
		{
			printf("\t回答正确!\n");	
			right++;	
		}	
		else	
		{	
			printf("\t回答错误!\n");	
			wrong++;	
		}
		s++;
	}
	printf("\t答对了%d题,打错了%d题\n",right,wrong);
}

3.整数乘法

void mul()
{
	int s=0;
	int a,b,c,n;
	//输入要生成的题目数量
	printf("\t请输入要生成的题目数量:");
	scanf("%d",&n);
	while(s<n)
	{
		srand(time(0));
		a=rand()%11;
		b=rand()%11;
		c = a * b;
		printf("\t%d*%d=",a,b);	
		scanf("%d",&sum);	
		if(sum==c)	
		{
			printf("\t回答正确!\n");	
			right++;	
		}	
		else	
		{	
			printf("\t回答错误!\n");	
			wrong++;	
		}
		s++;
	}
	printf("\t答对了%d题,打错了%d题\n",right,wrong);
}

4.整数除法

void chu()
{
	int s=0;
	int a,b,n,q;
	float c;
	//输入要生成的题目数量
	printf("\t请输入要生成的题目数量:");
	scanf("%d",&n);
	while(s<n)
	{
		srand(time(0));
		a=rand()%100;
		b=rand()%100;
		if(a<b)
		{
			q=a;
			a=b;
			b=q;
		}
		c = a / b;
		printf("\t%d/%d=",a,b);
		scanf("%d",&sum);
		if(sum==c)
		{
			printf("\t回答正确!\n");
			right++;
		}
		else
		{
			printf("\t回答错误!\n");
			wrong++;
		}
		s++;
	}
	printf("\t答对了%d题,打错了%d题\n",right,wrong);
}

5.真分数运算

最大公倍数

int gcd(int a,int b)
{ 
     if(a%b==0)
     return b;
         else;
         return gcd(b,a%b);
} 

真分数运算

void zhenfenshu()
{   int s=0;
	int e,f,k,c,d,n,p;
	int gxs;
	char answer[10];
	int ansz,ansm;
	char a1[12],a2[12];
	//输入要生成的题目数量
	printf("\t请输入要生成的题目数量:");
	scanf("%d",&n);
	while(s<n)
	{
		srand(time(0));
		e=rand()%9+1;
		f=rand()%9+1;
		k=rand()%4+1;
		if(e>=f)
		{
			p=e;
			e=f;
			f=p;
		}
		c=rand()%9+1;
		d=rand()%9+1;
		if(c>=d)
		{
			p=c;
			c=d;
			d=p;
		}
		switch(k)
		{
		case 1:
			ansz=e*d+c*f;
			ansm=f*d;
			gxs=gcd(ansz,ansm);
			ansz/=gxs;
			ansm/=gxs;
			itoa(ansz,a1,10);
	        itoa(ansm,a2,10);
	        strcat(a1,"/");
	        strcat(a1,a2);
			printf("\t%d/%d+%d/%d=",e,f,c,d);
            scanf("%s",answer);
		    if(strcmp(a1,answer)==0)
			{
			printf("\t回答正确!\n");
			right++;
			}
		    else
			{
			printf("\t回答错误!\n");
			wrong++;
			}
			break;
		case 2:
		    ansz=e*d-c*f;
			ansm=f*d;
			gxs=gcd(ansz,ansm);
			ansz/=gxs;
			ansm/=gxs;
			itoa(ansz,a1,10);
	        itoa(ansm,a2,10);
	        strcat(a1,"/");
	        strcat(a1,a2);
			printf("\t%d/%d-%d/%d=",e,f,c,d);
            scanf("%s",answer);
		    if(strcmp(a1,answer)==0)
			{
			printf("\t回答正确!\n");
			right++;
			}
		    else
			{
			printf("\t回答错误!\n");
			wrong++;
			}
			break;
		case 3:
			ansz=e*c;
			ansm=f*d;
			gxs=gcd(ansz,ansm);
			ansz/=gxs;
			ansm/=gxs;
			itoa(ansz,a1,10);
	        itoa(ansm,a2,10);
	        strcat(a1,"/");
	        strcat(a1,a2);
			printf("\t%d/%d*%d/%d=",e,f,c,d);
            scanf("%s",answer);
		    if(strcmp(a1,answer)==0)
			{
			printf("\t回答正确!\n");
			right++;
			}
		    else
			{
			printf("\t回答错误!\n");
			wrong++;
			}
			break;
		case 4:
	    	ansz=e*d;
			ansm=f*c;
			gxs=gcd(ansz,ansm);
			ansz/=gxs;
			ansm/=gxs;
			itoa(ansz,a1,10);
	        itoa(ansm,a2,10);
	        strcat(a1,"/");
	        strcat(a1,a2);
			printf("\t%d/%d / %d/%d=",e,f,c,d);
            scanf("%s",answer);
		    if(strcmp(a1,answer)==0)
			{
			printf("\t回答正确!\n");
			right++;
			}
		    else
			{
			printf("\t回答错误!\n");
			wrong++;
			}
			break;
		}
		s++;
	}
	printf("\t答对了%d题,打错了%d题\n",right,wrong);
}

6.主函数

int main()
{
	int n,t;//n 题数 t 运算类型编号
	while(1){
	//输入产生的运算类型
	printf("\n\n\t*****小学四则运算****\n\n"); 
	printf("请选择以下的题目类型:\n");
	printf("1.加法运算\n");
	printf("2.减法运算\n");
	printf("3.乘法运算\n");
	printf("4.除法运算\n");
	printf("5.真分数运算\n");
	printf("请选择题目类型(0-5):");
	scanf("%d",&t);
	   switch(t)
		{
		case 1:
			add();
			break;
		case 2:
			sub();
			break;
		case 3:
			mul();
			break;
		case 4:
			chu();	
			break;
		case 5:
			zhenfenshu();
			break;	
		default:
		    printf("输入错误! 请重新选择!");
		    break;
		}
   } 
	return 0;
}

三、运行界面


四、个人小结

1.psp表格

psp2.1 任务内容 计划完成需要的时间(min) 实际完成需要的时间(min)
Planning 计划 200 240
Development 开发 100 150
Analysis 需求分析(包括学习新技术) 30 40
Design Spec 生成设计文档 30 50
Design Review 设计复审 5 15
Coding Standard 代码规范 3 10
Design 具体设计 10 15
Coding 具体编码 36 26
Code Review 代码复审 5 20
Test 测试(自我测试,修改代码,提交修改) 10 30
Reporting 报告 9 30
Test Report 测试报告 3 30
Size Measurement 计算工作量 2 10
Postmortem & Process Improvement Plan 事后总结,并提出过程改进计划 5 10

2.心得和经验

通过本次作业,我学会了熟练使用markdown编辑器,同时也锻炼了我的代码编写能力。

posted @ 2020-11-07 20:59  李世媛  阅读(131)  评论(0编辑  收藏  举报