傳送門
這次作業思路沒有什麼好說的,主要是讓我們優化代碼,優化項目。盡量做到子產品化。
主要按照作業要求去完成。
以下是我完成後再main函數中的主要内容
int main()
{
double n,right=0;
char a[4];//随機整數
char oper[3];//随機運算符
char *ex;
double answers;//存儲正确結果
n=scanf();//開始界面
for(int i=0;i<n;i++)
{
srand((unsigned)time(NULL));//不出現相同的随機數
for(int j=0;j<4;j++)
{
a[j]=randomNumber();//随機數
}
for(int j=0;j<3;j++)
{
oper[j]=randomOperation();//運算符
}
ex=generateExpression(a,oper);
answers=calculateResult(ex);//儲存正确答案
if(answers==(int)answers) //檢查是否存在小數 ,結果檢驗
{
cout << i+1 <<". "<<ex;
right+=scanf2(answers);//不是小數則進行輸入答案
}
else//如果答案為小數,則重新進行循環
{
i=i-1;
}
delete [] ex;
}
print(right,n);//結果診斷
return 0;
}
經曆:
一開始,我在分離函數的時候,認為,帶有參數什麼的,太麻煩了,要寫很多,有時寫了, 還要傳回函數值,就投機取巧,把大部分變量變成全局變量。然後自以為完美的完成了,後面去問了一下學長,感覺自己并不是真正做到函數的子產品化。(在第一個版本中就是全局變量的情況--那樣也間接說明我實際上對于函數運用還很不熟悉)
接着,我就開始進行參數的添加,将大部分全局變量,又變成了在各個函數的局部變量。在這過程中遇到了挺多問題的。主要問題是函數傳回一個數組的問題。最後采用了動态記憶體來存儲,将其錯誤清除了。
最後就敲定了目前在github上的最新版本。
不足之處:
1.這一次,我感覺我還不是很按照作業要求來完成,在main裡面我将人機互動方面分成兩部分來寫。在部分函數使用含義上,有一部分函數可能有功能交叉的情況。
2.寫完這個代碼後,發現有時題目出現變慢了,我認為原因可能是在于排除計算結果是小數的情況部分。我嘗試輸出一些東西時,總能發現小數部分出現次數會挺多的。然後就需要每次跳過其情況,重新随機生成表達式。這樣最後導緻了在計算題出現的表達式中除法的情況變得比較少---其實在第一次寫這個作業就出現的情況了。
還有,經過這次修改後,在上次出現的一個bug : @ 該字元的出現,在這次運作中沒有出現了--實際上自己還不清楚其原因。TAT。
感想:
通過這次作業,感覺強化了自己對于函數的用法,對于子產品化,比較有深入的了解。也發現自己基礎還是不夠紮實,還需要厚植基礎0.0目前這就想到這些了。
後續更新:
昨天因為時間倉促,就直接在自己的本來的源代碼上進行修改,我認為,一個源代碼檔案總不可以和main函數放在一起,直接好幾百行吧。于是今天就改成了項目形式0.0(不知道算不算)用一個頭檔案來去包含哪些我寫的函數。一開始也遇到一些,使用頭檔案錯誤的資訊。後感覺還是有點投機取巧,把函數名稱和函數内容都放到了頭檔案中,沒有分成兩個檔案(一個包含函數名稱,一個包含函數内容的形式),這樣的話,别人也才能夠在我的main中看下去,不然都不知道我的main函數寫在哪裡。
我修改完之後,運作時出現一個問題彈出:

目前不是很清楚。
下面是我改成項目後,在main檔案的源代碼:
#include <iostream>
#include "allfunctions.h"
int main()
{
double n,right=0;//題數和正确數
char a[4];//随機整數
char oper[3];//随機運算符
char *ex; //表達式存儲
double answers;//存儲正确結果
n=scanf();//開始界面
for(int i=0;i<n;i++)
{
srand((unsigned)time(NULL));//不出現相同的随機數
for(int j=0;j<4;j++)
a[j]=randomNumber();//随機數
for(int j=0;j<3;j++)
oper[j]=randomOperation();//運算符
ex=generateExpression(a,oper);//這裡面我傳回的是動态數組,在網上查了一下,要在末尾将動态數組删除,是以有了最下面那個語句
answers=calculateResult(ex);//儲存正确答案
if(answers==(int)answers) //檢查是否存在小數 ,結果檢驗
{
cout << i+1 <<". "<<ex;
right+=scanf2(answers);//不是小數則進行輸入答案
}
else//如果答案為小數,則重新進行循環
i=i-1;
delete [] ex;//删除動态數組
}
print(right,n);//結果診斷
return 0;
}