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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

2017年软件工程第四次作业-3四则运算

發(fā)布時間:2025/3/18 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2017年软件工程第四次作业-3四则运算 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

one

要求1 參考《構建之法》第4章兩人合作,結對編程上述功能,要求每人發(fā)布隨筆1篇 (代碼是共同完成的,博客是分別完成的)。 (1) 給出每個功能的重點、難點、編程收獲。(2)給出結對編程的體會,以及 (3) 至少5項在編碼、爭論、復審等活動中花費時間較長,給你較大收獲的事件。

???(1).給出每個功能的重點、難點、編程收獲

????? 功能一的重點難點我感覺是隨機數(shù)的產(chǎn)生以正確算數(shù)。

????? 功能二的重點難點是后波蘭表達式、堆棧的實現(xiàn)。

????? 功能三的重點難點是限定題目數(shù)量,避免重復打印,還要工整輸出。

????? 功能四的重點難點是分數(shù)參與運算,得到女神青睞。

????? 我的編程收獲是:首先看見四則運算就要想起來用棧來實現(xiàn),分別有兩個棧,算數(shù)棧和算符棧。然后如何去讀取。其次就是涉及到四則運算就一定要用到運算符,運算符是有優(yōu)先級的,就要想辦法對算符優(yōu)先級進行比較,再決定哪個運算符進棧哪個運算符直接參與運算。最后就是逆波蘭表達式和堆棧問題,雖然此處我沒有寫出來,參考了別人的代碼,但是我對這個知識點也有了更省的了解。這就是我這次編程的收獲。

?(2).結對編程的體會:

???????? 首先我在結對編程之前先讀了《構建之法》第四章兩人合作這一部分知識,讓我更好的理解了結對編程的意義。鄒欣老師說,在結對編程中,任何一段代碼都至少被兩雙眼睛看過,被兩個腦袋思考過,結對編程避免了“我的代碼”還是“他的代碼”的問題,使而整個代碼的責任不屬于某個人,而是屬于兩個人,進而屬于整個團隊。還有結對編程中駕駛員和領航員的角色要經(jīng)常互換,避免長時間緊張工作而導致的觀察力和判斷力下降。所以我認為結對編程還是很有必要的,對于一個好性能的軟件或者程序,我感覺結對編程是不可缺少的。

????? 和我結對編程的是黃澤宇同學,我們兩個互相監(jiān)督完成了這次的作業(yè)。雖然說有些代碼是我們兩個從別人那里參考過來的,但是我們也是一起對代碼進行理解。謝謝黃澤宇同學對我提出的疑問耐心解答,對我不會的知識點進行講解,也因為黃澤宇同學的幫助和指導,我們的程序才會更好的運行出來。

(3).至少5項在編碼、爭論、復審等活動中花費時間較長,給你較大收獲的事件

???? ?功能一的實現(xiàn)我們兩個花費了不少時間,因為功能一相對于其他功能是比較基礎的一個功能,我們在編碼中就用了不少時間,基本功能總是實現(xiàn)不了,我們兩個就開始百度或者查閱資料,比如在數(shù)據(jù)結構課本中再研究用棧來完成四則運算,是怎么讀取算數(shù)和算符,棧指針如何進行操作,讓我有較大的收獲。在功能二中逆波蘭表達式中也花費了不少時間,因為這個功能我們兩個實現(xiàn)不了,但是也掙扎過,查資料百度,然后試著理解編寫,但是也以失敗告終,最后還是用了大量時間從別人代碼里參考出來再用在自己的代碼里,使其功能能運行出來。其中我們兩個在限定題目數(shù)量和給出出題范圍中也花費了不少時間,功能一直實現(xiàn)不了,我們還是邊討論別查資料,總之道路還是很坎坷的哈哈。最后在代碼復審中,還是沒有完成老師規(guī)定的輸出格式,也花費不少時間來進行代碼規(guī)范,代碼規(guī)范應該是沒有問題的,我和黃澤宇會繼續(xù)努力的完善代碼。

