”二柱子“個人項目
關于二柱子的個人項目,據說……是這么發生的……
二柱子因為懶(,,? ? ?,,),要給他上小學的兒子編寫個能夠出小學四則運算題目的程序。老師上課的時候又添加了條件:
1、打印至少30道題
2、除了整數之外,還要支持真分數的四則運算。
? ? ? 老師上課的時候教導我們,寫代碼的時候不能拿起來就寫,因為我們不能做到一氣呵成的連貫式思維,要先列出程序的邏輯思路,而且語言不要過于“官方”,自己能看懂就行,越通俗越好。因此我的簡單思路如下:
1、定義兩個整型操作數
2、生成兩個1-100隨機數,并賦值給兩個操作數
3、循環輸出加減乘除四個運算符
? ? 用1234代替加減乘除四則運算,生成隨機數代表隨機的運算符(除4求余,case語句)
4、輸出
5、真分數:分子比分母小的分數,以分數的形式顯示出來
6、30次循環
其中涉及到“C++中生成隨機數”這個知識點,我忘記了,就百度了一下,參考了CSDN個人博客上面的代碼。如下:
C/C++怎樣產生隨機數:這里要用到的是rand()函數, srand()函數,C語言/C++里沒有自帶的random(int number)函數。
(1)? 如果你只要產生隨機數而不需要設定范圍的話,你只要用rand()就可以了:rand()會返回一隨機數值, 范圍在0至RAND_MAX 間。RAND_MAX定義在stdlib.h, 其值為2147483647。(2)? 如果你要隨機生成一個在一定范圍的數,你可以在宏定義中定義一個random(int number)函數,然后在main()里面直接調用random()函數。
(3)但是上面兩個例子所生成的隨機數都只能是一次性的,如果你第二次運行的時候輸出結果仍和第一次一樣。這與srand()函數有關。srand()用來設置rand()產生隨機數時的隨機數種子。在調用rand()函數產生隨機數前,必須先利用srand()設好隨機數種子(seed), 如果未設隨機數種子, rand()在調用時會自動設隨機數種子為1。上面的兩個例子就是因為沒有設置隨機數種子,每次隨機數種子都自動設成相同值1 ,進而導致rand()所產生的隨機數值都一樣。
srand()函數定義 : void srand (unsigned int seed);?
通常可以利用geypid()或time(0)的返回值來當做seed;
我的個人項目代碼如下:(僅供參考,功能不全,寫的還有點啰嗦)
1 //Zhao Ziyin,20160303,Four arithmetics 2 3 #include<iostream> 4 #include<time.h> 5 #include<string> 6 using namespace std; 7 #define N 30 8 #define random(x) (rand()%x) 9 10 void main() 11 { 12 //循環打印 13 while (true) 14 { 15 cout << "-----------Choose the form of formulas 1 or 2:--------------" << endl; 16 cout << " Ⅰ. Integers(like 35 + 64 = ) " << endl; 17 cout << " Ⅱ. Proper fraction(like 5/6 × 7/10 = ) " << endl; 18 int num, i; 19 int sign_num;//記錄運算符號代表的數字 20 int change;//數值交換的中間值 21 cin >> num; 22 23 //選擇整數運算 24 if (num == 1) 25 { 26 srand((int)time(0)); 27 cout << endl; 28 cout << "-----There are " << N << " arithmetic problems:-----" << endl; 29 30 //循環打印30次 31 for (i = 1; i <= N; i++) 32 { 33 int one, two; 34 /*srand((int)time(0));*/ 35 one = rand() % (99 + 1) + 1; 36 two = rand() % (99 + 1) + 1; 37 38 /*srand((int)time(0));*/ 39 sign_num = (rand() % (99 + 1) + 1) % 4; 40 switch (sign_num) 41 { 42 case(0) : 43 cout << i << ". "; 44 cout << one << " + " << two << " = " << endl; 45 break; 46 case(1) : 47 if (one < two)//減法的被減數要大于減數 48 { 49 change = one; 50 one = two; 51 two = change; 52 } 53 cout << i << ". "; 54 cout << one << " - " << two << " = " << endl; 55 break; 56 case(2) : 57 cout << i << ". "; 58 cout << one << " × " << two << " = " << endl; 59 break; 60 case(3) : 61 if (one < two)//除法的被除數要大于除數 62 { 63 change = one; 64 one = two; 65 two = change; 66 } 67 cout << i << ". "; 68 cout << one << " ÷ " << two << " = " << endl; 69 break; 70 } 71 } 72 } 73 74 //選擇含有真分數的四則運算 75 else if (num == 2) 76 { 77 string sign; 78 srand((int)time(0)); 79 cout << endl; 80 cout << "-----There are " << N << " proper fraction arithmetic problems:-----" << endl; 81 82 for (i = 1; i <= N; i++) 83 { 84 sign_num = (rand() % (99 + 1) + 1) % 4; 85 switch (sign_num)//利用隨機數隨機產生運算符 86 { 87 case(0) : 88 sign = '+'; break; 89 case(1) : 90 sign = '-'; break; 91 case(2) : 92 sign = '*'; break; 93 case(3) : 94 sign = '/'; break; 95 } 96 97 //生成四個隨機數分別做兩個真分數的分子和分母 98 int one, two, three, four; 99 /*srand((int)time(0));*/ 100 one = rand() % (99 + 1) + 1; 101 two = rand() % (99 + 1) + 1; 102 three = rand() % (99 + 1) + 1; 103 four = rand() % (99 + 1) + 1; 104 if (one > two)//第一個真分數的分子要小于分母 105 { 106 change = one; 107 one = two; 108 two = change; 109 } 110 if (three > four)//第二個真分數的分子要小于分母 111 { 112 change = three; 113 three = four; 114 four = change; 115 } 116 117 int oper_num; 118 oper_num = (rand() % (99 + 1) + 1) % 3; 119 switch (oper_num) 120 { 121 case(0) ://真分數與真分數運算 122 cout << i << ". "; 123 cout << one << "/" << two << " " << sign << " " << three << "/" << four << " = " << endl; 124 break; 125 case(1) ://真分數與整數運算 126 cout << i << ". "; 127 cout << one << "/" << two << " " << sign << " " << four << " = " << endl; 128 break; 129 case(2) ://整數與真分數運算 130 cout << i << ". "; 131 cout << one << " " << sign << " " << three << "/" << four << " = " << endl; 132 break; 133 } 134 } 135 } 136 //輸入的數字錯誤 137 else 138 { 139 cout << "Choose again!" << endl; 140 } 141 142 } 143 144 }
程序的截圖如下:
?
最后!!老師說我們每次寫代碼之前都要估計自己完成任務的時間,然后抓緊時間去完成就會慢慢的提高效率。完成這項任務我用了上課的后20分鐘(包括老師的講解和同學的自我展示交流),還有本周日(20160306)下午三點到四點二十左右的時間。((??・з・?)我知道自己寫代碼的速度實在是太慢了,我會以后多多鍛煉,提高效率,其實主要是提高自己的智商讓自己的邏輯水平更上一層樓。)
? ? ? 終于完成了人生中第一篇含有代碼的博客,雖然累但是還是蠻開森(* ̄ω ̄)真心~