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

作业目标

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

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

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

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

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

加法

//整数的加法
void add1()
{
int m,n,l;
m=rand()%100;
n=rand()%100;
printf("请回答:\n\t\t %d + %d = ",m,n);
scanf("%d",&l);
if(m+n==l)
{
 printf("回答正确!\n");
 right++;
}
else
{
 printf("回答错误!\n");
 wrong++;
}
}

//最大公约数
int gcd(int a,int b)

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

//真分数的加法
void add2() 
{
     int m1=0, z1=0, m2=0, z2=0;
     z1=1+rand()%9;
     m1=1+rand()%9+z1;
     z2=1+rand()%9;
     m2=1+rand()%9+z2;
     printf("请回答:\n\t\t %d/%d + %d/%d = ",z1,m1,z2,m2);
     
     int a,b;
     a=z1*m2+z2*m1;
     b=m1*m2;
     int i=gcd(a,b);
     a/=i;
     b/=i; 
     char answer[10],a1[12],a2[12];
     itoa(a,a1,10);
     itoa(b,a2,10);
     strcat(a1,"/");
     strcat(a1,a2);
     scanf("%s",&answer);
     if(strcmp(a1,answer)==0)
     {printf("回答正确!\n");
                  right++;
     }
   else
   {
    printf("回答错误!\n");
    wrong++;
   }
}

减法

//整数的减法 
void minu1()
{
 int m,n,l;
 m=rand()%100;
 n=rand()%100;
 printf("请回答:\n\t\t %d - %d = ",m,n);
 scanf("%d",&l);
 if(m-n==l)
 {
  printf("回答正确!\n");
  right++;
 }
 else
 {
  printf("回答错误!\n");
  wrong++;
 }
}

//真分数的减法
void minu2()
{
      int m1=0, z1=0, m2=0, z2=0;
      z1=1+rand()%9;
      m1=1+rand()%9+z1;
      z2=1+rand()%9;
      m2=1+rand()%9+z2;
      printf("请回答:\n\t\t %d/%d + %d/%d = ",z1,m1,z2,m2);
      int a,b;
      a=z1*m2-z2*m1;
      b=m1*m2;
      int i=gcd(a,b);
	  a/=i;
	  b/=i; 
	  char answer[10],a1[12],a2[12];
	  itoa(a,a1,10);
	  itoa(b,a2,10);
	  strcat(a1,"/");
	  strcat(a1,a2);
      scanf("%s",&answer);
      if(strcmp(a1,answer)==0)
      {printf("回答正确!\n");
                   right++;
	  }
    else
    {
     printf("回答错误!\n");
     wrong++;
    }
}

乘法

//整数的乘法 
void mul1()
{
 int m,n,l;
 m=rand()%100;
 n=rand()%100;
 printf("请回答:\n\t\t %d * %d = ",m,n);
 scanf("%d",&l);
 if(m*n==l)
 {
  printf("回答正确!\n");
  right++;
 }
 else
 {
  printf("回答错误!\n");
  wrong++;
 }
}

//真分数的乘法
void mul2() 
{
      int m1=0, z1=0, m2=0, z2=0;
      z1=1+rand()%9;
      m1=1+rand()%9+z1;
      z2=1+rand()%9;
      m2=1+rand()%9+z2;
      printf("请回答:\n\t\t %d/%d + %d/%d = ",z1,m1,z2,m2);
      int a,b;
      a=z1*z2;
      b=m1*m2;
      int i=gcd(a,b);
	  a/=i;
	  b/=i; 
	  char answer[10],a1[12],a2[12];
	  itoa(a,a1,10);
	  itoa(b,a2,10);
	  strcat(a1,"/");
	  strcat(a1,a2);
      scanf("%s",&answer);
      if(strcmp(a1,answer)==0)
      {printf("回答正确!\n");
                   right++;
	  }
    else
    {
     printf("回答错误!\n");
     wrong++;
    }
}

除法

//整数的除法 
void div1()
{
 int m,n,l;
 m=rand()%100;
 n=rand()%100;
 printf("请回答:\n\t\t %d / %d = ",m,n);
 scanf("%d",&l);
 if(m/n==l)
 {
  printf("回答正确!\n");
  right++;
 }
 else
 {
  printf("回答错误!\n");
  wrong++;
 }
}

