面向對象程序設計寒假做業1編程題

這個做業屬於哪一個課程 2020年面向對象程序設計 (福州大學 - 數學與計算機科學學院)
這個做業要求在哪裏 面向對象程序設計寒假做業1
這個做業的目標 1.安裝C++開發環境(見附錄)
2.完成問答題、實踐題及編程題
3.發佈博客
做業正文 面向對象程序設計寒假做業1問答題
面向對象程序設計寒假做業1實踐題
面向對象程序設計寒假做業1編程題
其餘參考文獻 均已在問答題、實踐題中標出

#編程題 ###<font color=Blue>1.題目要求:</font><br/> <font face="黑體">經過漢字「整數」、「錢包」、「看看」、「增長」、「減小」實現白話文編程。注意錢包總額範圍爲零至九十九。</font><br/> ###<font color=Blue>2.分解需求:</font><br/> <font face="黑體">經過讀題可知,本題包含三個方面: (1)定義整數變量「錢包」,並對其進行初始化; (2)輸入「增長」、「減小」的指令,對錢包總額進行變化; (3)經過「看看 錢包」,輸出錢包總額。</font><br/> ###<font color=Blue>3.思考過程及疑惑</font><br/> <font face="黑體">首先,我打算把其分爲四塊進行,由main函數、負責錢包總額初始化的函數、負責錢包總額增減的函數以及輸出錢包總額的函數構成。 如下爲錢包總額初始話的函數代碼:</font><br/>html

int beginning(int wallet,char d[]){
    if(strcmp(d,"零")==0) return 0;  //這裏使用strcmp函數時,當字符串相同時,返回值應爲0,一開始
    else if(strcmp(d,"一")==0) return 1;    //覺得是1,故得不出結果,必定要注意!!
    else if(strcmp(d,"二")==0) return 2;
    else if(strcmp(d,"三")==0) return 3;
    else if(strcmp(d,"四")==0) return 4;
    else if(strcmp(d,"五")==0) return 5;
    else if(strcmp(d,"六")==0) return 6;
    else if(strcmp(d,"七")==0) return 7;
    else if(strcmp(d,"八")==0) return 8;
    else if(strcmp(d,"九")==0) return 9;
    else if(strcmp(d,"十")==0) return 10;
    else return -1;
    }

<font face="黑體">這裏我採起枚舉的方法,可是代碼會顯得很冗長,有沒有其餘更簡便的方法呢? 對於負責錢包總額增減的函數的部分,我採用在main函數中判斷,若字符串c爲「增長」,則進行 </font><br/>編程

wallet+=calculate(wallet,d);

<font face="黑體">同理,若字符串c爲「減小」,則進行 </font><br/>函數

wallet-=calculate(wallet,d);

<font face="黑體">原本一開始是打算將增長與減小分別寫一個函數的,可是後來發現用if語句進行判斷,更加簡潔,下面爲個人函數主體代碼:</font><br/>學習

int calculate(int wallet,char d[]){
      if(strcmp(d,"零")==0) return 0;
      else if(strcmp(d,"一")==0) return 1;
      else if(strcmp(d,"二")==0) return 2;
      else if(strcmp(d,"三")==0) return 3;
      else if(strcmp(d,"四")==0) return 4;
      else if(strcmp(d,"五")==0) return 5;
      else if(strcmp(d,"六")==0) return 6;
      else if(strcmp(d,"七")==0) return 7;
      else if(strcmp(d,"八")==0) return 8;
      else if(strcmp(d,"九")==0) return 9;
        else if(strcmp(d,"十")==0) return 10;
      else return -1;
}

<font face="黑體">對於輸出錢包總額的函數這個部分,一開始我打算在函數中分三種狀況討論,而後再在每一種狀況中枚舉出1-10種狀況,然後發現這樣作過於冗長,故此再寫了一個函數負責1-10漢字輸出,而在輸出錢包總額函數中的三種狀況調用此函數。以下:</font><br/>測試

void num(int i){
    if(i==0) printf("零");
    else if(i==1) printf("一");
    else if(i==2) printf("二");
    else if(i==3) printf("三");
    else if(i==4) printf("四");
    else if(i==5) printf("五");
    else if(i==6) printf("六");
    else if(i==7) printf("七");
    else if(i==8) printf("八");
    else if(i==9) printf("九");
    else if(i==10) printf("十");
}
void sum(int wallet){
    int a,b;
    if(wallet<=10){num(wallet);}
    else if(wallet<20){
        a=wallet%10;
        printf("十");
        num(a);
    }
    else{
        a=wallet/10;
        b=wallet%10;
        num(a);
        printf("十");
       if(b!=0) num(b); /*這一步我認爲比較重要,由於假如錢包總額
                                      正好被十整除,按照咱們中文習慣,是不會
                                      打出零的,好比20->二十而非二十零,故我
                                      認爲這步判斷不可或缺。*/
    }
}

<font face="黑體">對於main函數部分,代碼見下:</font><br/>設計

