本次作业的题目:
老师又给二柱子增加了几个条件,对程序再做进一步的改进,要求满足如下条件:
1.题目避免重复。
2.可制定。(数量/打印方式)
3.可以控制下列参数:
- 是否有乘除法
- 是否有括号(最多可支持10个数参与计算)
- 数值范围
- 加减有无负数
- 乘除有无余数
设计思想:
这次的内容有点多,而且个别功能有点难度,我没有把握全部实现,只能从最容易完成的功能入手,这次程序在第一次的基础上完成的,主要构建的功能如下
1.利用循环可指定输出的题目数量
2.分类乘除法与加减法
3.在乘除法中,判断条件,余数为0,得到整除的除法式子
4.在加减法中设置条件,使减数不小于被减数,得到的结果不为负数
5.利用循环嵌套结构
PS:因为编程基础实在太差,花了时间自己独立完成,可是还是少了两个功能无法实现,而且代码量也写得很多,自己感觉是用的最笨的方法才有这么多代码,其中避免重复和括号的功能没有完成,请老师酌情给分,谢谢。
//2016 3.9 杨涛 软件工程作业 四则运算2#include#include #include using namespace std;int main(){ srand((unsigned)time(NULL)); int numb1, numb3,j,Numb_Title,Num_Max,Mul_Div,Div,fuShu,Bracket; cout << "请输入你需要的题目数目:" << endl; cin >> Numb_Title; //添加一个变量,满足第二组作业的条件之一 cout << "输入你想得到的数值范围中的最大数(不包括这个数):" << endl; cin >> Num_Max; cout << "是否得到有括号的多部四则运算,有括号输入1,没有的话输入2:(没有完成这个功能,请选择2)" << endl; cin >> Bracket; if (Bracket == 2)//无括号的多功能运算 { cout << "运算包括乘除法吗?包括的话输入1,不包括输入0:" << endl; cin >> Mul_Div; if (Mul_Div == 1) { cout << "整数除法符合整除吗?符合的话输入1,不符合的话输入0:" << endl; cin >> Div; } else Div = 0; cout << "加减的结果允许出现负数吗,允许输入1,不允许输入0:" << endl; cin >> fuShu; switch (fuShu) { case 0://加减不允许出现负数 switch (Div)//1符合整除,0不符合整除 { case 1://除法符合整除 switch (Mul_Div)//包括的功能 是否包括乘除法 { case 1://包括乘除法 情况 1 1 0 for (j = Numb_Title; j > 0; j--)//需要的题目数 { char operator_lib[4] = { '+', '*', '/', '-' }; //定义运算符的可选类型 int rand_oper_idx = rand() % 4; //然后随机生成,上述数组的下标就可以了。 char cur_oper = operator_lib[rand_oper_idx]; //生成整数运算 numb1 = rand() % Num_Max; //a取值为0~Num_Max-1 numb3 = rand() % Num_Max; //c取值为0~Num_Max-1 if (cur_oper == '/')//除法的情况下 { numb3 = rand() % (numb1 - 1) + 1;//确保numb3小于numb1且排除0 while (numb1%numb3 != 0)//确保整除 { numb3 = rand() % (numb1 - 1) + 1; //c取值为0~Num_Max-1; } cout << numb1 << cur_oper << numb3 << " = " << endl; } else if (cur_oper == '-') { numb3 = rand() % numb1;//确保计算结果没有负数 cout << numb1 << cur_oper << numb3 << " = " << endl; } cout << numb1 << cur_oper << numb3 << " = " << endl; } break; } break; case 0://除法不符合整除 switch (Mul_Div)//包括的功能 是否包括乘除法 { case 1://包括乘除法 for (j = Numb_Title; j > 0; j--)//需要的题目数 { char operator_lib[4] = { '+', '*', '/', '-' }; //定义运算符的可选类型 int rand_oper_idx = rand() % 4; //然后随机生成,上述数组的下标就可以了。 char cur_oper = operator_lib[rand_oper_idx]; numb1 = rand() % Num_Max; //a取值为0~Num_Max-1 numb3 = rand() % Num_Max; //c取值为1~Num_Max-1 if (cur_oper == '/')//除法的情况下 { if (numb3 == 0) { numb3 = rand() % (Num_Max - 1) + 1; } cout << numb1 << cur_oper << numb3 << " = " << endl; } else if (cur_oper == '-') { numb3 = rand() % numb1;//确保计算结果没有负数 cout << numb1 << cur_oper << numb3 << " = " << endl; } else { cout << numb1 << cur_oper << numb3 << " = " << endl; } } break; case 0: //不包括乘除法 for (j = Numb_Title; j > 0; j--) { char operator_lib[2] = { '+', '-' }; //定义运算符的可选类型 int rand_oper_idx = rand() % 2; //然后随机生成,上述数组的下标就可以了。 char cur_oper = operator_lib[rand_oper_idx]; numb1 = rand() % Num_Max; //a取值为0~Num_Max-1 numb3 = rand() % Num_Max; //c取值为0~Num_Max-1 if (cur_oper == '-') { numb3 = rand() % numb1;//确保计算结果没有负数 cout << numb1 << cur_oper << numb3 << " = " << endl; } cout << numb1 << cur_oper << numb3 << " = " << endl; } } break; } break; case 1://加减允许出现负数 switch (Div)//1符合整除,0不符合整除 { case 1://除法符合整除 switch (Mul_Div)//包括的功能 是否包括乘除法 { case 1://包括乘除法 情况 1 1 0 for (j = Numb_Title; j > 0; j--)//需要的题目数 { char operator_lib[4] = { '+', '*', '/', '-' }; //定义运算符的可选类型 int rand_oper_idx = rand() % 4; //然后随机生成,上述数组的下标就可以了。 char cur_oper = operator_lib[rand_oper_idx]; //生成整数运算 numb1 = rand() % Num_Max; //a取值为0~Num_Max-1 numb3 = rand() % Num_Max; //c取值为0~Num_Max-1 if (cur_oper == '/')//除法的情况下 { numb3 = rand() % (numb1 - 1) + 1;//确保numb3小于numb1且排除0 while (numb1%numb3 != 0)//确保整除 { numb3 = rand() % (numb1 - 1) + 1; //c取值为0~Num_Max-1; } cout << numb1 << cur_oper << numb3 << " = " << endl; } else cout << numb1 << cur_oper << numb3 << " = " << endl; } break; } break; case 0://除法不符合整除 switch (Mul_Div)//包括的功能 是否包括乘除法 { case 1://包括乘除法 for (j = Numb_Title; j > 0; j--)//需要的题目数 { char operator_lib[4] = { '+', '*', '/', '-' }; //定义运算符的可选类型 int rand_oper_idx = rand() % 4; //然后随机生成,上述数组的下标就可以了。 char cur_oper = operator_lib[rand_oper_idx]; numb1 = rand() % Num_Max; //a取值为0~Num_Max-1 numb3 = rand() % Num_Max; //c取值为1~Num_Max-1 if (cur_oper == '/')//除法的情况下 { if (numb3 == 0) { numb3 = rand() % (Num_Max - 1) + 1; } cout << numb1 << cur_oper << numb3 << " = " << endl; } else { cout << numb1 << cur_oper << numb3 << " = " << endl; } } break; case 0: //不包括乘除法 for (j = Numb_Title; j > 0; j--) { char operator_lib[2] = { '+', '-' }; //定义运算符的可选类型 int rand_oper_idx = rand() % 2; //然后随机生成,上述数组的下标就可以了。 char cur_oper = operator_lib[rand_oper_idx]; numb1 = rand() % Num_Max; //a取值为0~Num_Max-1 numb3 = rand() % Num_Max; //c取值为0~Num_Max-1 cout << numb1 << cur_oper << numb3 << " = " << endl; } } break; } break; } } else//有括号的多部四则运算实现 {//没有实现 } return 0;}
得到的不同的结果的截图
总结:这次花的时间真的挺长的,第一次对编程有这种较深刻的了解,感觉花的时间很值,能完成一部分功能我也很开心,毕竟都是独自写的,我会更加努力,学习更多相关知识,提高水平,希望在以后靠自己的水平完成所有的功能。
项目计划总结:
日期&&任务 | 听课 | 编写程序 | 阅读相关书籍 | 网上查找资料 | 日总计 |
周一 | 100 | 20 | 10 | 20 | 150 |
周二 | 30 | 30 | |||
周三 | 60 | 10 | 10 | 80 | |
周四 | 100 | 20 | 120 | ||
周五 | 100 | 30 | 130 | ||
周六 | 30 | 30 | |||
周日 | 30 | 30 | |||
周总计 | 200 | 230 | 80 | 60 | 570 |
时间记录日志
日期 | 开始时间 | 结束时间 | 中断时间 | 净时间 | 活动 | 备注 |
3/7 | 14:00 | 15:50 | 10 | 100 | 听课 | 软件工程上课 |
16:14 | 16:40 | 6 | 20 | 编写程序 | 编写老师布置的作业 | |
17:10 | 17:20 | 10 | 阅读书籍 | 《构建之法》《梦断代码》 | ||
21:00 | 21:25 | 5 | 20 | 网上查找资料 | ||
3/8 | 21:00 | 21:30 | 30 | 编写程序 | 作业2 | |
3/9 | 21:44 | 22:44 | 60 | 编写程序 | 作业2 | |
22:00 | 22:20 | 10 | 阅读书籍 | 《构建之法》 | ||
22:40 | 22:50 | 10 | 查找资料 | |||
3/10 | 16:35 | 16:55 | 20 | 阅读 | 《梦断代码》 | |
14:00 | 15:50 | 100 | 上课 | 软件工程上课 | ||
3/11 | 15:35 | 17:15 | 120 | 编程 | 作业2 | |
17:30 | 17:45 | 15 | 查找资料 | |||
3/12 | 9:00 | 9:30 | 30 | 阅读书籍 | 计划阅读《构建之法》 | |
3/13 | 19:00 | 19:30 | 30 | 阅读书籍 | 计划阅读《梦断代码》 |
缺陷记录日志
日期 | 编号 | 类型 | 引入阶段 | 排除阶段 | 修复时间 | 备注 |
3/9 | 1 | 20 | 编码 | 编译 | 1MIN | switch后case':'放错了位置 |
3/11 | 2 | 20 | 编码 | 编译 | 1MIN | 漏掉了; |