要求2 給出照片1張,包括結對的2位同學、工作地點、計算機,可選項包括其他能表達結對編程工作經(jīng)歷的物品或場景。

??????? 下面是我和黃澤宇同學一起結對編程的照片:

two

功能1. 四則運算?,支持出題4個數(shù)的四則運算題目,所有題目要求作者有能力正確回答

(提示:1/3 != 0.33333333333333333333333333333333,而是無限長)。

???? 功能1運行截圖:

功能2. 支持括號

功能3. 限定題目數(shù)量,"精美"打印輸出,避免重復

功能4. 支持分數(shù)出題和運算

功能2要求支持括號,我寫不出來逆波蘭式算法,我和黃澤宇從網(wǎng)上扒下來用在自己程序里了。

運行截圖如下:

three

??? 四則運算的實現(xiàn)需要用到棧來實現(xiàn),運算式求值的核心思想:將運算式逐字符讀取,在這個讀取的過程中首先要先判斷是算符還是算數(shù),如果是算符的話,就與算符棧站定元素進行優(yōu)先級比較,如果優(yōu)先級高,則進棧,否則就進行運算,如果是算數(shù),則入算數(shù)棧。

?1.?本程序用了兩個棧,分一個為char類型存儲運算符,一個為float類型存儲算數(shù)。定義了四個棧指針分別是?

???????????????????????????????????????????????? SC *Push(SC *s, char c);? //使算符c進入算符棧

???????????????????????????????????????????????? SF *Push(SF *s, float f)?;?//使算數(shù)f進入算數(shù)棧

?????????????????????????????????????????????????SC *Pop(SC *s);????????????? //使算符棧的棧頂元素出棧

???????????????????????????????????????????????? SF *Pop(SF *s)?;????????????? //使算數(shù)棧的棧頂元素出棧

?

代碼如下:

?

?

SC *Push(SC *s, char c) {SC *p = (SC*)malloc(sizeof(SC));p->c = c;p->next = s;return p; } SF *Push(SF *s, float f) {SF *p = (SF*)malloc(sizeof(SF));p->f = f;p->next = s;return p; } SC *Pop(SC *s) {SC *q = s;s = s->next;free(q);return s; } SF *Pop(SF *s) {SF *q = s;s = s->next;free(q);return s; }

2.對算數(shù)運算符的操作。

a.首先列出優(yōu)先級關系,運算符支持+ - * /,#為結束符。

???????????? +??? -??? *??? /??? (???? )???? # ????
?????? +??? >??? >? ?<???<?? <? ?>? ?? >
?????? -???? >??? >?? <?? <?? <?? >??? ?>
?????? '?????>????>??? >?? >?? <?? >??? >
?????? /???? >????>??? >?? >?? <?? >??? >
?????? (??? <??? <??? <???<??? <?? =
?????? )??? >??? >??? >?? >?????????>?? ?>
??????#??? <??? <??? <?? <??? <???????? =

?

unsigned char Prior[7][7] = { '>', '>', '<', '<', '<', '>', '>','>', '>', '<', '<', '<', '>', '>','>', '>', '>', '>', '<', '>', '>','>', '>', '>', '>', '<', '>', '>','<', '<', '<', '<', '<', '=', ' ','>', '>', '>', '>', ' ', '>', '>','<', '<', '<', '<', '<', ' ', '=',};

b.判斷是不是運算符, 判斷Test字符是否在運算符集里,返回是或者不是。

Status In(char Test, char *TestOp) {int Find = false;for (int i = 0; i< OPSETSIZE; i++){if (Test == TestOp[i])Find = true;}return Find; }

c.判斷哪個是運算符,返回運算符在運算符集里的位置.

Status ReturnOpOrd(char op, char *TestOp) {for (int i = 0; i< OPSETSIZE; i++){if (op == TestOp[i])return i;} }

d.判斷兩個算符的優(yōu)先級,返回><=

char precede(char Aop, char Bop) {return Prior[ReturnOpOrd(Aop, OPSET)][ReturnOpOrd(Bop, OPSET)]; }

