第十週程式設計總結
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).本題除錯過程碰到的問題及解決方法
-
問題:在呼叫
解決方法:賦值給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).執行結果截圖