天天看點

2017《面向對象程式設計》課程作業一

傳送門

這次作業思路沒有什麼好說的,主要是讓我們優化代碼,優化項目。盡量做到子產品化。

主要按照作業要求去完成。

以下是我完成後再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函數寫在哪裡。

我修改完之後,運作時出現一個問題彈出:

2017《面向對象程式設計》課程作業一

目前不是很清楚。

下面是我改成項目後,在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;
}
           

ps:我把main檔案名稱改成--計算題項目,是以要在github上找的話就是 allfunctions.h 和計算題項目.cpp,而之前的版本是在原版本的 多語言 上面進行修改的,是以可以 打開 多語言.cpp 檢視