一.作业规范要求
发布一篇随笔,使用markdown语法进行编辑
文字准确,样式清晰
请在本次及之后的每次作业随笔的最前面加上以下内容
博客班级 | https://edu.cnblogs.com/campus/ahgc/AHPU-se-JSJ18 |
---|---|
作业要求 | https://edu.cnblogs.com/campus/ahgc/AHPU-se-JSJ18/homework/11377 |
作业目标 | <培养编程能力和学用markdown> |
学号 | <3180701107> |
二.题目要求 |
写一个能自动生成小学四则运算题目的程序,然后在此基础上扩展:
1)除了整数以外,还要支持真分数的四则运算,例如:1/6+1/8=7/24
2)程序要求能处理用户的输入,判断对错,累积分数
3)程序支持可以由用户自行选择加、减、乘、除运算
4)使用-n参数控制生成题目的个数,例如Myapp.exe -n 10,将生成10个题目
三.代码提交
1)提交你的源代码在你的博客上,注释好各个函数,给出相应解释,并把运行成功的界面粘贴到博客上;
2)要求逻辑清晰,界面整洁
#include<stdio.h>
#include<windows.h>
#include<time.h>
#include<math.h>
int right=0;//答对题目数
int wrong=0;//答错题目数
int gys(int a,int b)
{
int i,n=a;
if(n>b)
n=b;
for(i=n;i>=1;i--)
{
if(a%i==0&&b%i==0)
break;
}
return i;
}
void zhengshujiafa() //整数加法
{
int a,b,c;
a=rand()%100; //随机生成数
b=rand()%100;
printf("请回答:
%d + %d = ",a,b);
scanf("%d",&c);
if(a+b==c)
{
printf("回答正确!
");
right++;
}
else
{
printf("回答错误!
");
wrong++;
}
}
void zhengshujianfa() //整数减法
{
int a,b,c;
a=rand()%100;
b=rand()%100;
printf("请回答:
%d - %d = ",a,b);
scanf("%d",&c);
if(a-b==c)
{
printf("回答正确!
");
right++;
}
else
{
printf("回答错误!
");
wrong++;
}
}
void zhengshuchengfa() //整数乘法
{
int a,b,c;
a=rand()%100;
b=rand()%100;
printf("请回答:
%d * %d = ",a,b);
scanf("%d",&c);
if(a*b==c)
{
printf("回答正确!
");
right++;
}
else
{
printf("回答错误!
");
wrong++;
}
}
void zhengshuchufa() //整数除法
{
int a,b,c;
a=rand()%100;
b=rand()%100;
printf("请回答:
%d / %d = ",a,b);
scanf("%d",&c);
if(a/b==c)
{
printf("回答正确!
");
right++;
}
else
{
printf("回答错误!
");
wrong++;
}
}
void zhenfenshujiafa() //真分数的加法
{
int fm1=0, fz1=0, fm2=0, fz2=0;
int a,b,c,d,t,i=0;
fm1=1+rand()%10;
fz1=0+rand()%10;
if(fm1<fz1)
{
t=fz1;
fz1=fm1;
fm1=t;
}
fm2=1+rand()%10;
fz2=0+rand()%10;
if(fm1<fz1)
{
fm1=t;
fz1=fm1;
t=fz1;
}
printf("请回答:
%d / %d + %d / %d = ",fz1,fm1,fz2,fm2);
scanf("%d/%d",&c,&d);
a=fm1*fm2;
b=fz1*fm2+fz2*fm1;
i=gys(a,b);
a=a/i,b=b/i;
if(a==d&&b==c)
{
printf("回答正确!
");
right++;
}
else
{
printf("回答错误!
");
wrong++;
}
}
void zhenfenshujianfa() //真分数的减法
{
int fm1=0, fz1=0, fm2=0, fz2=0;
int a,b,c,d,t,i=0;
fm1=1+rand()%10;
fz1=0+rand()%10;
if(fm1<fz1)
{
t=fz1;
fz1=fm1;
fm1=t;
}
fm2=1+rand()%10;
fz2=0+rand()%10;
if(fm1<fz1)
{
fm1=t;
fz1=fm1;
t=fz1;
}
printf("请回答:
%d / %d + %d / %d = ",fz1,fm1,fz2,fm2);
scanf("%d/%d",&c,&d);
a=fm1*fm2;
b=fz1*fm2-fz2*fm1;
i=gys(a,b);
a=a/i,b=b/i;
if(a==d&&b==c)
{
printf("回答正确!
");
right++;
}
else
{
printf("回答错误!
");
wrong++;
}
}
Void zhenfenshuchengfa() //真分数的乘法
{
int fm1=0, fz1=0, fm2=0, fz2=0;
int a,b,c,d,t,i=0;
fm1=1+rand()%10;
fz1=1+rand()%10;
if(fm1<fz1)
{
t=fz1;
fz1=fm1;
fm1=t;
}
fm2=1+rand()%10;
fz2=0+rand()%10;
if(fm1<fz1)
{
fm1=t;
fz1=fm1;
t=fz1;
}
printf("请回答:
%d / %d * %d / %d = ",fz1,fm1,fz2,fm2);
scanf("%d/%d",&c,&d);
a=fm1*fm2;
b=fz1*fz2;
i=gys(a,b);
a=a/i,b=b/i;
if(a==d&&b==c)
{
printf("回答正确!
");
right++;
}
else
{
printf("回答错误!
");
wrong++;
}
}
void zhenfenshuchufa() //真分数的除法
{
int fm1=0, fz1=0, fm2=0, fz2=0;
int a,b,c,d,t,i=0;
fm1=1+rand()%10;
fz1=1+rand()%10;
if(fm1<fz1)
{
t=fz1;
fz1=fm1;
fm1=t;
}
fm2=1+rand()%10;
fz2=0+rand()%10;
if(fm1<fz1)
{
fm1=t;
fz1=fm1;
t=fz1;
}
printf("请回答:
%d / %d / %d / %d = ",fz1,fm1,fz2,fm2);
scanf("%d/%d",&c,&d);
a=fm1*fz2;
b=fz1*fm2;
i=gys(a,b);
a=a/i,b=b/i;
if(a==d&&b==c)
{
printf("回答正确!
");
right++;
}
else
{
printf("回答错误!
");
wrong++;
}
}
int main(void)
{
int choise,bot;
int con=0;
srand(time(NULL)); //随机数每次循环都不一样
printf("
四则运算
");
while(1)
{
if(con==0)
{
printf(" 请选择:
");
printf(" 1.整数计算
2.真分数计算
");
scanf("%d",&choise);
system("cls");
switch(choise)
{
case 1:
printf(" 1.加法运算
");
printf(" 2.减法运算
");
printf(" 3.乘法运算
");
printf(" 4.除法运算
");
printf(" 5.退出运算
");
scanf("%d", &bot);
system("cls");
switch(bot)
{
case 1:
zhengshujiafa();
break;
case 2:
zhengshujianfa();
break;
case 3:
zhengshuchengfa();
break;
case 4:
zhengshuchufa();
break;
case 5:
return 0;
}
break;
case 2:
printf(" 1.加法运算
");
printf(" 2.减法运算
");
printf(" 3.乘法运算
");
printf(" 4.除法运算
");
printf(" 5.退出运算
");
scanf("%d", &bot);
system("cls");
switch(bot)
{
case 1:
zhenfenshujiafa();
break;
case 2:
zhenfenshujianfa();
break;
case 3:
zhenfenshuchengfa();
break;
case 4:
zhenfenshuchufa();
break;
case 5:
return 0;
}
break;
}
}
if(con==1)
{
switch(choise)
{
case 1:
printf(" 1.加法运算
");
printf(" 2.减法运算
");
printf(" 3.乘法运算
");
printf(" 4.除法运算
");
printf(" 5.退出运算
");
scanf("%d", &bot);
system("cls");
switch(bot)
{
case 1:
zhengshujiafa();
break;
case 2:
zhengshujianfa();
break;
case 3:
zhengshuchengfa();
break;
case 4:
zhengshuchufa();
break;
case 5:
return 0;
}
break;
case 2:
switch(bot)
{
case 1:
zhenfenshujiafa();
break;
case 2:
zhenfenshujianfa();
break;
case 3:
zhenfenshuchengfa();
break;
case 4:
zhenfenshuchufa();
break;
case 5:
return 0;
}
break;
}
}
printf("
1.继续运算?
");
printf("
2.重新选择?
");
printf("
3.退出运算?
");
scanf("%d",&con);
system("cls");
if(con==1)
con=1;
else if(con==2)
con=0;
else if(con==3)
break;
else
printf("抱歉!,你输入的指令有误!请重新输入!
");
}
system("cls");
printf("您总共完成了 %d 道题
正确 %d 道
错误 %d 道
",right+wrong,right,wrong);
return 0;
}
四.个人小结
1)在软件开发中,掌握时间是一个很重要的技能,请通过psp表格做到:
a.理清开发的完整环节,争取在每个环节都有实际的工作,一开始边界不清楚是正常的,但请尝试按照自己的理解努力对应每个环节的实际工作
b.预估每个环节的时间,并真实统计这些环节的耗时,在完成后填写完整的psp耗时表
c.这些表格是给自己看的,请不要伪造数据
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 |
2)如果所有环节你都认真做了,那么,此处,你应该有许多经验愿意与大家分享。
第一次使用博客,还有许多的功能尚未熟悉,对于功能的使用也不是很熟练,代码的设计部分也仍有需要完善的地方,在下次的作业中一定会做的更好!