第十一周编程总结
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).运行结果截图