2020面向對象程序設計寒假作業3 題解


2020面向對象程序設計寒假作業3 題解


Markdown在線編輯器 - www.MdEditor.com
作業描述 作業詳情
這個作業屬於哪個課程 2020福大數計面向對象程序設計
這個作業要求在哪里 面向對象程序設計寒假作業3
這個作業的目標 1.繼續完成編程題
2.發布博客
作業正文 見下文
其他參考文獻 1、BAT 批處理腳本教程
2、C語言_來了解一下GCC編譯器編譯C可執行腳本的過程

##編程題:
  • 繼續完成作業二的編程題。
  • 優化架構,思考代碼的拓展性,比如我需要增加其他功能,如選擇,循環語句怎么辦。
  • 思考:可以參考現有的編程語言,把這些語言的內容加入。如選擇、循環語句、函數、或者擴大數字范圍,支持負數等。

編程題要求:

1.讀題,提取出題目的要求。
2.分解需求,把需求分解為幾個你覺得不太相關的模塊。
3.思考每個模塊怎么寫,可以從簡單的模塊開始寫。
4.對於不會的問題進行查閱資料。
5.對於每一個模塊設計測試用例。
6.詳細記錄下以上每一步,並寫在博客中。
7.不要求完全做出來,但要求記錄詳細。
8.建議博客長度不少於1000字(不包含代碼)。

題目要求:

編寫一個程序,輸入滿足以下語法要求的一段文字,輸出運行后的結果。
變量定義:整數 錢包 等於 零
運算(加法):錢包 增加 四
運算(減法):錢包 減少 四
輸出:看看 錢包
樣例
輸入:
整數 錢包 等於 零
錢包 增加 四
錢包 減少 三
看看 錢包
輸出:

翻譯過來就是 輸入漢字,用漢字進行變量定義和賦初值、代替數進行加減運算。
(數據范圍定在099。010的數直接表示。1119的數用“十x”表示。2099的數用“x十x表示”

分解需求:

分解為三個模塊(即 exchange函數、cum函數、back函數)


exchange函數 用於將漢字轉換成數字進行加減運算和輸出。

int exchange(char s4[])
{
    char b[11][4]={"零","一","二","三","四","五","六","七","八","九","十"};
    for(int i=0;i<=10;i++){
    if( !strcmp(s4,b[i]) ) return i;
    }
}

cum函數 用於判斷進行的運算 並據此將exchange得到的數進行正負轉換 和原始數相加減。

int cum(char s3[],char s4[]){
    if( !strcmp(s3,"增加") ) { return exchange(s4); }
    if( !strcmp(s3,"減少") ) { return -exchange(s4); } 
}

back函數用於輸出 將數字轉換為漢字形式 並在輸出時根據數據范圍進行不同格式輸出。

int back(int wal){
    char a[10][4]={"零","一","二","三","四","五","六","七","八","九"};
    if( wal >= 10 && wal <= 99){
        int x = wal%10;
        wal/=10;
        if(wal!=1) 
            printf("%s十%s",a[wal],a[x]);
        else    
            printf("十%s",a[x]);
    }
    else printf("%s",a[wal]);
}

###解釋: - 單元測試:對每一個函數進行測試,這代表了你需要把代碼分到不同的文件,使用不同的主函數切換測試/運行。 - 編譯腳本:運行該腳本后無需任何輸入就能自動編譯全部代碼,並輸出編譯結束的代碼。 - 測試腳本:運行該腳本后可以自動的編譯並運行所有測試樣例,並輸出測試結果。
**對 exchange函數 進行測試**
- 測試函數
int main(){
	int x,y;
	char str1[100],str2[100];
	char s[11][4] = {"零","一","二","三","四","五","六","七","八","九","十"}; 
	printf("exchange函數測試:\n");
	freopen("Test1.txt","r",stdin); 
	while (scanf ("%s",str1) != EOF){
		y = exchange(str1);
		if (!strcmp(str1,s[y]))
		printf ("%d pass\n",y);
		else printf ("error\n");
	}
}
  • 編譯腳本





  • 測試腳本
    使用freopen函數,編譯后自動運行



    對 cum函數進行測試:

  • 測試函數
int main(){
	int x,y;
	char str2[100];
	printf("cum函數測試:\n");
	freopen("Test2.txt","r",stdin);
		while (scanf("%s %d",str2,&x) != EOF){
			if (strcmp(str2,"增加") && strcmp(str2,"減少")) {
			printf ("error\n"); continue;
			}
			y = cum(str2,x);
			if (!strcmp(str2,"增加")){
				if (y >= 0)
				printf ("%d  pass\n",y); 
				else printf("error\n");}
			else if (!strcmp(str2,"減少")){
				if (y <= 0) 
				printf ("%d  pass\n",y); 
				else printf ("error\n"); } 
		}
	// 測試 cum 函數
}
  • 編譯腳本:
    與 Test1 編譯腳本類似。


    -測試腳本


對整個程序測試:


![](https://img2018.cnblogs.com/blog/1925094/202002/1925094-20200213151935422-716982975.png) ![](https://img2018.cnblogs.com/blog/1925094/202002/1925094-20200213152049957-386095753.png) ![](https://img2018.cnblogs.com/blog/1925094/202002/1925094-20200213152100457-709609668.png) ![](https://img2018.cnblogs.com/blog/1925094/202002/1925094-20200213152114182-141741357.png)

思考:

1.加入負數情況
若輸入的漢字前有負,可以先將漢字轉為阿拉伯數字。
再判斷增加減少,進而轉到cum函數進行計算。


以上就是我第三次作業的全部內容。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM