日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

加减法的生成

發布時間:2025/7/25 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 加减法的生成 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  軟件工程開課兩周了,實質上的作業就是一個,寫代碼隨機生成供小學生使用的算術式。第一感覺,沒啥感覺。。以為軟件工程又是可以混的一門課。。但是,當我閱讀了《軟件工程——構建之法》之后,頓時對其改觀,這是一本難得的能讓我看下去的教科書,而且他講述的內容也令我感到很熟悉。還記得當初學院里有個讓我感到很自豪的項目叫“讓優秀的學生更優秀”,很幸運的是,我被劃到了張老師門下,張老師與我見面后扯了一大堆,具體的已經淡忘,但他著重提到的一個職業——架構師一直印在我的心上,讀了《構建之法》我發現里面講的就是成為一個架構師的秘籍,遂我就像一個得到了絕世武功秘籍的修士對其進行精讀并實踐,高興的像個猴子。

  就拿這個隨機加減法的生成為例,版本1.0:

  我以為,這是個很簡單的小程序,于是,一個不太常見的srand函數和幾個if結束了這個不成熟的版本,代碼如下:

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);}}}

  每次碼完代碼,諸如怎么把這個代碼寫得更加高大上之類的想法總會涌上心頭,但是通常會因為各種因素而難以實現(主要是懶),這次很幸運的是老師又對這個代碼進行了要求添加,支持多項式,支持括號,支持balabala總之是一大堆要求,于是,別懶了,繼續寫,1.1版本誕生。這個版本我添加了乘除法功能、數字大小上限功能,另外也對乘除法的輸出進行了優化,具體就是把C語言里的乘除號* /改成了人類日常熟知的乘除號× ÷(雖然沒有任何卵用,但這也是對用戶體驗的一種提升啊!!!)。下面貼上代碼:

#include <stdio.h> #include<stdlib.h> #include<time.h> #include<math.h>int multiplication(long num) //有乘除法 {int a,b,c,p,i;int x = num+1;a=rand()%x;b=rand()%x;p=rand()%4;if(p==0){if(a<b){c=a;a=b;b=c;}printf(" %d-%d=\n",a,b);}if(p==1)printf(" %d+%d=\n",a,b);if(p==2)printf(" %d×%d=\n",a,b);if(p==3)printf(" %d÷%d=\n",a,b); }void no_multiplication(long num) //無乘除法 {int a,b,c,p,i;int x = num+1;a=rand()%x;b=rand()%x;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);} }int main() {int i; //計數器long num; //數據范圍極限char IsMul[5];srand(time(0));printf("請輸入算數題目范圍(即所允許的最大值)\n");scanf("%ld",&num);printf("請輸入是否加入乘除法,‘yes’ OR ‘no’\n");scanf("%s",IsMul);printf("***********************題目為:***********************\n");if(strcmp(IsMul,"yes")==0){for(i=0;i<20;i++)multiplication(num);}else {for(i=0;i<20;i++)no_multiplication(num);}return 0; }

  很明顯,代碼多了好多,不過我想再加個生成多項式的功能,反觀以上兩次代碼,明顯并不能實現這個需求,于是,代碼推翻重寫,版本1.2上線。更新內容:多項式生成,式子的生成不再像以前那樣用if else配合固定形式輸出,而是把數與運算符分開,一切都隨機生成,代碼如下:

#include <stdio.h> #include <stdlib.h> #include "time.h" #include "math.h" #include "string.h"long num_limit; //數據極限int bol_Mul; //是否有乘除法的判斷/* 函數聲明 */ void Muliplication_Judge(); //是否有乘除法并生成相應符號 void Formula_Create(); //多項式的生成int main() {int i;char IsMul[5];srand(time(0));printf("請輸入算數題目范圍(即所允許的最大值)\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之后,我要加入的功能是隨機嵌套括號,這個功能不再是前面那樣的體力活了,所以我還沒實現。。。暫時有個設想還沒來得及做完,就是改變1.2版本中數字與運算符完全分開的做法,再增加一個可以生成隨機二項式的函數,這樣就能對其進行括號嵌套。期待我的1.3版本。。。。

?

?

下面說說最近的一些感受。

  寫好一個項目對底層架構的要求很高,就像建座大廈,地基不穩,大廈必不穩固。回想1.1版本和1.2版本的推翻重寫,如果事先對整個工程進行預估,估計重寫量會少很多,《構建之法》中提到一個方法——把函數單調化,就是一個函數只實現一個功能,我認為對這種情況很適用。

  另外,最近群里助教們發了不少優秀同學blog的鏈接,我看了不少,第一感覺心里是崩潰的,一直沒想到民間有那么多高手,自己以前著實是坐井觀天了,結合自身我總結了一句話:“成才路上,不僅要學習技能,更要學習如何展示你的技能”。舉個例子,Ray同學的那個app看得我很蛋疼。。。。就是幾個按鈕,幾個跳轉,做過Android的不傻都會做,但是我沒做,他做了,這就是一種優秀。

  最近要做的事情實在太多(前幾天閑得蛋疼瘋狂接比賽),于是得了選擇恐懼癥,竟不知道具體該做什么,渾渾噩噩了兩天,還因為耳機聽太多大腦疲勞。。反而看《構建之法》的時候讓我感到了久違的輕松,這就是一本故事會。。事情越多越能鍛煉人,這并不能難倒我,Fighting!!!

最后說句牢騷話,cnblogs不能加#笑哭了#表情真是蛋疼。。。

轉載于:https://www.cnblogs.com/weit/p/5276852.html

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的加减法的生成的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。