个人项目之 “二柱子四则运算”升级版
2016-03-12 13:34
375 查看
个人项目之 “二柱子四则运算”升级版
果然……还有后续故事……可怜的二柱子,老师对他的自动出题系统提出了新的要求:(当然,要求是在实现上次的题目基础上的~~)
1、题目可以避免重复;
2、可以定制(打印方式/题目数量)
3、可以控制下列参数:是否有乘除法、是否有括号(最多可以支持10个数参与运算)、数值范围、加减有无负数、除法有无余数等等。。。
一、项目思路
我们要养成在写代码之前仔细分析项目,锻炼严谨的思路可以减少我们出错。为写这个程序我的思路如下:
1、首先为了避免重复,最基本的思路是先把题目存储下来,然后再逐个比较。
我们可以利用数据结构中的链表和指针进行比较和存储,但是我数据结构学的实在是太差,真心一点都回忆不出来(╥╯^╰╥)
本来以为我完不成这个要求了,后来向我同样也是学计算机的高中同学请教了一下,她给了我一种思路。建立一个二维数组来存放操作数和操作符,数组有n行(生成的算式数量)、3列(分别存放第一个操作数、第二个操作数和操作符所代表的数字),然后每次利用随机数生成函数产生随机数和随机的算符的时候,逐行去数组里比较,如果有完全符合的就重新产生随机数,否则就讲数据存放起来供下次比较。
(P.S我的程序基本上是用这种方法查重的,但是后来经过和室友的讨论,我发现这种方法貌似进行二元运算比较方便,但是如果进行含有括号的多元运算就比较吃力。我在想可不可以尝试用string声明一维数组进行存储,每一行代表一个算式。因为时间真的很有限,我没能尝试这种方法,有时间我一定一定试试看。)
2、用户选择打印方式:可以事先让用户选择要不要保存到文件里。要实现这个需要C++的文件输入输出流,因为不常用有点忘,于是我又翻阅了一下大一下的C++程序,可以基本实现这个功能,但是还需要改动和修改。
3、数值范围:本来是打算使用:由rand()%(b-a+1)+a实现范围为a~b的随机数 这种方法,但是在测试时出现了不能产生负数的问题,所以不得不稍加修改,改动的内容参见下一篇博客,在单元测试中我会详细说明改动的代码和原因,这里不再赘余。:)
4、除法是否含有余数:对于这个要求我们特意查了百度对于“余数”的定义,所谓余数,是指整数之间计算时的数据,因此不用考虑真分数的除法是否有余数的问题,无形中给我们减轻了不少的负担。
5、加减法有无负数:对于这个问题,每个人的看法不同。我所理解的是:如果不含负数,则每一个操作数和操作结果中都不含负数。因此我们要考虑每一个操作数的正负问题(因为生成的随机数可以随机产生负数),还要考虑减法的被减数是否大于减数的问题。当然,对于真分数要考虑分子小于分母,分母不能为0等问题。
6、此外,考虑到这个程序的代码量实在是太大了,因此不得不考虑用函数来封装一些功能的模块。
7、最后,还要注意各种用户输入数据时的异常处理问题。(当然,明天的单元测试更是重点要考虑)
二、实验的源代码如下
炒鸡长……(@﹏@)~,主要是逻辑思维真的不行。要不是老师说的事先列好思路,估计我就被自己绕进去了╮(╯_╰)╭
如果有时间我应该再好好修改自己的程序,虽然基本能够实现功能,但是像老师说的代码的可利用性和编程效率太低了,唉……
老师们,勿喷……我在努力的生长……( ̄ ‘i  ̄;)
下面进行分函数的介绍和展示(把下面的模块连接起来就是整个项目的源代码~)
函数的声明:
//Zhao Ziyin,2016/3/11,Four arithmetics(2) #include<iostream> #include<time.h> #include<string> #include<fstream> using namespace std; //#define N #define random(x) (rand()%x) int MM[10000][3];//临时记录算式的二维数组
查重的函数体,如下:
/*查重的函数*/ int WheReap(int op1,int op2,int s_n,int c) { //int MM[10000][3];//临时记录算式的二维数组 int i; bool flag=true; for (i = 0; i < c; i++) { if (MM[i][0] == op1 && MM[i][1] == s_n && MM[i][2] == op2) { flag = false;//出现了重复算式 break; } } if (flag)//如果没有出现重复,随机数可以赋值 { MM[c][0] = op1; MM[c][1] = s_n; MM[c][2] = op2; } return flag; }
若用户只选择加减法运算的函数体,如下:
其中包括“是否含有真分数” “运算是否含有负数”等等……
/*加减法运算*/ void AddSub(int n, int r1,int r2) { /*srand((int)time(0));*/ int r=r2-r1, one, two,three,four, sign_num,type, count = 0;//count记录产生的第几个算式 char sign; int choose1,choose2; bool flag_one = false, flag_two = false,flag_three=false,flag_four=false; loop1:cout << "是否进行带真分数的练习?请选择:1、有 2、无" << endl; cin >> choose1; if (choose1 != 1 && choose1 != 2) { cout << "没有您选择的功能,请重新选择:" << endl; goto loop1; } else if (choose1 == 1)//含有真分数的题目 { loop2: cout << "加减法运算中有无负数?请选择:1、有 2、无" << endl; cin >> choose2; if (choose2 != 1 && choose2 != 2) { cout << "没有您选择的功能,请重新选择:" << endl; goto loop2; } cout << "系统将为您出" << n << "道加减法的运算题目:" << endl; if (choose2 == 1)//可以含有负数 { srand((int)time(0)); while (count < n) { one = r1 + rand() % r; two = r1 + rand() % r; three = r1 + rand() % r; four = r1 + rand() % r; if (one < 0)//记录第一个操作数为负数(true) flag_one = true; if (two < 0)//记录第二个操作数为负数(true) flag_two = true; if (three < 0)//记录第三个操作数为负数(true) flag_three = true; if (four < 0)//记录第四个操作数为负数(true) flag_four = true; //随机生成运算符 sign_num = rand() % 2; switch (sign_num) { case(0) : sign = '+'; break; case(1) : sign = '-'; break; } //随机生成运算数的类型 type = rand() % 4; switch (type) { case(0) ://两个整数 { if (!WheReap(one, two, sign_num, count))//如果有重复 count--; else//如果没有重复 { if (flag_one && !flag_two)//如果op1为负,op2为正 cout << count << "、 (" << one << ") " << sign << " " << two << endl; if (!flag_one && flag_two)//如果op1为正,op2为负 cout << count << "、 " << one << " " << sign << " (" << two << ")" << endl; if (flag_one && flag_two)//如果op1、op2都为负 cout << count << "、 (" << one << ") " << sign << " (" << two << ")" << endl; } break; } case(1) ://op1为真分数 { if (one > two)//第一个真分数的分子要小于分母 { int tmp; tmp = one; one = two; two = tmp; } bool flag_OT = false; if ((one<0 && two>0) || (one > 0 && two < 0))//记录第一个真分数为负数(true) flag_OT = true; if (two!=0)//分母不为0 { if (flag_OT && !flag_three)//如果op1为负,op2为正 cout << count << "、 (" << one << "/" << two << ") " << sign << " " << three << endl; if (!flag_OT && flag_three)//如果op1为正,op2为负 cout << count << "、 " << one << "/" << two << " " << sign << " (" << three << ")" << endl; if (flag_OT && flag_three)//如果op1、op2都为负 cout << count << "、 (" << one << "/" << two << ") " << sign << " (" << three << ")" << endl; } break; } case(2) ://op2为真分数 { if (three > four)//第二真分数的分子要小于分母 { int tmp; tmp = three; three = four; four = tmp; } bool flag_TF = false; if ((three<0 && four>0) || (three > 0 && four < 0))//记录第二个真分数为负数(true) flag_TF = true; if (four!=0)//分母不为0 { if (flag_one && !flag_TF)//如果op1为负,op2为正 cout << count << "、 (" << one << ") " << sign << " " << three << "/" << four << endl; if (!flag_one && flag_TF)//如果op1为正,op2为负 cout << count << "、 " << one << " " << sign << " (" << three << "/" << four << ")" << endl; if (flag_one && flag_TF)//如果op1、op2都为负 cout << count << "、 (" << one << ") " << sign << " (" << three << "/" << four << ")" << endl; } break; } case(3) ://两个数都为真分数 { if (one > two)//第一个真分数的分子要小于分母 { int tmp; tmp = one; one = two; two = tmp; } if (three > four)//第二真分数的分子要小于分母 { int tmp; tmp = three; three = four; four = tmp; } bool flag_OT = false; if ((one<0 && two>0) || (one > 0 && two < 0))//记录第一个真分数为负数(true) flag_OT = true; bool flag_TF = false; if ((three<0 && four>0) || (three > 0 && four < 0))//记录第二个真分数为负数(true) flag_TF = true; if (two!=0 &&four!=0)//分母不为0 { if (flag_OT && !flag_TF)//如果op1为负,op2为正 cout << count << "、 (" << one << "/" << two << ") " << sign << " " << three << "/" << four << endl; if (!flag_OT && flag_TF)//如果op1为正,op2为负 cout << count << "、 " << one << "/" << two << " " << sign << " (" << three << "/" << four << ")" << endl; if (flag_OT && flag_TF)//如果op1、op2都为负 cout << count << "、 (" << one << "/" << two << ") " << sign << " (" << three << "/" << four << ")" << endl; } break; } } count++; } } if (choose2 == 2)//不可以含有负数 { srand((int)time(0)); while (count < n) { one = r1 + rand() % r; two = r1 + rand() % r; three = r1 + rand() % r; four = r1 + rand() % r; //负数变为相反数 if (one < 0) one = -one; if (two < 0) two = -two; if (three < 0) three = -three; if (four < 0) four = -four; //随机生成运算符 sign_num = rand() % 2; switch (sign_num) { case(0) : sign = '+'; break; case(1) : sign = '-'; break; } //随机生成运算数的类型 type = rand() % 4; switch (type) { case(0) ://两个整数 { if (sign == '-') { if (one < two)//被减数大于减数 { int tmp; tmp = one; one = two; two = tmp; } } if (!WheReap(one, two, sign_num, count))//如果有重复 count--; else//如果没有重复 cout << count << "、 " << one << " " << sign << " " << two << endl; break; } case(1) ://op1为真分数 { if (sign != '-') { if (one > two)//第一个真分数的分子要小于分母 { int tmp; tmp = one; one = two; two = tmp; } if (two != 0)//分母不为0 cout << count << "、 " << one << "/" << two << " " << sign << " " << three << endl; } break; } case(2) ://op2为真分数 { if (three > four)//第二真分数的分子要小于分母 { int tmp; tmp = three; three = four; four = tmp; } if (four != 0) //分母不为0 cout << count << "、 " << one << " " << sign << " " << three << "/" << four << endl; break; } case(3) ://两个数都为真分数 { if (one > two)//第一个真分数的分子要小于分母 { int tmp; tmp = one; one = two; two = tmp; } if (three > four)//第二个真分数的分子要小于分母 { int tmp; tmp = three; three = four; four = tmp; } float OT, TF; OT = one / two; TF = three / four; if (two != 0 && four != 0)//分母不为0 { if (sign == '-')//减法被减数大于减数 { if (OT<TF) cout << count << "、 " << three << "/" << four << " " << sign << " " << one << "/" << two << endl; else if (OT>TF) cout << count << "、 " << one << "/" << two << " " << sign << " " << three << "/" << four << endl; } cout << count << "、 " << one << "/" << two << " " << sign << " " << three << "/" << four << endl; } break; } } count++; } } } else if (choose1 == 2)//不含有真分数的题目 { int choose3; loop3: cout << "加减法运算中有无负数?请选择:1、有 2、无" << endl; cin >> choose3; if (choose3 != 1 && choose3 != 2) { cout << "没有您选择的功能,请重新选择:" << endl; goto loop3; } cout << "系统将为您出" << n << "道加减法的运算题目:" << endl; if (choose3 == 1)//包含负数 { srand((int)time(0)); while (count < n) { one = r1 + rand() % r; two = r1 + rand() % r; if (one < 0)//记录第一个操作数为负数(true) flag_one = true; if (two < 0)//记录第二个操作数为负数(true) flag_two = true; //随机生成运算符 sign_num = rand() % 2; switch (sign_num) { case(0) : { sign = '+'; if (!WheReap(one, two, sign_num, count))//如果有重复 count--; else//如果没有重复 { if (flag_one && !flag_two)//如果op1为负,op2为正 cout << count << "、 (" << one << ") " << sign << " " << two << endl; if (!flag_one && flag_two)//如果op1为正,op2为负 cout << count << "、 " << one << " " << sign << " (" << two << ")" << endl; if (flag_one && flag_two)//如果op1、op2都为负 cout << count << "、 (" << one << ") " << sign << " (" << two << ")" << endl; } break; } case(1) : { sign = '-'; if (!WheReap(one, two, sign_num, count))//如果有重复 count--; else//如果没有重复 { if (flag_one && !flag_two)//如果op1为负,op2为正 cout << count << "、 (" << one << ") " << sign << " " << two << endl; if (!flag_one && flag_two)//如果op1为正,op2为负 cout << count << "、 " << one << " " << sign << " (" << two << ")" << endl; if (flag_one && flag_two)//如果op1、op2都为负 cout << count << "、 (" << one << ") " << sign << " (" << two << ")" << endl; } break; } } count++; } } else if (choose3 == 2)//不包含负数 { srand((int)time(0)); while (count < n) { one = r1 + rand() % r; two = r1 + rand() % r; //负数变为相反数 if (one < 0) one = -one; if (two < 0) two = -two; //随机生成运算符 sign_num = rand() % 2; switch (sign_num) { case(0) : { sign = '+'; if (!WheReap(one, two, sign_num, count))//如果有重复 count--; else//如果没有重复 cout << count << "、 " << one << " " << sign << " " << two << endl; break; } case(1) : { sign = '-'; if (one < two)//被减数大于减数 { int tmp; tmp = one; one = two; two = tmp; } if (!WheReap(one, two, sign_num, count))//如果有重复 count--; else//如果没有重复 cout << count << "、 " << one << " " << sign << " " << two << endl; break; } } count++; } } } }
含有加减乘除四则运算的函数体部分,如下:
/*加减乘除运算*/ void FourOper(int n, int r1, int r2) { int r = r2 - r1, one, two, three, four, sign_num, type, count = 0;//count记录产生的第几个算式 char sign; int choose1, choose2; bool flag_one = false, flag_two = false, flag_three = false, flag_four = false; loop1:cout << "是否进行带真分数的练习?请选择:1、有 2、无" << endl; cin >> choose1; if (choose1 != 1 && choose1 != 2) { cout << "没有您选择的功能,请重新选择:" << endl; goto loop1; } else if (choose1 == 1)//含有真分数的题目 { loop2: cout << "除法运算中有无余数?请选择:1、有 2、无" << endl; cin >> choose2; if (choose2 != 1 && choose2 != 2) { cout << "没有您选择的功能,请重新选择:" << endl; goto loop2; } cout << "系统将为您出" << n << "道按您定制的四则运算题目:" << endl; srand((int)time(0)); while (count < n) { one = r1 + rand() % r; two = r1 + rand() % r; three = r1 + rand() % r; four = r1 + rand() % r; //随机生成运算符 sign_num = rand() % 4; switch (sign_num)//利用随机数随机产生运算符 { case(0) ://加法运算 { sign = '+'; loop4: type = rand() % 4; switch(type) { case(0) ://两个整数 { if (!WheReap(one, two, sign_num, count))//如果有重复 count--; else//如果没有重复 { if (one < 0)//记录第一个操作数为负数(true) flag_one = true; if (two < 0)//记录第二个操作数为负数(true) flag_two = true; if (!flag_one && !flag_two)//如果op1、op2都为正 cout << count << "、 " << one << " " << sign << " " << two << endl; if (flag_one && !flag_two)//如果op1为负,op2为正 cout << count << "、 (" << one << ") " << sign << " " << two << endl; if (!flag_one && flag_two)//如果op1为正,op2为负 cout << count << "、 " << one << " " << sign << " (" << two << ")" << endl; if (flag_one && flag_two)//如果op1、op2都为负 cout << count << "、 (" << one << ") " << sign << " (" << two << ")" << endl; } break; } case(1) ://op1为真分数 { if (one > two)//第一个真分数的分子要小于分母 { int tmp; tmp = one; one = two; two = tmp; } if (one < 0)//记录第一个操作数为负数(true) flag_one = true; if (two < 0)//记录第二个操作数为负数(true) flag_two = true; if (three < 0)//记录第三个操作数为负数(true) flag_three = true; if (four < 0)//记录第四个操作数为负数(true) flag_four = true; bool flag_OT = false; if ((one<0 && two>0) || (one > 0 && two < 0))//记录第一个真分数为负数(true) flag_OT = true; if (two != 0)//分母不为0 { if (!flag_OT && !flag_three)//如果op1、op2都为正 cout << count << "、 " << one<<"/"<<two << " " << sign << " " << three << endl; if (flag_OT && !flag_three)//如果op1为负,op2为正 cout << count << "、 (" << one << "/" << two << ") " << sign << " " << three << endl; if (!flag_OT && flag_three)//如果op1为正,op2为负 cout << count << "、 " << one << "/" << two << " " << sign << " (" << three << ")" << endl; if (flag_OT && flag_three)//如果op1、op2都为负 cout << count << "、 (" << one << "/" << two << ") " << sign << " (" << three << ")" << endl; } break; } case(2) ://op2为真分数 { if (three > four)//第二真分数的分子要小于分母 { int tmp; tmp = three; three = four; four = tmp; } if (one < 0)//记录第一个操作数为负数(true) flag_one = true; if (two < 0)//记录第二个操作数为负数(true) flag_two = true; if (three < 0)//记录第三个操作数为负数(true) flag_three = true; if (four < 0)//记录第四个操作数为负数(true) flag_four = true; bool flag_TF = false; if ((three<0 && four>0) || (three > 0 && four < 0))//记录第二个真分数为负数(true) flag_TF = true; if (four != 0)//分母不为0 { if (!flag_one && !flag_TF)//如果op1、op2都为正 cout << count << "、 " << one << " " << sign << " " << three<<"/"<<four << endl; if (flag_one && !flag_TF)//如果op1为负,op2为正 cout << count << "、 (" << one << ") " << sign << " " << three << "/" << four << endl; if (!flag_one && flag_TF)//如果op1为正,op2为负 cout << count << "、 " << one << " " << sign << " (" << three << "/" << four << ")" << endl; if (flag_one && flag_TF)//如果op1、op2都为负 cout << count << "、 (" << one << ") " << sign << " (" << three << "/" << four << ")" << endl; } break; } case(3) ://两个数都为真分数 { if (one > two)//第一个真分数的分子要小于分母 { int tmp; tmp = one; one = two; two = tmp; } if (three > four)//第二真分数的分子要小于分母 { int tmp; tmp = three; three = four; four = tmp; } if (one < 0)//记录第一个操作数为负数(true) flag_one = true; if (two < 0)//记录第二个操作数为负数(true) flag_two = true; if (three < 0)//记录第三个操作数为负数(true) flag_three = true; if (four < 0)//记录第四个操作数为负数(true) flag_four = true; bool flag_OT = false; if ((one<0 && two>0) || (one > 0 && two < 0))//记录第一个真分数为负数(true) flag_OT = true; bool flag_TF = false; if ((three<0 && four>0) || (three > 0 && four < 0))//记录第二个真分数为负数(true) flag_TF = true; if (two != 0 && four != 0)//分母不为0 { if (!flag_OT && !flag_TF)//如果op1、op2都为正 cout << count << "、 " << one <<"/"<<two<< " " << sign << " " << three << "/" << four << endl; if (flag_OT && !flag_TF)//如果op1为负,op2为正 cout << count << "、 (" << one << "/" << two << ") " << sign << " " << three << "/" << four << endl; if (!flag_OT && flag_TF)//如果op1为正,op2为负 cout << count << "、 " << one << "/" << two << " " << sign << " (" << three << "/" << four << ")" << endl; if (flag_OT && flag_TF)//如果op1、op2都为负 cout << count << "、 (" << one << "/" << two << ") " << sign << " (" << three << "/" << four << ")" << endl; } break; } } break; } case(1) : { sign = '-'; goto loop4; } case(2) : { sign = '*'; goto loop4; } case(3) : { sign = '/'; if (one < two) { int tmp; tmp = one; one = two; two = tmp; } if (one < 0)//记录第一个操作数为负数(true) flag_one = true; if (two < 0)//记录第二个操作数为负数(true) flag_two = true; if (two != 0) { int yu = one%two; if (choose2 == 1)//除法运算含有余数 { if (yu != 0) { if (!flag_one && !flag_two)//如果op1、op2都为正 cout << count << "、 " << one << " " << sign << " " << two << endl; if (flag_one && !flag_two)//如果op1为负,op2为正 cout << count << "、 (" << one << ") " << sign << " " << two << endl; if (!flag_one && flag_two)//如果op1为正,op2为负 cout << count << "、 " << one << " " << sign << " (" << two << ")" << endl; if (flag_one && flag_two)//如果op1、op2都为负 cout << count << "、 (" << one << ") " << sign << " (" << two << ")" << endl; } } else if (choose2 == 2)//除法运算不含余数 { if (yu == 0) { if (!flag_one && !flag_two)//如果op1、op2都为正 cout << count << "、 " << one << " " << sign << " " << two << endl; if (flag_one && !flag_two)//如果op1为负,op2为正 cout << count << "、 (" << one << ") " << sign << " " << two << endl; if (!flag_one && flag_two)//如果op1为正,op2为负 cout << count << "、 " << one << " " << sign << " (" << two << ")" << endl; if (flag_one && flag_two)//如果op1、op2都为负 cout << count << "、 (" << one << ") " << sign << " (" << two << ")" << endl; } } } break; } } count++; } } else if (choose1 == 2)//不含有真分数的题目 { int choose3; loop3: cout << "除法运算中有无余数?请选择:1、有 2、无" << endl; cin >> choose3; if (choose3 != 1 && choose3 != 2) { cout << "没有您选择的功能,请重新选择:" << endl; goto loop3; } cout << "系统将为您出" << n << "道按您定制的四则运算题目:" << endl; srand((int)time(0)); while (count < n) { one = r1 + rand() % r; two = r1 + rand() % r; if (one < 0)//记录第一个操作数为负数(true) flag_one = true; if (two < 0)//记录第二个操作数为负数(true) flag_two = true; //随机生成运算符 sign_num = rand() % 4; switch (sign_num) { case(0) : { sign = '+'; loop5: if (one < 0)//记录第一个操作数为负数(true) flag_one = true; if (two < 0)//记录第二个操作数为负数(true) flag_two = true; if (!WheReap(one, two, sign_num, count))//如果有重复 count--; else//如果没有重复 { if (!flag_one && !flag_two)//如果op1、op2都为正 cout << count << "、 " << one << " " << sign << " " << two << endl; if (flag_one && !flag_two)//如果op1为负,op2为正 cout << count << "、 (" << one << ") " << sign << " " << two << endl; if (!flag_one && flag_two)//如果op1为正,op2为负 cout << count << "、 " << one << " " << sign << " (" << two << ")" << endl; if (flag_one && flag_two)//如果op1、op2都为负 cout << count << "、 (" << one << ") " << sign << " (" << two << ")" << endl; } break; } case(1) : { sign = '-'; goto loop5; } case(2) : { sign = '*'; goto loop5; } case(3) : { sign = '/'; if (one < two) { int tmp; tmp = one; one = two; two = tmp; } if (one < 0)//记录第一个操作数为负数(true) flag_one = true; if (two < 0)//记录第二个操作数为负数(true) flag_two = true; if (two != 0) { int yu = one%two; if (choose2 == 1)//除法运算含有余数 { if (yu != 0) { if (!flag_one && !flag_two)//如果op1、op2都为正 cout << count << "、 " << one << " " << sign << " " << two << endl; if (flag_one && !flag_two)//如果op1为负,op2为正 cout << count << "、 (" << one << ") " << sign << " " << two << endl; if (!flag_one && flag_two)//如果op1为正,op2为负 cout << count << "、 " << one << " " << sign << " (" << two << ")" << endl; if (flag_one && flag_two)//如果op1、op2都为负 cout << count << "、 (" << one << ") " << sign << " (" << two << ")" << endl; } } else if (choose2 == 2)//除法运算不含余数 { if (yu == 0) { if (!flag_one && !flag_two)//如果op1、op2都为正 cout << count << "、 " << one << " " << sign << " " << two << endl; if (flag_one && !flag_two)//如果op1为负,op2为正 cout << count << "、 (" << one << ") " << sign << " " << two << endl; if (!flag_one && flag_two)//如果op1为正,op2为负 cout << count << "、 " << one << " " << sign << " (" << two << ")" << endl; if (flag_one && flag_two)//如果op1、op2都为负 cout << count << "、 (" << one << ") " << sign << " (" << two << ")" << endl; } } } break; } } count++; } } }
用户选择打印方式的函数体,如下:
/*输出打印方式*/ int Output(int o) { /*int o; cout << "系统已经记录了您的定制参数!请选择打印的方式:(1、直接输出 2、保存到文件)"<<endl; cin >> o;*/ if (o == 1) cout << "四则运算出题系统欢迎您!!" << endl; else if (o == 2) { cout << "四则运算出题系统欢迎您!!" << endl; ofstream outfile("formula.txt", ios::out); if (!outfile) { cout << "Open error!!" << endl; exit(1); } outfile.close(); } else cout << "输入错误,重新选择!" << endl; return 0; }
最后,是主函数部分:
void main() { /*srand((int)time(0));*/ int O, F; int N,R,R1,R2,count; cout << "请选择您是否需要保存文档?(1、不需要 2、需要)" << endl; cin >> O; Output(O); cout << "您想为孩子定制什么范围的题目呢?先输入下限,再输入上限(以回车间隔,可含有负数且上限≥下限):"<<endl; cin >> R1; cin >> R2; while (1)//判断是否输入合法 { if (R2 < R1) { cout << "您输入的范围不合理,应输入 上限≥下限,请重新输入:" << endl; cin >> R1; cin >> R2; } else break; } cout << "出多少道题呢?请输入个数:"<<endl; cout << "(友情提示:您不要为孩子出太多的题目~1000道以内最好,上限是100000道!谢谢合作!)" << endl; cin >> N; cout << "请按照孩子的学习程度选择题目的难度:是否包含乘除运算?(1、是 2、否)" << endl; cin >> F; while (1)//判断是否输入合法 { if (F!=1 && F!=2) { cout << "没有您想定制的功能,请重新输入(只输入1或2即可):" << endl; cin >> F; } else break; } if (F == 1)//包含乘除法 FourOper(N, R1, R2); if (F == 2)//不包含乘除法 AddSub(N, R1, R2); cout << "感谢您的使用,欢迎下次再来!祝您的孩子学习进步!!<( ̄︶ ̄)>" << endl; }
相关文章推荐
- LeetCode 4. Median of Two Sorted Arrays
- M2_PERO
- MNIST 数据处理
- HPU周赛题目解析
- 操作系统
- linux内核线程死锁或死循环(soft lockup)之后如何让系统宕机重启
- Palindrome Linked List
- CentOS下安装JDK1.8
- Andrew NG机器学习课程笔记系列之——机器学习之神经网络模型-下(Neural Networks: Representation)
- Spring4新特性——集成Bean Validation 1.1(JSR-349)到SpringMVC
- 第二周项目计划日志
- c++ 实现动态顺序表(拷贝构造 赋值运算符重载等操作)
- c++ 写时拷贝
- Andrew NG机器学习课程笔记系列之——机器学习之神经网络模型-上(Neural Networks: Representation)
- Andrew NG机器学习课程笔记系列之——机器学习之正则化(Regularization)
- HTML5触屏界面设计与开发
- 学习进度条
- c++ 深浅拷贝(传统写法 xain'dai'xie'fa)
- c语言常见50题 及答案(递归 循环 以及常见题目)
- 最少转弯