第十一週程式設計總結
7-1 列印九九口訣表 (15 分)
下面是一個完整的下三角九九口訣表:
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
本題要求對任意給定的一位正整數N,輸出從1*1到N*N的部分口訣表
1).實驗程式碼
#include<stdio.h>
int main()
{
int N,i,k,j;
scanf("%d",&N);
for(i=1;i<=N;i++){
for(k=1;k<=i;k++){
printf("%d*%d=%-4d",k,i,i*k);
}
printf("\n");
}
return 0;
}
2). 設計思路
第一步:定義變數
第二步:輸入變數
第三步:呼叫for語句,判斷行列的變數
第四步:列印乘法表
3).本題除錯過程碰到的問題及解決方法
問題:沒有注意等號右邊數字佔的位數與對齊方向
解決方法:將%d更改為%-d
4).執行結果截圖
7-2 換硬幣 (20 分)
將一筆零錢換成5分、2分和1分的硬幣,要求每種硬幣至少有一枚,有幾種不同的換法?
1)實驗程式碼
#include<stdio.h>
int main()
{
int n,k,j,m,count=0,i;
scanf("%d",&n);
for(i=n/5;i>0;i--){
for(j=n/2;j>0;j--){
for(k=n;k>0;k--){
if(i*5+j*2+k==n){
printf("fen5:%d, fen2:%d, fen1:%d, total:%d\n",i,j,k,i+j+k);
count++;
}
}
}
}
printf("count = %d",count);
return 0;
}
2).設計思路
第一步:定義變數
第二步:輸入變數
第三步:呼叫for語句進行考慮5分、2分、1分的換法
第四步:判斷所換得金額是否與輸入的原金額相同
第五步:輸出答案
3) .本題除錯過程碰到的問題及解決方法
問題:換法考慮不全
解決方法:進行多維思考
4).執行結果截圖
7-3 找完數 (20 分)
所謂完數就是該數恰好等於除自身外的因子之和。例如:6=1+2+3,其中1、2、3為6的因子。本題要求編寫程式,找出任意兩正整數m和n之間的所有完數。
1).實驗程式碼
#include<stdio.h>
int main()
{
int n,m,sum=0,j,i,num=0;
scanf("%d %d",&m,&n);
if(1<m<=n<=10000){
for(i=m;i<=n;i++){
sum=1;
for(j=2;j<i;j++){
if(i%j==0) sum+=j;
}
if(sum==i){
printf("%d = 1",i);
for(j=2;j<i;j++)
if(i%j==0)
printf(" + %d",j);
printf("\n");
num++;
}
}
if(num==0) printf("None\n");
}
return 0;
}2).設計思路
第一步:定義變數
第二步:輸入變數
第三步:呼叫if語句,判斷輸入的的變數是否滿足題目要求
第四步:呼叫for語句尋找因子
第五步:判斷因子的和是否與原數相等
第六步:輸出答案
3).本題除錯過程碰到的問題及解決方法
問題:沒有考慮題目要求輸入的值的範圍
解決方法:呼叫if語句判斷輸入的值是否滿足題目要求
4).執行結果截圖