//真分数的除法
void div2()
{
      int m1=0, z1=0, m2=0, z2=0;
      z1=1+rand()%9;
      m1=1+rand()%9+z1;
      z2=1+rand()%9;
      m2=1+rand()%9+z2;
      printf("请回答:\n\t\t %d/%d + %d/%d = ",z1,m1,z2,m2);
      int a,b;
      a=z1*m2;
      b=m1*z2;
      int i=gcd(a,b);
	  a/=i;
	  b/=i; 
	  char answer[10],a1[12],a2[12];
	  itoa(a,a1,10);
	  itoa(b,a2,10);
	  strcat(a1,"/");
	  strcat(a1,a2);
      scanf("%s",&answer);
      if(strcmp(a1,answer)==0)
      {printf("回答正确!\n");
                   right++;
	  }
    else
    {
     printf("回答错误!\n");
     wrong++;
    }
}

选择运算方式菜单

//整数运算 
int menu1()
{
 int choise;
 int con=0;
 printf("\n\t\t\t*****整数运算*****\n\n");
 while(1)
 {
  printf("请选择:\n");
  printf("\t\t\t  加法运算(请输入1)\n");
  printf("\t\t\t  减法运算(请输入2)\n");
  printf("\t\t\t  乘法运算(请输入3)\n");
  printf("\t\t\t  除法运算(请输入4)\n");
  printf("\t\t\t  退出运算(请输入5)\n");
  if(con==0)
   scanf("%d",&choise);
  switch(choise)
  {
  case 1:
   add1();
   break;
  case 2:
   minu1();
   break;
  case 3:
   mul1();
   break;
  case 4:
   div1();
   break;
  case 5:
   break;
  }
  printf("\n\t\t\t继续运算?(请输入1)\n");
  printf("\n\t\t\t重新选择?(请输入2)\n");
  printf("\n\t\t\t退出运算?(请输入3)\n");
  scanf("%d",&con);
  if(con==1)
   con=1;
  else if(con==2)
   con=0;
  else if(con==3)
   break;
  else
   printf("你输入的指令有误!请重新输入!\n");
 }
 printf("您总共完成了 %d 道题\n正确 %d 道\n错误 %d 道\n",right+wrong,right,wrong);
}
//分数运算 
int menu2()
{
 int choise;
 int con=0;
 printf("\n\t\t\t*****分数运算*****\n\n");
 while(1)
 {
  printf("请选择:\n");
  printf("\t\t\t  加法运算(请输入1)\n");
  printf("\t\t\t  减法运算(请输入2)\n");
  printf("\t\t\t  乘法运算(请输入3)\n");
  printf("\t\t\t  除法运算(请输入4)\n");
  printf("\t\t\t  退出运算(请输入5)\n");
  if(con==0)
   scanf("%d",&choise);
  switch(choise)
  {
  case 1:
   add2();
   break;
  case 2:
   minu2();
   break;
  case 3:
   mul2();
   break;
  case 4:
   div2();
   break;
  case 5:
   break;
  }
  printf("\n\t\t\t继续运算?(请输入1)\n");
  printf("\n\t\t\t重新选择?(请输入2)\n");
  printf("\n\t\t\t退出运算?(请输入3)\n");
  scanf("%d",&con);
  if(con==1)
   con=1;
  else if(con==2)
   con=0;
  else if(con==3)
   break;
  else
   printf("你输入的指令有误!请重新输入!\n");
 }
 printf("您总共完成了 %d 道题\n正确 %d 道\n错误 %d 道\n",right+wrong,right,wrong);
}
int main(){
	
  start:
  	system("color f2");//屏幕颜色设定
	system("mode con:cols=80 lines=35");
  printf("\t\t\t  整数运算(请输入1)\n");
  printf("\t\t\t  分数运算(请输入2)\n");
  printf("\t\t\t 请选择:");
  int ch;
  while(1)
  {
  	 scanf("%d",&ch);
  	switch(ch){
  		case 1: menu1();break;
  		case 2: menu2();break;
  		default:
  			printf("\t\t\t输入错误!请重新输入");
			goto start; 
    system("pause");
	system("cls");
	  }
   } 
   
}

运行截图

主界面


运行界面


作业小结

psp表格

psp2.1 任务内容 计划完成需要的时间(min) 实际完成需要的时间(min)
Planning 计划 120 10
Development 开发 110 150
Analysis 需求分析(包括学习新技术) 10 10
Design Spec 生成设计文档 30 40
Design Review 设计复审 5 10
Coding Standard 代码规范 5 5
Design 具体设计 10 12
Coding 具体编码 40 30
Code Review 代码复审 5 7
Test 测试(自我测试,修改代码,提交修改) 10 15
Reporting 报告 9 6
Test Report 测试报告 5 5
Size Measurement 计算工作量 3 1
Postmortem & Process Improvement Plan 事后总结,并提出过程改进计划 5 5
posted on 2020-11-07 16:22  YIBO85  阅读(174)  评论(0编辑  收藏  举报