2020面向對象程序設計寒假作業3 題解
作業描述 | 作業詳情 |
---|---|
這個作業屬於哪個課程 | 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 編譯腳本類似。
-測試腳本
對整個程序測試:
   
思考:
1.加入負數情況
若輸入的漢字前有負,可以先將漢字轉為阿拉伯數字。
再判斷增加減少,進而轉到cum函數進行計算。
以上就是我第三次作業的全部內容。