天天看點

軟工第三次作業

要求0

作業位址:【https://edu.cnblogs.com/campus/nenu/2016CS/homework/2266】

要求1

git位址:https://git.coding.net/Soloversion/f4.git

要求2

結對同學部落格位址:https://www.cnblogs.com/yuetj/p/9929444.html

結對同學姓名:嶽天嬌  2016011905 

解題思路:在拿到這個題後我們兩個先對題目的意圖進行了分析,了解了題目的意思之後開始嘗試程式設計。但是由于本身水準不高,是以我們選擇看看别人的來進行學習,了解了别人的大體思路之後,我們開始自己敲代碼。是以應該算是代碼學習的過程,在以後我們會慢慢建立起自己的知識體系,來做到自主程式設計,更少的借鑒他人的代碼。

難點:

(1)區分每一種情況并做到完美輸出

(2)輸入和輸出的格式問題

(3)有限和無限小數的判斷

我們在做的時候隻完成了功能一和功能二,輸入還是有點小問題,功能三還在持續完善中...

功能一中字尾表達式這一塊兒是比較關鍵的,我們通過研究一位部落客的代碼,然後自己再進行編寫,大體上與那位部落客的相同

1 void suffix(char str[10]) //字尾表達式
 2 {
 3     stack<char>s1;  //運用棧的思想
 4     stack<Number>s2;
 5     int i=0,j=0;
 6     for(i=0;str[i]!='\0';i++)
 7     {
 8         if(str[i]>='0'&&str[i]<='9')
 9         {
10             Number num;
11             num.a=0;
12             num.b=0;
13             while(str[i]<='9'&&str[i]>='0')
14             num.a=(str[i++]-'0')+num.a*10;
15             s2.push(num);   
16             i--;
17         }
18         else
19         {
20             if(str[i]==')')
21             {
22                 while(s1.top()!='(')
23                 {
24                     Number num;
25                     num.b=1;
26                     num.a=s1.top();
27                     s2.push(num);
28                     s1.pop();
29                 }
30                 s1.pop();
31             }
32             else if(s1.empty()||s1.top()=='('||str[i]=='(')
33             {
34                 s1.push(str[i]);
35             }
36             else
37             {
38                 if((str[i]=='*'||str[i]=='/')&&(s1.top()=='+'||s1.top()=='-'))
39                 s1.push(str[i]);
40                 else
41                 {
42                     Number num;
43                     num.b=1;
44                     num.a=s1.top();
45                     s2.push(num);
46                     s1.pop();
47                     i--;
48                 }
49             }           
50         }
51     }      

功能二與功能一相比有了左括号和右括号的插入,情形更加複雜

1 while(y)
 2         {
 3             if(str[len-2]=='(')  //左括号 
 4             {
 5                 str[len-2]=str[len-1];
 6                 len--;
 7             }
 8             else if(str[len-3]=='(')
 9             {
10                 str[len-3]=str[len-2];
11                 str[len-2]=str[len-1];
12                 len--;
13             }
14             else
15             str[len++]=')';    //右括号 
16             y--;
17         }      

結對程式設計的體會:三個臭皮匠賽過諸葛亮,結對程式設計讓我們更有了彼此互相加油和完成下去的動力,讓我們盡最大的努力去完成這次作業。同時在遇到困難時,不再是一個人的戰鬥,而是可以和隊友一起讨論,在這個過程中也就産生了許多新的想法和結對辦法,讓工作效率也能有所提高。

三項記憶較深的事情:

(1)出了問題之後和隊友一起debug的時候;

(2)當通過那個部落客知道可以運用棧這個知識點的時候;

(3)有限和無限小數的判斷,括号的比對問題等等;

(4)在這個過程中又重新溫習了一些C++的知識點

結對照片:

軟工第三次作業