程序設計思路:
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 break;
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 }