实验二结对作业
实验题目
我们在刚开始上课的时候介绍过一个小学四则运算自动生成程序的例子,请实现它,要求:
① 能够自动生成四则运算练习题
② 可以定制题目数量
③ 用户可以选择运算符
④ 用户设置最大数(如十以内、百以内等)
⑤ 用户选择是否有括号、是否有小数
⑥ 用户选择输出方式(如输出到文件、打印机等)
最好能提供图形用户界面(根据自己能力选做,以完成上述功能为主)
实验过程
(1) 本人角色
本人角色:驾驶员
GitHub地址:
https://github.com/mxyu0330/text4/blob/main/temp.cpp
GitHub截图:
系统实现过程
具体功能如下:
(1) 项目成功启动后,自动显示四则运算加减乘除。
(2) 用户可以输入序号可以进行相应算法,可以定制题目数量。
(3) 用户可以输入定制的题目数量,还能够自动生成四则运算练习题。
(4) 系统会判断题目是否正确,错误题目至三次,系统将给出正确答案。
(5) 系统会记录成绩并显示出来。
算法设计
代码展示:#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int getchoice();
void menu();
void doExercise(int);
int test(int);
int exnum=0; //题目数量
int main(void)
{
int choice=0;
do
{
menu();
while(1)
{
choice=getchoice();
if(choice<0||choice>4)
printf("输入有误,");
else break;
}
if(choice==0)
{
break;//用户选择0,推出循环(推出系统)
}
doExercise(choice);//测试系统
}while(choice!=0);
printf("欢迎使用本软件,再见!\n");
return 0;
}
int getchoice()
{
printf("请输入你的选择(0--4):");
int choice;
scanf("%d",&choice);
return choice;
}
void menu()
{
printf("****************************************\n");
printf("** 欢迎使用小学生四则运算练习软件 **\n");
printf("* 1.加法练习 *\n");
printf("* 2.减法练习 *\n");
printf("* 3.乘法练习 *\n");
printf("* 4.除法练习 *\n");
printf("* 0.退出 *\n");
printf("****************************************\n");
}
void doExercise(int n)
{
int score=0; //练习得分,初始化为0
int i=0; //练习题数的计数器
printf("你想做多少道题?");
scanf("%d",&exnum);
for(i=0;i<exnum;i++)
{
score=score+test(n);
}
printf("\n正确率:%d/%d\n\n\n",score,exnum);
}
int test(int n)
{
int rightanswer=0; //正确答案
int useranswer=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;
switch(n)
{
case 1:operation='+';break;
case 2:operation='-';break;
case 3:operation='*';break;
case 4:operation='/';break;
}
if((operation=='-')&&(num1<num2))
{
t=num1;
num1=num2;
num2=t;
}
if((operation=='/')&&(num2==0))
{
t=num1;
num1=num2;
num2=t;
}
switch(operation)
{
case '+':rightanswer=num1+num2;break;
case '-':rightanswer=num1-num2;break;
case '*':rightanswer=num1*num2;break;
case '/':rightanswer=num1/num2;break;
}
//判断证误
int errornum=0;
printf("%d%c%d=",num1,operation,num2);
while(1)
{
scanf("%d",&useranswer);
if(useranswer==rightanswer)
{
if(errornum>0)
{
printf("做对了!\n\n");
return 0;
}
else
{
printf("做对了!\n\n");
return 1;
}
}
else
{
errornum++;
if(errornum==3)
{
printf("错误3次,正确答案为:%d\n\n",rightanswer);
return 0;
}
else
{
printf("做错了!请重新输入答案:");
}
}
}
}
1.代码测试覆盖标准
判断条件覆盖
2.测试用例
|
判断符号 |
判断题目数量 |
判断对错 |
出错数 |
正确率 |
|
Choice =1(加法) |
Exnum=4(题数量) |
错误 |
1 |
1/4 |
|
Choice=2(减法) |
Exnum=3 |
正确 |
0 |
1/1 |
|
Choice=3(乘法) |
Exnum=5 |
正确 |
0 |
1/1 |
|
Choice=4 (除法) |
Exnum=3 |
错误 |
2 |
2/3 |
|
Choice=0 |
退出 |
|
|
|
- 单元测试
(1)测试用户输入答案的正确性:

(2)测试加法运算:

(3)测试减法运算:

(4)测试乘法运算:

(5)测试除法运算:

(6)测试出错三次给出正确答案

(7)判断退出系统是否正常:

(7)测试答题正确率

- 代码检查表:

- 工作记录表
|
项目 |
预计 |
实际 |
|
设计时间 |
11月11日 |
11月11日 |
|
编码时间 |
6小时 |
7小时 |
|
测试时间 |
3小时 |
2小时 |
|
代码行数 |
300 |
134 |
|
测试代码行数 |
100 |
76 |
|
错误数量 |
6 |
2 |
|
错误修复时间 |
1小时 |
2小时 |
|
开发总时间 |
12小时 |
11小时 |
总结与体会
3.1实验总结
这次实验完成了结对项目,实现了代码复审。通过此次结对,我收获了许多,我发现不规范的书写代码在自己看来没有什么,但别人看的时候真的是非常难受,非常难以理解,以后的学习工作生涯中我一定要规范的书写代码,总的来说,这次作业让我受益匪浅,希望下次也可以和商静益同学有愉快的合作。
3.2 对同伴的代码写一篇500字以上的评论,介绍同伴的优缺点。
首先,我要谢谢我的小伙伴,她比较有耐心,曾有过项目经验,能想出一些新颖的点子,合作过程中积极向上而且乐观。她还带给我学习过程中相互讨论相互学习的感觉,使我们都能投入到学习当中去,用我们共同的力量去寻求更好的解决问题的方法。通过结对学习,使我们之间受益匪浅。两个人合作还可以发现多方身上的优点,找出自己身上的不足,并能相互监督让彼此变得更好,还可以彼此分享好的学习经验,所以我们认为两个人合作的效率远远大于一个人。在交流与学习的过程中,既掌握了知识,又学到了他人的一些思想与方法,这是我觉得本次实验中学到的最重要的东西!通过这次结对编程的经历我对编程也有了更进一步的了解。每个人对编写代码的想法都是不同,对同一个问题(即使很小的问题)从多个角度思考,能有不同的认识,结对编程对程序的质量有明显的提升。在编写程序中多个人的想法、思路对程序功能有不同的实现方法。通过这次编程,我觉得能够带来1+1>2的效果,之前一个人做的时候,遇到不懂得问题时,就会陷入迷茫。当两个人一起编程时,有不懂的还可以一起讨论,说出自己的意见,也为整个编程过程节约了时间,除此之外,两个人一起合作时就会产生更多更好的想法,可以更好的优化整个项目的设计,遇到问题时可以相互帮助解决问题,效率也比较高!
浙公网安备 33010602011771号