一、要求:
1、题目避免重复;
2、可定制(数量、打印方式);
3、可以控制下列参数:
(1)是否有乘除法;
(2)是否有括号;
(3)数值范围;
(4)加减有无负数;
(5)除法有无余数。
二、设计思想:
1、题目避免重复,可用函数srand(time(NULL))解决。
2、定制出题数目,可以设置变量来控制数目。
3、数值范围,可以在产生随机数中确定两个运算数的范围。
4、选择是否有乘除法、是否有括号、是否有负数、是否有余数,都可以通过switch语句来实现。
三、源程序代码:
#include <iostream> #include "stdlib.h" #include <time.h> using namespace std; int main() { srand(time(NULL)); //题目避免重复 int x1, x2, flag, i, j; int a[10]; cout << "********小学生四则运算出题系统********\n\n" ; cout << "请输入出题数目:"; cin >> a[0]; cout << "请输入运算数的范围:"; cin >> a[1]; cout << "请选择是否有乘除法(0.无乘除法;1.有乘除法):"; cin >> a[2]; cout << "请选择是否有括号(0.无括号;1.有括号):"; cin >> a[3]; cout << "请选择结果有无负数(0.无负数;1.有负数):"; cin >> a[4]; cout << "请选择结果有无余数(0.无余数;1.有余数):"; cin >> a[5]; for (i = 0; i<a[0]; i++) { switch (a[2]) { case 1:j = rand() % 4; break; //有乘除法 case 0:j = rand() % 2; break; //无乘除法 } x1 = rand() % a[1] + 1; x2 = rand() % a[1] + 1; if (j == 0) //加法运算部分 { switch (a[3]) { case 0://无括号 cout << x1 << "+" << x2 << "=" << endl; break; case 1://有括号 cout << "(" << x1 << "+" << x2 << ")=" << endl; break; } } if (j == 1) //减法运算部分 { switch (a[4]) { case 1: //结果可有负数 break; case 0: //结果无负数 if (x1<x2) //如果被减数比减数小则交换 { flag = x1; x1 = x2; x2 = flag; } break; } switch (a[3]) { case 0: cout << x1 << "-" << x2 << "=" << endl; break; case 1: cout << "(" << x1 << "-" << x2 << ")=" << endl; break; } } if (j == 2) //乘法运算部分 switch (a[3]) { case 0: cout << x1 << "*" << x2 << "=" << endl; break; case 1: cout << "(" << x1 << "*" << x2 << ")=" << endl; break; } if (j == 3) //除法运算部分 { switch (a[5]) { case 1: //结果可有余数 break; case 0: //结果无余数 while (x1%x2 != 0) //如果不能整除,则重新生成 { x1 = rand() % a[1] + 1; x2 = rand() % a[1] + 1; }; break; } switch (a[3]) { case 0: cout << x1 << "/" << x2 << "=" << endl; break; case 1: cout << "(" << x1 << "/" << x2 << ")=" << endl; break; } } } return 0; }
四、运行结果截图:
五、项目计划日志:
周活动总结表
姓名:张莹荧 日期:2016-03-12
日期/任务 | 听课 | 编写程序 | 阅读课本 | 准备考试 | 日总计 | ||
周日3.6 | 60 | 120 | 120 | 300 | |||
周一 | 300 | 30 | 30 | 120 | 480 | ||
周二 | 300 | 30 | 30 | 120 | 453 | ||
周三 | 200 | 180 | 180 | 560 | |||
周四 | 300 | 120 | 420 | ||||
周五 | 100 | 180 | 30 | 310 | |||
周六 | |||||||
周总结 | 1200 | 480 | 210 | 660 | 2550 |
阶段时间和效率 周数:1
不包括上一周在内的累计时间
总计 | |||||||
平均 | |||||||
最大 | |||||||
最小 |
以前各周的累计时间
总计 | 1200 | 480 | 210 | 660 | 2550 | ||
平均 | 1200 | 480 | 210 | 660 | 2550 | ||
最大 | 1200 | 480 | 210 | 660 | 2550 | ||
最小 | 1200 | 480 | 210 | 660 | 2550 |
六、时间记录日志:
学生:张莹荧 日期:2016-03-12
教师:王建民 课程: PSP
日期 | 开始时间 | 结束时间 | 中断时间 | 净时间 | 活动 | 备注 |
3.8 |
14:30 15:00 |
15:00 15:30 |
0 0 |
30 30 |
编程 阅读课本 |
|
3.9 | 14:30 | 17:40 | 10 | 180 | 编程 | 中间上网、休息 |
3.10 |
8:00 14:00 |
12:00 15:50 |
40 10 |
200 100 |
上课 | 课间休息 |
3.11 |
14:30 19:00 |
17:40 19:30 |
10 0 |
180 30 |
编程 阅读课本 |
中间休息
|
七、缺陷记录日志:
学生: 张莹荧
日期: 2016-03-12
教员: 王建民
程序号: 1
日期 | 编号 | 类型 | 引入阶段 | 排除阶段 | 修复时间 | 修复缺陷 |
3.8 | 1 | 范围 | 设计 | 编译 | 10min | |
描述:随机数范围输入时,出现错误。 | ||||||
3.9 | 2 | 循环 | 编码 | 编译 | 5min | |
描述:在打印题目时,循环打印出现问题。 | ||||||
3.10 | 3 | 余数 | 编码 | 编译 | 5min | |
描述:在选择有无余数时,不能出现有余数的式子。 | ||||||
3.11 | 4 | 整合 | 编码 | 编译 | 5min | |
描述:使用switch语句来进行各项的选择时没整和好。 |