博客班级 | 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 |