1. 程式人生 > >第十週程式設計總結

第十週程式設計總結

7-1 求奇數和 (15 分)

本題要求計算給定的一系列正整數中奇數的和。

1).實驗程式碼

#include<stdio.h>

int main()

{

  int N,sum,i;

  i=1;

  sum=0;

  scanf("%d",&N);

  while(N>0){

    if(N%2!=0){

      

      sum+=N;

      scanf("%d",&N);

    }

    

    else {

      scanf("%d",&N);

      

    }

  }

  

  printf("%d",sum);

  return 0;

  

 

}

2). 設計思路

第一步:定義變數

第二步:輸入變數

第三步:呼叫while語句,判斷奇數,累加奇數

第四步:輸出答案

 

3).本題除錯過程碰到的問題及解決方法

            

 

-

 

 

 

        問題:在呼叫

while語句前,沒有給N賦值

       解決方法:賦值給N

 

       4).執行結果截圖

  

      

 

7-3 韓信點兵 (10 分)

在中國數學史上,廣泛流傳著一個“韓信點兵”的故事:韓信是漢高祖劉邦手下的大將,他英勇善戰,智謀超群,為漢朝建立了卓越的功勞。據說韓信的數學水平也非常高超,他在點兵的時候,為了知道有多少兵,同時又能保住軍事機密,便讓士兵排隊報數:

· 按從1至5報數,記下最末一個士兵報的數為1;

· 再按從1至6報數,記下最末一個士兵報的數為5;

· 再按從1至7報數,記下最末一個士兵報的數為4;

· 最後按從1至11報數,最末一個士兵報的數為10;

請編寫程式計算韓信至少有多少兵。

1)實驗程式碼

 

#include<stdio.h>

int main()

{

  int N=0;

  while((N%5!=1)||(N%6!=5)||(N%7!=4)||(N%11!=10)){

    N++;

  }

  

  printf("%d\n",N);

  return 0;

}

2).設計思路

第一步:定義變數

第二步:呼叫while語句進行兵數判斷

第三步:輸出答案

3) .本題除錯過程碰到的問題及解決方法

           

               

 

 

          問題:while語句的條件使用錯誤

          解決方法:更改條件

       4).執行結果截圖

 

 

 

 

7-2 求整數的位數及各位數字之和 (15 分)

對於給定的正整數N,求它的位數及其各位數字之和。

1).實驗程式碼

#include<stdio.h>

int main()

{

  int number=0,N,sum=0,amount=0;

  scanf("%d",&N);

  while(N!=0){

    number=N%10;

    N=N/10;

    sum+=number;

    amount++;

  }

  

  printf("%d %d",amount,sum);

  return 0;

  

}

2).設計思路

第一步:定義變數

第二步:輸入變數

第三步:呼叫while語句,進行迴圈

第四步:取餘得到個位數,取整賦值,得到除個位數的其他位數,繼續取餘得到其他位數,累加各位數字,計算位數

第五步:輸出答案

3).本題除錯過程碰到的問題及解決方法

 

 

 

 

 

問題:變數沒有初始化

解決方法:將變數初始化

4).執行結果截圖

         

 

7-4 整除光棍 (20 分)

這裡所謂的“光棍”,並不是指單身汪啦~ 說的是全部由1組成的數字,比如1、11、111、1111等。傳說任何一個光棍都能被一個不以5結尾的奇數整除。比如,111111就可以被13整除。 現在,你的程式要讀入一個整數x,這個整數一定是奇數並且不以5結尾。然後,經過計算,輸出兩個數字:第一個數字s,表示x乘以s是一個光棍,第二個數字n是這個光棍的位數。這樣的解當然不是唯一的,題目要求你輸出最小的解。

提示:一個顯然的辦法是逐漸增加光棍的位數,直到可以整除x為止。但難點在於,s可能是個非常大的數 —— 比如,程式輸入31,那麼就輸出3584229390681和15,因為31乘以3584229390681的結果是111111111111111,一共15個1。

2).實驗程式碼

#include<stdio.h>

int main()/*模擬豎式計算*/

{

int m,n,dividend=1,i=0,t,count=0;

scanf("%d",&m);

while(1){

t=dividend/m;      //t是商

dividend%=m;       //取餘

count++;           //每次迴圈計算位數

    if(i||t){          //等價於if(i!=0||t!=0),排除一開始商是0的情況,判斷條件千萬不能用商,商有0狀態

     printf("%d",t);

     i=1;

}

if(dividend==0){

printf(" %d\n",count);   //餘數為0,結束迴圈,輸出結果

break;

}

dividend=dividend*10+1;      //模擬被除數為 “光棍 ”

}

 

return 0;

}

2). 設計思路

第一步:模擬豎式計算,定義變數

第二步:輸入變數

第三步:呼叫while語句進行無限迴圈,取商,取餘,每次迴圈計算位數

第四步:排除一開始商是0的情況,

第五步:輸出商的值

第六步:當餘數為零時結束迴圈,列印光棍位數

 

 

3).本題除錯過程碰到的問題及解決方法

 

        問題:沒有考慮到商有0的狀態

       解決方法:再定義一個變數,排除商有0的情況而導致無法列印

       4).執行結果截圖