程序设计思路:
1.运算式的输出格式可以为 数字 运算符 数字,也可以为 数字 运算符 数字 运算符 数字,还可以是更复杂的式子,在此只实现了2-3个数字的运算式。
2.将式子分为两类,第一类为20个,第二类为10个,分别用FOR循环控制输出。
3.第一类式子稍简单,只需通过随机函数将两个数字赋值,中间运算符通过数组下标的随机赋值实现随机性,再通过格式输出即可
4.此时还要考虑运算符为 ‘/’,并且除数为0的情况,这时用if语句设置条件排除即可
5.计算第一类式子结果可以参考计算器的功能代码,用switch语句实现判断运算并存储结果。
6.第二类式子参考第一类式子的输出方式,结果需要考虑 运算符优先级,运算计算顺序,因时间关系,计算结果暂未实现,以后再添加。
附上代码:
1 //练习一,要求实现输出小学四则运算表达式,能支持一个真分数的四则运算 2 //赵承圣 2016.3.5 3 #include<iostream> 4 #include<ctime> 5 using namespace std; 6 7 void exchange(int &a, int &b) //定义一个交换函数 8 { 9 int temp = a; 10 a = b; 11 b = temp; 12 } 13 14 void main() 15 { 16 srand((int)time(NULL)); //每次执行种子不同,生成不同的随机数 17 int num1, num2,num3,snum,snum1; //定义变量通过随机函数来获得随机数字num1,num2,num3和随机符号snum,snum1 18 double result; //用result保存计算结果 19 char symbol[4]; //随机计算符号数组 20 symbol[0] = '+'; 21 symbol[1] = '-'; 22 symbol[2] = '*'; 23 symbol[3] = '/'; 24 for (int sexp=0; sexp < 20;sexp++) //控制简单表达式的个数为20个 25 { 26 num1 = rand() % 100; 27 num2 = rand() % 100; 28 snum = rand() % 4; 29 if (num2 == 0 && snum == 3) //除数为0的结果排除 30 break; 31 switch (snum) 32 { 33 case 0:result = num1 + num2; break; 34 case 1:result = num1 - num2; break; 35 case 2:result = num1 * num2; break; 36 case 3:double dnum1 = (int)num1; double dnum2 = (int)num2; result = dnum1 / dnum2; break; //将除的结果显示为double型 37 } 38 cout << num1 << symbol[snum] << num2 << "="<<result<<endl; 39 } 40 for (int fexp = 0; fexp < 10; fexp++) //控制表达式的个数为10个 41 { 42 num1 = rand() % 100; 43 num2 = rand() % 100; 44 num3 = rand() % 100; 45 snum = rand() % 4; 46 snum1 = rand() % 4; 47 if ((num2 == 0 && snum == 3)||(num3==0&&snum1==3)) //除数为0的结果排除 48 continue; 49 if (snum == 3 && num1 > num2) //如为假分数,则分子分母交换,调用exchange函数 50 exchange(num1,num2); 51 if (snum1 == 3 && num2 > num3) 52 exchange(num2, num3); 53 cout << num1 << symbol[snum] << num2 <<symbol[snum1]<<num3<< "="<< endl; 54 } 55 system("pause"); 56 }