小学四则运算
一、作业信息
这个作业属于哪个课程 | https://edu.cnblogs.com/campus/ahgc/AHPU-se-JSJ18 |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/ahgc/AHPU-se-JSJ18/homework/11377 |
这个作业的目标 | 能对需求进行分析并实现;编码格式规范;学习博客撰写 |
学号 | 3180701308 |
二、作业要求
写一个能自动生成小学四则运算题目的程序,然后在此基础上扩展:
1)除了整数以外,还要支持真分数的四则运算,例如:1/6+1/8=7/24
2)程序要求能处理用户的输入,判断对错,累积分数
3)程序支持可以由用户自行选择加、减、乘、除运算
4)使用-n参数控制生成题目的个数,例如Myapp.exe -n 10,将生成10个题目
三、代码提交与运行截图
1、
#include <stdio.h>
#include <stdlib.h>
//函数原型int getChoice();void showMenu();void doExercise(int);int test(int);
/* 功能:用户选择功能 返回:用户的功能选择 1、加法 2、减法 3、乘法 4、除法 0、退出*/int getChoice(){
int choice;
scanf("%d",&choice);
return choice;}
/* 功能:显示功能的菜单*/
void showMenu(){
printf("===================================\n");
printf("\n欢迎使用小学生四则运算练习软件\n");
printf("\t1、加法练习\t2、减法练习\n");
printf("\t3、乘法练习\t4、除法练习\n");
printf("\t5、综合练习\t0、退出系统\n");
printf("请输入你的选择(0--5):\n");
printf("\n===================================\n");}
/* 功能:计分器*/void doExercise(int n){
int score=0; //练习得分,初始化为0
int i=0; //练习题数的计数器
for(i=1;i<=10;i++)
{
score=score+test(n); //间接递归调用test(n)
}
printf("本次练习十道题,你做对了%d道\n",score);}
/* 功能:进行一道题的测试过程*/int test(int n){
int ranswer=0; //正确答案
int uanswer=0; //用户输入的答案
int t=0; //临时变量
char operation; //运算类别
int num1=0; //操作数1
int num2=0; //操作数2
srand(time(NULL)); //初始化随机数种子
num1=rand()%10; //取0—9之间的随机数
num2=rand()%10;
//进入程序功能,如果选择5就随机产生1-4所代表的每一种运算方式
if(n==5)
{
n=rand()%4+1;
}
switch(n)
{
case 1:
operation='+';
break;
case 2:
operation='-';
break;
case 3:
operation='*';
break;
case 4:
operation='/';
break;
}
//加入一条防止“不够减”的语句,当选择减法且num1小于num2时不够减//不够减的时候,用临时变量交换两个操作数
if((operation=='-') && (num1<num2))
{
t=num1;
num1=num2;
num2=t;
}
//防止“除数为0”的程序漏洞//当num2被随机取值到0时,就将num2强制置为1//做除法时,将num1的值强制赋值给num1*num2,防止不能整除
if(operation=='/')
{
if(num2==0)
{
num2=1;
}
num1=num1*num2; //防止num1不能被num2整除的语句
}
//输出测试题本身、提示用户输入
printf("%d%c%d= ",num1,operation,num2);
scanf("%d",&uanswer);
//程序计算正确结果
switch(operation)
{
case '+':
ranswer=num1+num2;
break;
case '-':
ranswer=num1-num2;
break;
case '*':
ranswer=num1*num2;
break;
case '/':
ranswer=num1/num2;
break;
}//评判,做对返回1,做错返回0
if(uanswer==ranswer)
{
printf("恭喜你,做对了!\n");
return 1;
}
else
{
printf("真遗憾,做错了!\n");
return 0;
}}
//主函数int main(void){
int choice=0; //接收用户的选择
//循环开始功能,本次用do……while循环
do
{
showMenu(); //显示菜单
choice=getChoice();
//控制choice的范围
if(choice<0 || choice>5)
{
choice=1; //强制做加法
}
if(choice==0)
{
break; //用户选择0,退出循环(退出系统)
}
doExercise(choice); //做什么练习,并启动评分
}while(choice!=0);
printf("欢迎使用本软件,再见!\n");
return 0;}
2、运行截图
(1)、加法
(2)、减法
(3)、乘法
(4)、除法
四、个人小结
在这次的实验中,出现的问题很多,当一个程序写完以后,经常会有很多错误而没法解决。通过询问同学之后,修改了很多错误,有些是因为自己的粗心导致的,比较懊恼。在这一次的实验中,也看到了自己的很多不足,存在的很多问题,没有很好的思维逻辑,有种无法下手的感觉。
(psp表格)
psp2.1 | 任务内容 | 计划完成需要的时间(min) | 实际完成需要的时间(min) |
---|---|---|---|
Planning | 计划 | 250 | 150 |
Estimate | 估计这个任务需要多少时间,并规划大致工作步骤 | 100 | 50 |
Development | 开发 | 150 | 200 |
Analysis | 需求分析(包括学习新技术) | 20 | 15 |
Design Spec | 生成设计文档 | 20 | 20 |
Design Review | 设计复审 | 15 | 10 |
Coding Standard | 代码规范 | 10 | 10 |
Design | 具体设计 | 180 | 200 |
Coding | 具体编码 | 40 | 45 |
Code Review | 代码复审 | 20 | 40 |
Test | 测试(自我测试,修改代码,提交修改) | 60 | 85 |
Reporting | 报告 | 20 | 40 |
Test Report | 测试报告 | 10 | 10 |
Size Measurement | 计算工作量 | 20 | 20 |
Postmortem & Process Improvement Plan | 事后总结,并提出过程改进计划 | 20 | 20 |