博客班级 | 软件工程 |
---|---|
作业要求 | 作业要求 |
作业目标 | 能够精准高效完成四则运算并输出结果;迅速理解需求制定功能 |
学号 | 3180701217 |
二.题目要求
写一个能自动生成小学四则运算题目的程序,然后在此基础上扩展:
1)除了整数以外,还要支持真分数的四则运算,例如:1/6+1/8=7/24
2)程序要求能处理用户的输入,判断对错,累积分数
3)程序支持可以由用户自行选择加、减、乘、除运算
4)使用-n参数控制生成题目的个数,例如Myapp.exe -n 10,将生成10个题目
三.代码提交
1)提交你的源代码在你的博客上,注释好各个函数,给出相应解释,并把运行成功的界面粘贴到博客上;
2)要求逻辑清晰,界面整洁
#include<stdio.h>
#include<math.h>
#include<windows.h>
#include<time.h>
int right=0;//答对的正确的题目个数
int wrong=0;//答错的题目个数
void add() //整数的加法
{
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 Add() //真分数的加法
{
int zhenfenshu1_m=0, zhenfenshu1_z=0, zhenfenshu2_m=0, zhenfenshu2_z=0;
int a,b,c;
zhenfenshu1_m=0+rand()%100;
zhenfenshu1_z=0+rand()%100;
//判断产生的真分数正确性
while(zhenfenshu1_m<zhenfenshu1_z)
{
zhenfenshu1_m=0+rand()%100;
zhenfenshu1_z=0+rand()%100;
}
zhenfenshu2_m=0+rand()%100;
zhenfenshu2_z=0+rand()%100;
//判断产生的真分数正确性
while(zhenfenshu2_m<zhenfenshu2_z)
{
zhenfenshu2_m=0+rand()%100;
zhenfenshu2_z=0+rand()%100;
}
printf("请回答:
%d / %d + %d / %d = ",zhenfenshu1_z,zhenfenshu1_m,zhenfenshu2_z,zhenfenshu2_m);
scanf("%d",&c);
a=zhenfenshu1_z/zhenfenshu1_m, b=zhenfenshu2_z/zhenfenshu2_m;
if(a+b==c)
{
printf("回答正确!
");
right++;
}
else
{
printf("回答错误!
");
wrong++;
}
}
void minu() //整数减法
{
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 Minu() //真分数的减法
{
int zhenfenshu1_m=0, zhenfenshu1_z=0, zhenfenshu2_m=0, zhenfenshu2_z=0;
int a,b,c;
zhenfenshu1_m=0+rand()%100;
zhenfenshu1_z=0+rand()%100;
//判断产生的真分数正确性
while(zhenfenshu1_m<zhenfenshu1_z)
{
zhenfenshu1_m=0+rand()%100;
zhenfenshu1_z=0+rand()%100;
}
zhenfenshu2_m=0+rand()%100;
zhenfenshu2_z=0+rand()%100;
//判断产生的真分数正确性
while(zhenfenshu2_m<zhenfenshu2_z)
{
zhenfenshu2_m=0+rand()%100;
zhenfenshu2_z=0+rand()%100;
}
printf("请回答:
%d / %d - %d / %d = ",zhenfenshu1_z,zhenfenshu1_m,zhenfenshu2_z,zhenfenshu2_m);
scanf("%d",&c);
a=zhenfenshu1_z/zhenfenshu1_m, b=zhenfenshu2_z/zhenfenshu2_m;
if(a-b==c)
{
printf("回答正确!
");
right++;
}
else
{
printf("回答错误!
");
wrong++;
}
}
void mul() //整数乘法
{
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 Mul() //真分数的乘法
{
int zhenfenshu1_m=0, zhenfenshu1_z=0, zhenfenshu2_m=0, zhenfenshu2_z=0;
int a,b,c;
zhenfenshu1_m=0+rand()%100;
zhenfenshu1_z=0+rand()%100;
//判断产生的真分数正确性
while(zhenfenshu1_m<zhenfenshu1_z)
{
zhenfenshu1_m=0+rand()%100;
zhenfenshu1_z=0+rand()%100;
}
zhenfenshu2_m=0+rand()%100;
zhenfenshu2_z=0+rand()%100;
//判断产生的真分数正确性
while(zhenfenshu2_m<zhenfenshu2_z)
{
zhenfenshu2_m=0+rand()%100;
zhenfenshu2_z=0+rand()%100;
}
printf("请回答:
%d / %d * %d / %d = ",zhenfenshu1_z,zhenfenshu1_m,zhenfenshu2_z,zhenfenshu2_m);
a=zhenfenshu1_z/zhenfenshu1_m, b=zhenfenshu2_z/zhenfenshu2_m;
scanf("%d",&c);
if(a*b==c)
{
printf("回答正确!
");
right++;
}
else
{
printf("回答错误!
");
wrong++;
}
}
void di() //整数除法
{
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 Di() //真分数的除法
{
int zhenfenshu1_m=0, zhenfenshu1_z=0, zhenfenshu2_m=0, zhenfenshu2_z=0;
int a,b,c;
zhenfenshu1_m=0+rand()%100;
zhenfenshu1_z=0+rand()%100;
//判断产生的真分数正确性
while(zhenfenshu1_m<zhenfenshu1_z)
{
zhenfenshu1_m=0+rand()%100;
zhenfenshu1_z=0+rand()%100;
}
zhenfenshu2_m=0+rand()%100;
zhenfenshu2_z=0+rand()%100;
//判断产生的真分数正确性
while(zhenfenshu2_m<zhenfenshu2_z)
{
zhenfenshu2_m=0+rand()%100;
zhenfenshu2_z=0+rand()%100;
}
printf("请回答:
%d / %d ÷ %d / %d = ",zhenfenshu1_z,zhenfenshu1_m,zhenfenshu2_z,zhenfenshu2_m);
scanf("%d",&c);
a=zhenfenshu1_z/zhenfenshu1_m, b=zhenfenshu2_z/zhenfenshu2_m;
if(a/b==c)
{
printf("回答正确!
");
right++;
}
else
{
printf("回答错误!
");
wrong++;
}
}
int main(void)
{
int choise,bot;
srand(time(NULL)); //随机数每次循环都不一样
int con=0;
printf("
小学简易四则运算
");
while(1)
{
if(con==0)
{
printf(" 请选择:
");
printf(" 整数计算(请输入1)
真分数计算(请输入2)
");
scanf("%d",&choise);
switch(choise)
{
case 1:
printf(" 加法运算(请输入1)
");
printf(" 减法运算(请输入2)
");
printf(" 乘法运算(请输入3)
");
printf(" 除法运算(请输入4)
");
printf(" 退出运算(请输入5)
");
scanf("%d", &bot);
switch(bot)
{
case 1:
add();
break;
case 2:
minu();
break;
case 3:
mul();
break;
case 4:
di();
break;
case 5:
return 0;
}
break;
case 2:
printf(" 加法运算(请输入1)
");
printf(" 减法运算(请输入2)
");
printf(" 乘法运算(请输入3)
");
printf(" 除法运算(请输入4)
");
printf(" 退出运算(请输入5)
");
scanf("%d", &bot);
switch(bot)
{
case 1:
Add();
break;
case 2:
Minu();
break;
case 3:
Mul();
break;
case 4:
Di();
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);
switch(bot)
{
case 1:
add();
break;
case 2:
minu();
break;
case 3:
mul();
break;
case 4:
di();
break;
case 5:
return 0;
}
break;
case 2:
switch(bot)
{
case 1:
Add();
break;
case 2:
Minu();
break;
case 3:
Mul();
break;
case 4:
Di();
break;
case 5:
return 0;
}
break;
}
}
printf("
继续运算?(请输入1)
");
printf("
重新选择?(请输入2)
");
printf("
退出运算?(请输入3)
");
scanf("%d",&con);
if(con==1)
con=1;
else if(con==2)
con=0;
else if(con==3)
break;
else
printf("抱歉!,你输入的指令有误!请重新输入!
");
}
fflush(stdin); //清空输入缓冲区
printf("您总共完成了 %d 道题
正确 %d 道
错误 %d 道
",right+wrong,right,wrong);
}
四、运行截图
五、个人小结
知识总结:
Fraction()-->完成分数的表示和计算,并且用分数表示出来。
eval()-->可以自动进行四则混合运算(带括号),但是本次题目没有加入括号运算
代码测试-->可以发现程序隐藏的错误。
性能测试-->能够很方便地看到程序的运行时间及效率,对于以后的修改可以更加专业且有针对性。
个人感悟:
在我们设计程序时候,将一个大的问题分成几个模块,运用不同的函数将这些模块分别设计出来,然后运用函数调用,我们就可以将这些功能不同的模块联系在一起。在设计程序过程中,我原先定义的变量 总出问题,比预期的时间多花费了好多,Debug也比想像的花的时间长,深知自己技术水平还不高,编这样的程序遇到了很多困难,但我相信经过今后的不断学习,我的变成能力会有很大的提高。
psp2.1 | 任务内容 | 计划完成需要的时间(min) | 实际完成需要的时间(min) |
---|---|---|---|
Planning | 计划 | 340 | 550 |
Estimate | 估计这个任务需要多少时间,并规划大致工作步骤 | 30 | 70 |
Development | 开发 | 20 | 40 |
Analysis | 需求分析(包括学习新技术) | 30 | 25 |
Design Spec | 生成设计文档 | 10 | 20 |
Design Review | 设计复审 | 10 | 15 |
Coding Standard | 代码规范 | 10 | 10 |
Design | 具体设计 | 30 | 60 |
Coding | 具体编码 | 60 | 180 |
Code Review | 代码复审 | 30 | 60 |
Test | 测试(自我测试,修改代码,提交修改) | 40 | 45 |
Reporting | 报告 | 10 | 20 |
Test Report | 测试报告 | 10 | 15 |
Size Measurement | 计算工作量 | 20 | 15 |
Postmortem & Process Improvement Plan | 事后总结,并提出过程改进计划 | 20 | 20 |