加减法的生成
軟件工程開課兩周了,實質(zhì)上的作業(yè)就是一個,寫代碼隨機生成供小學生使用的算術(shù)式。第一感覺,沒啥感覺。。以為軟件工程又是可以混的一門課。。但是,當我閱讀了《軟件工程——構(gòu)建之法》之后,頓時對其改觀,這是一本難得的能讓我看下去的教科書,而且他講述的內(nèi)容也令我感到很熟悉。還記得當初學院里有個讓我感到很自豪的項目叫“讓優(yōu)秀的學生更優(yōu)秀”,很幸運的是,我被劃到了張老師門下,張老師與我見面后扯了一大堆,具體的已經(jīng)淡忘,但他著重提到的一個職業(yè)——架構(gòu)師一直印在我的心上,讀了《構(gòu)建之法》我發(fā)現(xiàn)里面講的就是成為一個架構(gòu)師的秘籍,遂我就像一個得到了絕世武功秘籍的修士對其進行精讀并實踐,高興的像個猴子。
就拿這個隨機加減法的生成為例,版本1.0:
我以為,這是個很簡單的小程序,于是,一個不太常見的srand函數(shù)和幾個if結(jié)束了這個不成熟的版本,代碼如下:
void main(){int a,b,c,p,i;srand(time(0));printf("題目如下:\n");for(i=0;i<20;i++){a=rand()%101;b=rand()%101;p=rand()%2;if(p==1)printf("%d+%d=\n",a,b);if(p==0){if(a<b){c=a;a=b;b=c;}printf("%d-%d=\n",a,b);}}} 每次碼完代碼,諸如怎么把這個代碼寫得更加高大上之類的想法總會涌上心頭,但是通常會因為各種因素而難以實現(xiàn)(主要是懶),這次很幸運的是老師又對這個代碼進行了要求添加,支持多項式,支持括號,支持balabala總之是一大堆要求,于是,別懶了,繼續(xù)寫,1.1版本誕生。這個版本我添加了乘除法功能、數(shù)字大小上限功能,另外也對乘除法的輸出進行了優(yōu)化,具體就是把C語言里的乘除號* /改成了人類日常熟知的乘除號× ÷(雖然沒有任何卵用,但這也是對用戶體驗的一種提升啊!!!)。下面貼上代碼:
很明顯,代碼多了好多,不過我想再加個生成多項式的功能,反觀以上兩次代碼,明顯并不能實現(xiàn)這個需求,于是,代碼推翻重寫,版本1.2上線。更新內(nèi)容:多項式生成,式子的生成不再像以前那樣用if else配合固定形式輸出,而是把數(shù)與運算符分開,一切都隨機生成,代碼如下:
#include <stdio.h> #include <stdlib.h> #include "time.h" #include "math.h" #include "string.h"long num_limit; //數(shù)據(jù)極限int bol_Mul; //是否有乘除法的判斷/* 函數(shù)聲明 */ void Muliplication_Judge(); //是否有乘除法并生成相應符號 void Formula_Create(); //多項式的生成int main() {int i;char IsMul[5];srand(time(0));printf("請輸入算數(shù)題目范圍(即所允許的最大值)\n");scanf("%ld",&num_limit);printf("請輸入是否加入乘除法,‘yes’ OR ‘no’\n");scanf("%s",IsMul);if(strcmp(IsMul,"yes")==0)bol_Mul = 1;elsebol_Mul = 0;printf("***********************題目為:***********************\n");for(i = 0;i<30;i++)Formula_Create();return 0; }void Muliplication_Judge() {int p;char symbol[5];if(bol_Mul == 1){p = rand()%4;switch(p){case 0:strcpy(symbol,"+");break;case 1:strcpy(symbol,"-");break;case 2:strcpy(symbol,"×");break;case 3:strcpy(symbol,"÷");break;}}else {p = rand()%2;switch(p){case 0:strcpy(symbol,"+");break;case 1:strcpy(symbol,"-");break;}}printf("%s",symbol); }void Formula_Create() {int i;int p=1;int a;while(p<2){p = rand()%3;}printf(" ");for (i=0;i<p-1;i++){a= rand()%num_limit;printf("%d",a);Muliplication_Judge();}a = rand()%num_limit;printf("%d",a);printf("=\n");}1.2之后,我要加入的功能是隨機嵌套括號,這個功能不再是前面那樣的體力活了,所以我還沒實現(xiàn)。。。暫時有個設想還沒來得及做完,就是改變1.2版本中數(shù)字與運算符完全分開的做法,再增加一個可以生成隨機二項式的函數(shù),這樣就能對其進行括號嵌套。期待我的1.3版本。。。。
?
?
下面說說最近的一些感受。
寫好一個項目對底層架構(gòu)的要求很高,就像建座大廈,地基不穩(wěn),大廈必不穩(wěn)固?;叵?.1版本和1.2版本的推翻重寫,如果事先對整個工程進行預估,估計重寫量會少很多,《構(gòu)建之法》中提到一個方法——把函數(shù)單調(diào)化,就是一個函數(shù)只實現(xiàn)一個功能,我認為對這種情況很適用。
另外,最近群里助教們發(fā)了不少優(yōu)秀同學blog的鏈接,我看了不少,第一感覺心里是崩潰的,一直沒想到民間有那么多高手,自己以前著實是坐井觀天了,結(jié)合自身我總結(jié)了一句話:“成才路上,不僅要學習技能,更要學習如何展示你的技能”。舉個例子,Ray同學的那個app看得我很蛋疼。。。。就是幾個按鈕,幾個跳轉(zhuǎn),做過Android的不傻都會做,但是我沒做,他做了,這就是一種優(yōu)秀。
最近要做的事情實在太多(前幾天閑得蛋疼瘋狂接比賽),于是得了選擇恐懼癥,竟不知道具體該做什么,渾渾噩噩了兩天,還因為耳機聽太多大腦疲勞。。反而看《構(gòu)建之法》的時候讓我感到了久違的輕松,這就是一本故事會。。事情越多越能鍛煉人,這并不能難倒我,Fighting!!!
最后說句牢騷話,cnblogs不能加#笑哭了#表情真是蛋疼。。。
轉(zhuǎn)載于:https://www.cnblogs.com/weit/p/5276852.html
《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
- 上一篇: Light OJ 1012
- 下一篇: ThreadLocal小记