题目:
1.题目避免重复 。2.可定制 3.可控制下列参数(是否有乘除法;是否有括号;数值范围;加减有无负数;除法有无余数)
思路:
程序设计的总体思路:先定义输出的运算公式,分成真分数和整数外加空行输出和空格输出。然后在主函数中,定义4个随机数,分别整除2求余,通过余数来判断是否有乘除法,是否有括号,加减有无负数,除法有无余数。再定义进行运算的随机数。在乘除法中,若要求无余数,但两个随机数不能进行整除,则计算出这两个随机数的最大公约数,将最大公约数赋值给除数。这样就可以实现整除。
代码:
//吕广浩 2013/3/12 #include<iostream> #include<time.h> using namespace std; int a, b,a1,b1,f, i; void ys1()//定义运算函数 方便输出 { if (f == 0) cout << a << '+' << b<< "=" << endl; if (f == 1) cout << a << '-' << b << "=" << endl; if (f== 2) cout << a << '*' << b << "=" << endl; if (f == 3) cout << a << '/' << b << "=" << endl; } void ys2() { if (f == 0) cout << a1 << "+" << b << "=" << " "; if (f == 1) cout << a << "-" << b << "=" << " "; if (f == 2) cout << a << "*" << b << "=" << " "; if (f == 3) cout << a << "/" << b << "=" << " "; } void zys1() { if (f == 0) cout << a1 << '/' << a << ' ' << '+' << ' ' << b1 << '/' << b << " = " << endl; if (f == 1) cout << a1 << '/' << a << ' ' << '-' << ' ' << b1 << '/' << b << " = " << endl; if (f == 2) cout << a1 << '/' << a << ' ' << '*' << ' ' << b1 << '/' << b << " = " << endl; if (f == 3) cout << a1 << '/' << a << ' ' << '/' << ' ' << b1 << '/' << b << " = " << endl; } void zys2() { if (f == 0) cout << a1 << '/' << a << ' ' << '+' << ' ' << b1 << '/' << b << " = " << " "; if (f == 1) cout << a1 << '/' << a << ' ' << '-' << ' ' << b1 << '/' << b << " = " << " "; if (f == 2) cout << a1 << '/' << a << ' ' << '*' << ' ' << b1 << '/' << b << " = " << " "; if (f == 3) cout << a1 << '/' << a << ' ' << '/' << ' ' << b1 << '/' << b << " = " << " "; } int main() { srand(time(NULL));//题目避免重复 int e, num, min,max, out, d, fushu, kh, k,yushu;//有无真分数判断,题目数量,最小值,最大值,数值的范围,输出方式,是否有乘除运算,加减法是否有负数,有无括号 cout << "********二柱子四则运算定制版********" << endl; cout << "请输入题目的数量num:" << endl; cin >> num; cout << "请选择数值范围最大值(大于0)" << endl; cin >> max; cout << "请选择打印方式out(0空行打印 ,1空格打印)" << endl; cin >> out; cout << "请选择有无乘除运算d(0没有乘除运算, 1有乘除运算)" << endl; cin >> d; cout << "请选择加减运算有无负数fushu(0没有负数 ,1有负数)" << endl; cin >> fushu; cout << "请选择有无括号(0没有括号 ,1有括号)" << endl; cin >> kh; cout <<"除法是否有余数(0没有余数,1有余数)" << endl; cin >> yushu; for (i = 1; i <= num; i++) { int e1; a = rand() % max+1;//控制两个数的范围 b = rand() % max+1; a1 = rand() % max +2-1;//控制两个数的范围 b1 = rand() % max +2-1; f = rand() % 4;//控制运算 e = a % 2; e1 = b % 2; k = a1 % 10;//括号的对数 if (kh == 1) { for (int j = 0; j < k; j++) { int a2, b2; a2 = rand() % max;//控制两个数的范围 b2 = rand() % max; e = b2 % 4; if (e == 1) { cout << '(' << a2 << '+' << b2 << ')' << '/'; } if (e == 2) { cout << '(' << a2 << '-' << b2 << ')' << '*'; } if (e == 3) { cout << '(' << a2 << '*' << b2 << ')' << '-'; } if (e == 4) { cout << '(' << a2 << '+' << b2 << ')' << '+'; } } if (out == 0) { cout << 1 << '=' << endl; } else cout << 1 << '='<<" "; kh = kh - 1; } else { if (out == 0)//空行打印 { if (d == 0 && fushu == 0)//只有加减运算,无负数 { if (f >= 2) { f = f - 2; if (e == 1) { zys1(); } else ys1(); } else { if (e == 1) { zys1(); } else ys1(); } } if (d == 0 && fushu == 1)//无乘除,有负数 { if (f >= 2) { f = f - 2; if (e == 1) { if (e1 == 1) { a1 = -a1; } zys1(); } else { if (e1 == 1) { a = -a; } ys1(); } } else { if (e == 1) { if (e1 == 1) { a1 = -a1; } zys1(); } else { if (e1 == 1) { a = -a; } ys1(); } } } if (d == 1 && fushu == 1)//有乘除运算,有负数 { if (e == 1) { if (e1 == 1) { a1 = -a1; } zys1(); } else { if (e1 == 1) { a = -a; } if (yushu==0&&f==3) { if (a%b == 0) { ys1(); } else //若不能整除 求最大公约数 给b赋值为最大公约数 { if (a > b) min = b; else min = a; while (true) { if (a%min == 0 && b%min == 0) { b = min; break; } min--; } ys1(); } } else ys1(); } } if (d == 1 && fushu == 0)//有乘除运算,无负数 { if (e == 1) { zys1(); } else if (yushu == 0 && f == 3) { if (a%b == 0)//判断余数 { ys1(); } else { if (a > b) min = b; else min = a; while (true) { if (a%min == 0 && b%min == 0) { b = min; break; } min--; } ys1(); } } else ys1(); } } else if (out == 1) { if (d == 0 && fushu == 0) { if (f >= 2) { f = f - 2; if (e == 1) { zys2(); } else ys2(); } else { if (e == 1) { zys2(); } else ys2(); } } if (d == 1 && fushu == 1)//有负数 有乘除 { if (e == 1) { if (e1 == 1) { a1 = -a1; } zys2(); } else { if (e1 == 1) { a = -a; } if (yushu == 0 && f == 3) { if (a%b == 0)//判断余数 { ys2(); } else { if (a > b) min = b; else min = a; while (true) { if (a%min == 0 && b%min == 0) { b = min; break; } min--; } ys2(); } } else ys2(); } } if (d == 0 && fushu == 1) { if (f >= 2) { f = f - 2; if (e == 1) { if (e1 == 1) { a1 = -a1; } zys2(); } else { if (e1 == 1) { a = -a; } ys2(); } } else { if (e == 1) { zys2(); } else ys2(); } } if (d == 1 && fushu == 0)//有除法 { if (e == 1) { zys2(); } else if (yushu == 0 && f == 3) { if (a%b == 0)//判断余数 { ys2(); } else { if (a > b) min = b; else min = a; while (true) { if (a%min == 0 && b%min == 0) { b = min; break; } min--; } ys2(); } } else ys2(); } } } }
return 0; }
测试用例以及结果:
初步进行程序运行的判断,审查
审查乘除法运算变化时,程序运行情况。
审查题目数量,取值范围,打印方式,有无负数,括号同时改变时运行是否成功。
审查题目数量,数值范围,有无负数,余数同时改变时运行是否成功
审查题目数量,取值范围,有无负数变化时运行是否成功。
审查题目数量,取值范围变化时程序是否运行成功。
开发流程:
日期和任务 | 听课 | 看书 | 网上查资料 | 编程 | 日总计 |
周一 | 2 | 0 | 1 | 3 | |
周二 | 0 | ||||
周三 | 2 | 1 | 3 | ||
周四 | 2 | 2 | 4 | ||
周五 | 1 | 1 | 1 | 3 | |
周六 | 3 | 3 | 6 | ||
周日 | |||||
总计 | 4 | 3 | 6 | 6 | 19 |
日期 | 开始时间 | 结束时间 | 中断时间 | 净时间 | 活动 | 备注 |
3/7 | 14:00 | 16:00 | 10 | 110 | 听课 | 软件工程课 |
16:30 | 17:30 | 0 | 60 | 编程 | 老师留的课下作业 | |
3/9 | 15:00 | 17:00 | 10 | 110 | 网上查资料,看书 | 阅读《构建之法》 |
21:00 | 20:00 | 0 | 60 | 查资料 | 作业2 | |
3/10 | 14:00 | 15:50 | 10 | 100 | 听课 | 软件工程上课 |
19:00 | 21:00 | 20 | 100 | 编程 | 研究作业 | |
3/11 | 8:30 | 9:30 | 0 | 60 | 看书 | 《构建之法》 |
16:30 | 17:30 | 0 | 60 | 研究程序 | 整理一些思路 | |
19:30 | 20:30 | 0 | 60 | 上网查资料 | 研究程序 | |
3/12 | 7:30 | 11:30 | 30 | 210 | 整理程序 | 综合程序 |
13:00 | 15:00 | 10 | 110 | 整理博客 | 读书感想 | |
16:00 | 17:00 | 30 | 90 | 发表博客 |
完成任务 |
缺陷记录日志:程序编写不足,还需要努力改进。
所编程序的不足,没有实现好的:
有括号时,只能输出一组具备括号的式子,缺乏对具备括号的式子的数量的判断和控制,并且输出的有括号式子模式比较发死,不灵活,仍需改进。