int main() {
    char a[100],b[100],c[100],d[100];
    int wallet=0,i,flag=0;
    scanf("%s %s %s %s",a,b,c,d);
    if(strcmp(a,"整數")!=0||strcmp(c,"等於")!=0) flag=1;
    for(i=1;flag==0;i++){
        if(i==1) wallet=beginning(wallet,d);
        else {
            scanf("%s",a);
            if(strcmp(a,b)!=0&&strcmp(a,"看看")!=0) break;
            scanf("%s",c);
            if(strcmp(a,"看看")==0){
                sum(wallet);
                break;}
            scanf("%s",d);
         if(strcmp(c,"增長")==0) wallet+=calculate(wallet,d);
         if(strcmp(c,"減小")==0) wallet-=calculate(wallet,d);
        }
    }
   return 0;
}

總代碼以下:code

#include <stdio.h>
#include <string.h>
int beginning(int wallet,char d[]){
    if(strcmp(d,"零")==0) return 0;
    else if(strcmp(d,"一")==0) return 1;
    else if(strcmp(d,"二")==0) return 2;
    else if(strcmp(d,"三")==0) return 3;
    else if(strcmp(d,"四")==0) return 4;
    else if(strcmp(d,"五")==0) return 5;
    else if(strcmp(d,"六")==0) return 6;
    else if(strcmp(d,"七")==0) return 7;
    else if(strcmp(d,"八")==0) return 8;
    else if(strcmp(d,"九")==0) return 9;
    else if(strcmp(d,"十")==0) return 10;
    else return -1;
}
int calculate(int wallet,char d[]){
      if(strcmp(d,"零")==0) return 0;
      else if(strcmp(d,"一")==0) return 1;
      else if(strcmp(d,"二")==0) return 2;
      else if(strcmp(d,"三")==0) return 3;
      else if(strcmp(d,"四")==0) return 4;
      else if(strcmp(d,"五")==0) return 5;
      else if(strcmp(d,"六")==0) return 6;
      else if(strcmp(d,"七")==0) return 7;
      else if(strcmp(d,"八")==0) return 8;
      else if(strcmp(d,"九")==0) return 9;
      else if(strcmp(d,"十")==0) return 10;
      else return -1;
}
void num(int i){
    if(i==0) printf("零");
    else if(i==1) printf("一");
    else if(i==2) printf("二");
    else if(i==3) printf("三");
    else if(i==4) printf("四");
    else if(i==5) printf("五");
    else if(i==6) printf("六");
    else if(i==7) printf("七");
    else if(i==8) printf("八");
    else if(i==9) printf("九");
    else if(i==10) printf("十");
}
void sum(int wallet){
    int a,b;
    if(wallet<=10){num(wallet);}
    else if(wallet<20){
        a=wallet%10;
        printf("十");
        num(a);
    }
    else{
        a=wallet/10;
        b=wallet%10;
        num(a);
        printf("十");
       if(b!=0) num(b);
    }
}

int main() {
    char a[100],b[100],c[100],d[100];
    int wallet=0,i,flag=0;
    scanf("%s %s %s %s",a,b,c,d);
    if(strcmp(a,"整數")!=0||strcmp(c,"等於")!=0) flag=1;
    for(i=1;flag==0;i++){
        if(i==1) wallet=beginning(wallet,d);
        else {
            scanf("%s",a);
            if(strcmp(a,b)!=0&&strcmp(a,"看看")!=0) break;
            scanf("%s",c);
            if(strcmp(a,"看看")==0){
                sum(wallet);
                break;}
            scanf("%s",d);
         if(strcmp(c,"增長")==0) wallet+=calculate(wallet,d);
         if(strcmp(c,"減小")==0) wallet-=calculate(wallet,d);
        }
    }
   return 0;
}

###<font color=Blue>4.測試用例</font><br/> <img src="https://img2018.cnblogs.com/blog/1925083/202001/1925083-20200125221658092-636310818.png" width="75%" height="75%"> <img src="https://img2018.cnblogs.com/blog/1925083/202001/1925083-20200125221714213-65593406.png" width="75%" height="75%"> <img src="https://img2018.cnblogs.com/blog/1925083/202001/1925083-20200125221724026-495661679.png" width="75%" height="75%"> <img src="https://img2018.cnblogs.com/blog/1925083/202001/1925083-20200125221732610-1934571047.png" width="75%" height="75%">htm

###<font color=Blue>5.疑惑及解決</font><br/> <font face="黑體">對象

  • 在解決這一題,我使用枚舉的方法將0-10所有寫出來,是否有更簡便的方法能夠替換這種枚舉的方法;
  • 在這一過程當中,我嘗試了用scanf函數與gets函數,並比較了二者的不一樣,能夠在從此的學習中分狀況不一樣從而進行使用
  • 本次使用了strcmp函數,而且注意到了,當兩個字符串相同時,其返回值爲0,而並不是1,這之後必定會注意!! </font><br/>
相關文章
相關標籤/搜索