1. 程式人生 > >2017-2018-1 20179215 《從問題到程序》第一章

2017-2018-1 20179215 《從問題到程序》第一章

執行 告訴 重要 都是 mark clas 混淆 code print

《從問題到程序》第一章

?這一章主要強調了分析問題的能力,告訴我們如何學會寫程序,以及在程序編寫過程中要學會檢查程序錯誤的能力。

?想通過分析一個程序來逐步掌握程序設計的思維及方法。

?題目是這樣的:有一個不超過3位的數,現在要求按指定格式輸出,例如312就輸出:BBBS1(即百位數上是幾就輸出幾個B,十位類似,之後輸出從1到小於個位數字的序列)。

?剛開始入手這個題,我的思路很直接,scanf一個數n,然後就從百位數字依次開始判斷,裏面用一個for循環來依次輸出‘S‘,‘B‘,但這個過程卻很困難,因為首先我相當於只有一個變量就是我輸入的這個數,其它的一切判斷都是基於這一個數來進行運算的,很容易混淆當前的n是什麽,其次就是我輸入的這個數要能很好的辨別它是個幾位數然後進入相應的循環條件裏輸出,最後就是循環終止條件很重要,我中間一度執行時不停輸出停不下來,就是終止條件沒想好。最終我的代碼實現是這樣的:

int main(){
int i,n,c,s;
scanf("%d",&n);
while(n/100>10){   //這是判斷這個數是否是個不超過三位的數
    printf("error");
    n=-1;
}
while((n/10)!=0){ //首先判斷這個數是有一位還是2-3位,作為循環終止條件
 if(n/100!=0){    //三位數的時候
    c=n/100;
    for(i=0;i<c;i++){
        printf("B");
    }
    n=n%100;
    }
else if(n/10!=0){   //兩位數的時候
        s=n/10;
        for(i=0;i<s;i++){
        printf("S");
        }
    n=n/10; 
      }
  }
  while(n/10==0) {  //只有一位數的時候,作為循環終止條件
        for(i=1;i<=n%10;i++){
        printf("%d",i);
        }
     break;   
    }   
 }

?後來我想這麽實現實在是太繞了,有沒有簡單點的方法,其實沒有必要一位一位的判斷輸出,直接用個數組把每一位的數字存進去,然後用嵌入的for循環輸出‘S‘,‘B‘和數字就可以了。

?比較看來用數組實現的方法快速簡單許多,這就看出程序設計的不同實現方法了,以後我要更學會用一直程序結構來簡化問題,不要單刀直入費時費力。最後程序設計的關鍵我認為就是我們如何切入問題角度,把握整體思路,然後細化工作細節,排查錯誤,優化代碼。

2017-2018-1 20179215 《從問題到程序》第一章