| 博客班級 | https://edu.cnblogs.com/campus/ahgc/AHPU-se-JSJ18 |
| ---- | ---- | ---- |
| 作业要求 | https://edu.cnblogs.com/campus/ahgc/AHPU-se-JSJ18/homework/11377 |
| 作业目标 | 完成四则运算并有一定的拓展 |
| 学号 |3180701114 |

题目要求

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

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

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

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

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

代码部分

#include<stdio.h>
#include<stdlib.h> 
#include<math.h>
#include<time.h>
#include<windows.h>
int sum=0;

整数加法

void zhengshujiafa()//整数加法
{
 int i,j,m;
 srand(time(NULL));
    i=rand()%100; 
    j=rand()%100;  
 printf("%d+%d=",i,j);
            scanf("%d",&m);
   if(i+j==m)
   {printf("回答正确");
   sum++;}
           else printf("回答错误\n%d+%d=%d\n",i,j,i+j);


   
   
}

整数减法

void zhengshujianfa()//整数减法
{
 int i,j,n;
    i=rand()%100; 
    j=rand()%100; 
 printf("%d-%d=",i,j);
  scanf("%d",&n);
  
  if(i-j==n)
  {printf("回答正确");
  sum++;}
      else
   printf("回答错误\n%d-%d=%d\n",i,j,i-j);
}

整数乘法

void zhengshuchengfa()//整数乘法
{
int i,j,o;
    i=rand()%100; 
    j=rand()%100;


         printf("%d*%d=",i,j);
  scanf("%d",&o);


  if(i*j==o)
  {printf("回答正确");
  sum++;}
  else
   printf("回答错误\n%d*%d=%d\n",i,j,i*j);
 
}

整数除法

void zhengshuchufa()//整数除法
{
int i,j,p;
    i=rand()%100; 
    j=rand()%100;


 printf("%d/%d=",i,j);
  scanf("%d",&p);
  if(i/j==p)
  {printf("回答正确");
  sum++;}
  else printf("回答错误\n%d/%d=%d\n",i,j,i/j);
}

分数加法




void fenshujiafa()//分数加法
{
int a,b,c,d;

int j,k,m;
char l;

	a=rand()%10;
	b=rand()%10+1;
	do
	{
		b=rand()%10+1;
	}while(a>=b);
	c=rand()%10;
	d=rand()%10+1;
	do
	{
		d=rand()%10+1;
	}while(c>=d);
	printf("%d/%d+%d/%d=  \n",a,b,c,d);

	a=(a*d)+(c*b);
	b=b*d;

	//化简
	if(a<b)
	{
		for(m=a;m>=1;m--)
		{
			if((a%m==0)&&(b%m==0))
			{
				a=a/m;
				b=b/m;
			}
		}
		scanf("%d%c%d",&j,&l,&k);
		if(l=='/')
		{
			if(j==a&&k==b)
			{
				printf("回答正确!\n");
				sum++;
			}
			else
				printf("回答错误!正确答案为%d/%d\n",a,b);
		}
	}
	else if(a==b)
	{
		scanf("%d",&j);
		if(j==1)
		{
			printf("回答正确!\n");
			sum++;
		}
		else
			printf("回答错误!正确答案为1\n");
	}
	else
	{
		for(m=b;m>=1;m--)
		{
			if((b%m==0)&&(a%m==0))
			{
				a=a/m;
				b=b/m;
			}
		}
		scanf("%d%c%d",&j,&l,&k);
		if(l=='/')
		{
			if(j==a&&k==b)
			{
				printf("回答正确!\n");
				sum++;
			}
			else
				printf("回答错误!正确答案为%d/%d\n",a,b);
		}
	}

//printf("您的得分为:%d\n",scr);
}

分数减法

void fenshujianfa()//分数减法
{
int a,b,c,d;

int j,k,m;
char l;


	a=rand()%10;
	b=rand()%10+1;
	do
	{
		b=rand()%10+1;
	}while(a>=b);
	
	c=rand()%10;
	d=rand()%10+1;
	do
	{
		d=rand()%10+1;
	}while(c>=d);
	printf("%d/%d-%d/%d=  \n",a,b,c,d);

	a=(a*d)-(c*b);
	b=b*d;

	//化简
	if(a<b)
	{
		for(m=a;m>=1;m--)
		{
			if((a%m==0)&&(b%m==0))
			{
				a=a/m;
				b=b/m;
			}
		}
		scanf("%d%c%d",&j,&l,&k);
		if(l=='/')
		{
			if(j==a&&k==b)
			{
				printf("回答正确!\n");
				sum++;
			}
			else
				printf("回答错误!正确答案为%d/%d\n",a,b);
		}
	}
	else if(a==b)
	{
		scanf("%d",&j);
		if(j==1)
		{
				printf("回答正确!\n");
				sum++;
		}
		else
			printf("回答错误!正确答案为1\n");
	}
	else
	{
		for(m=b;m>=1;m--)
		{
			if((b%m==0)&&(a%m==0))
			{
				a=a/m;
				b=b/m;
			}
		}
		scanf("%d%c%d",&j,&l,&k);
		if(l=='/')
		{
			if(j==a&&k==b)
			{
				printf("回答正确!\n");
				sum++;
			}
			else
				printf("回答错误!正确答案为%d/%d\n",a,b);
		}
	}

//printf("您的得分为:%d\n",scr);
}