3,求解運算式。 設OPTR和OPND分別為運算符棧和運算數(shù)棧,OP為運算符集合。??

float EvaluateExpression(char* MyExpression) { SC *OPTR = NULL; SF *OPND = NULL; char TempData[20];float Data, a, b;char theta, *c, Dr[] = { '#', '\0' };OPTR = Push(OPTR, '#');c = strcat(MyExpression, Dr);strcpy(TempData, "\0"); while (*c != '#' || OPTR->c != '#'){if (!In(*c, OPSET)){Dr[0] = *c;strcat(TempData, Dr); c++;if (In(*c, OPSET)){Data = atof(TempData); OPND = Push(OPND, Data);strcpy(TempData, "\0");}}else {switch (precede(OPTR->c, *c)){case '<': OPTR = Push(OPTR, *c);c++;break;case '=': OPTR = Pop(OPTR);c++;break;case '>': theta = OPTR->c; OPTR = Pop(OPTR);b = OPND->f; OPND = Pop(OPND);a = OPND->f; OPND = Pop(OPND);OPND = Push(OPND, Operate(a, theta, b));break;} //switch }} //while return OPND->f; }

4.主函數(shù)。

int main() {srand((int)time(NULL)); int num1, num2, num3, num4, count, n, change, amount, shuchu, range, j, repeat = 0, bracket, proper_fs, right = 0, wrong = 0;string str_num1, str_num2, temp;float Answer, InputAns;cout << "Let's do the math. Be sure to follow the requirements. Come on!" << endl;cout << "All right, are you ready?" << endl;cout << "Is there a multiplication and division?1:YES,0:NO:" << endl;cin >> n;cout << "Are there parentheses?1:YES,0:NO:" << endl;cin >> bracket;cout << "Is there a proper fraction?1:YES,0:NO:" << endl;cin >> proper_fs;cout << "Please enter a numeric range:" << endl;cin >> range;cout << "Please enter the number of questions:" << endl;cin >> amount;string Equation[1000];char symbol;cout << "OK, let's get started:" << endl;for (int i = 0; i<amount; i++){//count = random() % 3 + 2;count = 4;str_num1 = create_num(proper_fs, range);str_num2 = create_num(proper_fs, range);symbol = create_symbol(n);Equation[i] = combination(str_num1, str_num2, symbol);if (count>2){for (count; count > 2; count--){symbol = create_symbol(n);str_num1 = Equation[i];if (bracket == 1){change = random() % 3;if (change == 0){str_num1 = '(' + str_num1 + ')';}}symbol = create_symbol(n);str_num2 = create_num(proper_fs, range);change = random() % 2;if (change == 0){temp = str_num1;str_num1 = str_num2;str_num2 = temp;}Equation[i] = combination(str_num1, str_num2, symbol);}}for (j = 0; j < i; j++){if (Equation[j] == Equation[i]){i = i - 1;repeat = 1;break;}}if (repeat != 1){cout << Equation[i] << "=";cin >> InputAns;Answer = get_ans(Equation[i]);Answer *= 100;int temp = (int)Answer;Answer = ((double)temp) / 100.00;if (InputAns == Answer){cout << "Correct answer!";right++;}else{cout << "Wrong answer!The correct answer is:";cout << setprecision(2) << fixed << Answer;wrong++;}cout << endl;}}cout << "You answer the correct number is " << right << ",You answer the wrong number is " << wrong << endl <<endl;system("pause");}


four

要求3 使用coding.net做版本控制。checkin 前要求清理 臨時文件、可執(zhí)行程序,通常執(zhí)行 build-clean可以達到效果

版本控制:

https://coding.net/u/MingZi-/p/f4-/git/tree/master

?

?

?

??????????????????????????????????????

?

?

?

?????

?

轉載于:https://www.cnblogs.com/Mingezi/p/7643708.html

總結

以上是生活随笔為你收集整理的2017年软件工程第四次作业-3四则运算的全部內容,希望文章能夠幫你解決所遇到的問題。

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