1. 程式人生 > >第十一周編程總結

第十一周編程總結

total 否則 main 其中 scanf 解決方案 ++ include 設計

第十一周編程總結

題目1:11-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;

scanf("%d",&n);

for(int i = 1;i <=n ;i++){

for(int j = 1;j <= i;j++){

if(i * j >= 10){

printf("%d*%d=%d ", j, i, j * i); //2格

}

else{

printf("%d*%d=%d ", j, i, j * i);//3格

}

}

printf("\n");

}

return 0;

}

2).設計思路

第一步 考慮到使用嵌套語句循環,輸入一個整數

第二步 定義i從1開始循環到n停止

第三步 定義一個j從1開始循環到i停止

第四步 格式化輸出,當i和j的成績大於10的時候要空2格,否則空3格

3)本題調試中遇到的問題及解決方案

在輸出乘法表的時候出現空格問題,不知道如何去打印

4).運行結果截圖

題目2:11-2 換硬幣 (20 分)

將一筆零錢換成5分、2分和1分的硬幣,要求每種硬幣至少有一枚,有幾種不同的換法?

1).實驗代碼

#include<stdio.h>

int main()

{

int x,count=0;

scanf("%d",&x);

for ( int k = x / 5; k > 0; k-- )

for ( int i = x / 2; i > 0; i-- )

for ( int j = x; j > 0; j-- )

if(k*5+i*2+j==x){

printf("fen5:%d, fen2:%d, fen1:%d, total:%d\n", k, i, j, k + j + i);

count++;

}

printf("count = %d",count);

return 0;

}

2).設計思路

第一步 輸入零錢x

第二步 使用嵌套循環定義一個k從x/5開始循環,定義一個i從i/2開始循環,定義一個j從x開始循環,不斷累減

第三步 當滿足k*5+i*2+j==x條件時進行輸出,此時就是對應的硬幣數

4).運行結果截圖

題目3:11-3 找完數 (20 分)

所謂完數就是該數恰好等於除自身外的因子之和。例如:6=1+2+3,其中1、2、3為6的因子。本題要求編寫程序,找出任意兩正整數mn之間的所有完數。

1).實驗代碼

#include<stdio.h>

int main(){

int n,m,i,j,sum,num=0;

scanf("%d %d",&m,&n);

for(i=m;i<=n;i++){

if(i==1) continue;

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).設計思路

第一步 輸入2個數m、n

第二步 i從m開始循環到n結束,定義的j從2開始循環到i停止不斷累加

第三步 用sum來累加能整出的數

第四步 如果sum==i說明完數只有1

3)本題調試中遇到的問題及解決方案

嵌套循環次數使用的次數過多,自己都有點暈

4).運行結果截圖

第十一周編程總結