分数乘法

void fenshuchengfa()//分数乘法
{
int a,b,c,d;

int j,k,m;
char l;


	a=rand()%10;
	b=rand()%10+1;
	while(a>=b)
	{
		b=rand()%10+1;
	}
	
	c=rand()%10;
	d=rand()%10+1;
	while(c>=d)
	{
		d=rand()%10+1;
	}
	printf("%d/%d*%d/%d=  \n",a,b,c,d);

	a=a*c;
	b=b*d;

	//化简
	if(a<b)
	{
		for(m=a;m>=1;m--)
		{
			if((a%m==0)&&(b%m==0))
			{
				a=a/m;
				b=b/m;
			}
		}
		scanf("%d%c%d",&j,&l,&k);
		if(l=='/')
		{
			if(j==a&&k==b)
			{
				printf("回答正确!\n");
				sum++;
			}
			else
				printf("回答错误!正确答案为%d/%d\n",a,b);
		}
	}
	else if(a==b)
	{
		scanf("%d",&j);
		if(j==1)
		{
				printf("回答正确!\n");
				sum++;
		}
		else
			printf("回答错误!正确答案为1\n");
	}
	else
	{
		for(m=b;m>=1;m--)
		{
			if((b%m==0)&&(a%m==0))
			{
				a=a/m;
				b=b/m;
			}
		}
		scanf("%d%c%d",&j,&l,&k);
		if(l=='/')
		{
			if(j==a&&k==b)
			{
				printf("回答正确!\n");
				sum++;
			}
			else
				printf("回答错误!正确答案为%d/%d\n",a,b);
		}
	}

分数除法

//printf("您的得分为:%d\n",scr);
}
void fenshuchufa()//分数除法
{
int a,b,c,d;

int j,k,m;
char l;


	a=rand()%10;
	b=rand()%10+1;
	while(a>=b)
	{
		b=rand()%10+1;
	}
	
	c=rand()%10;
	d=rand()%10+1;
	while(c>=d)
	{
		d=rand()%10+1;
	}
	printf("%d/%d / %d/%d=  \n",a,b,c,d);

	a=a*d;
	b=b*c;

	//化简
	if(a<b)
	{
		for(m=a;m>=1;m--)
		{
			if((a%m==0)&&(b%m==0))
			{
				a=a/m;
				b=b/m;
			}
		}
		scanf("%d%c%d",&j,&l,&k);
		if(l=='/')
		{
			if(j==a&&k==b)
			{
				printf("回答正确!\n");
				sum++;
			}
			else
				printf("回答错误!正确答案为%d/%d\n",a,b);
		}
	}
	else if(a==b)
	{
		scanf("%d",&j);
		if(j==1)
		{
				printf("回答正确!\n");
				sum++;
		}
		else
			printf("回答错误!正确答案为1\n");
	}
	else
	{
		for(m=b;m>=1;m--)
		{
			if((b%m==0)&&(a%m==0))
			{
				a=a/m;
				b=b/m;
			}
		}
		scanf("%d%c%d",&j,&l,&k);
		if(l=='/')
		{
			if(j==a&&k==b)
			{
				printf("回答正确!\n");
				sum++;
			}
			else
				printf("回答错误!正确答案为%d/%d\n",a,b);
		}
	}

//printf("您的得分为:%d\n",scr);
}

主函数

void main()
{
int   shuru=0;

char x;


                                                
   system("color 11");                    
                                  
   
printf("                     欢迎参加小学生数学四项法则测试\n");

 while (1)
 {
    printf("你需要做什么题型计算?请选择:\n");
	printf("	    整数加法(输入1)  整数减法(输入2)  整数乘法(输入3)  整数除法(输入4)\n");
	printf("            分数加法(输入5)  分数减法(输入6)  分数乘法(输入7)  分数除法(输入8)\n");
    

	if(shuru==0)
	scanf("%c",&x);//
   


   switch(x)
   {
   case '1': zhengshujiafa();break;
   case '2': zhengshujianfa();break;
   case '3': zhengshuchengfa();break;
   case '4': zhengshuchufa();break;
   case '5':fenshujiafa();break;
   case '6':fenshujianfa();break;
   case '7':fenshuchengfa();break;
   case '8':fenshuchufa();break;
   default : printf("输入错误,请重新输入");
   
	}
 printf("请输入数字选择:\n1.继续\n2.重新选择题型\n3.结束\n");
  scanf("%d",&shuru);
 if(shuru==1) shuru=1;
 if(shuru==2) shuru=0;
 if(shuru==3) break;
 }
 printf("最后得分为%d分",sum);
 
}

psp

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

心得体会

此次代码设计让我更加了解随机数以及如何计算分数,使我解决问题与多了一种思路。此次做的并不算完美,希望以后可以做的更好。