第十一周编程总结
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,j;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
for(j=1;j<=i;j++)
{
printf("%d*%d=%-4d",j,i,i*j);
}
printf("\n");/*换行*/
}
return 0;
}
2)设计思路
1.使用嵌套循环,定义n
2.外层循环for(i=1;i<=n;i++)
3.内层循环for(j=1;j<=i;j++),输出printf("%d*%d=%-4d",j,i,i*j);
4.换行
5.返回主函数
3)本题调试过程碰到问题及解决办法
不知道怎么表示等号右边数字占4位、左对齐。后来百度了(%-4d)左对齐,不足4位右边补空格,超过4位,原样输出。如果没有前面的负号,那么表示右对齐,不足四位左边补齐空格;现在加了个负号,就是表示左对齐
4)运行结果截图
7-2 换硬币 (20 分)
将一笔零钱换成5分、2分和1分的硬币,要求每种硬币至少有一枚,有几种不同的换法?
1)实验代码
#include<stdio.h>
int main()
{
int x,m5,m2,m1,count=0;
scanf("%d",&x);
for(m5=x/5;m5>0;m5--) {
for(m2=x/2;m2>0;m2--) {
for(m1=x/1;m1>0;m1--) {
if(m5*5+m2*2+m1*1==x) {
printf("fen5:%d, fen2:%d, fen1:%d, total:%d\n",m5,m2,m1,m5+m2+m1);
count++;
}
}
}
}
printf("count = %d",count);
return 0;
}
2)设计思路
1.定义变量
2.用三个for循环判断5分、2分、1分硬币的换法
3.判断所换得的金额与原金额是否相等
4.种类累加
5.输出答案
6.返回主函数
3)本题调试过程碰到问题及解决办法
换法考虑不周全,格式有问题
4)运行结果截图
7-3 找完数 (20 分)
所谓完数就是该数恰好等于除自身外的因子之和。例如:6=1+2+3,其中1、2、3为6的因子。本题要求编写程序,找出任意两正整数m和n之间的所有完数。
1)实验代码
#include<stdio.h>
int main ()
{
int m,n,i,j,sum,num=0;
scanf("%d%d",&m,&n);
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);
num++;
printf("\n");
}
}
if(num==0)
printf("None\n");
return 0;
}
2)设计思路
1.定义变量
2.for循环for(i=m;i<=n;i++),定义sum=1(因为i每变化一次,sum重置为1)
3.循环,判断1个数从1开始到自身中的数能否被整除,如果能就累加
4.判断累加数之和sum是否等于i
5.if(sum==i)为真就输出(%d = 1),因为每一项都是从1开始的
6.循环,判断1个数从1开始到自身中的数能否被整除,能就输出因子
7.出现完数的个数累加num++
8.换行
9.判断完数个数,为0就输出None
10.返回主函数
3)本题调试过程碰到问题及解决办法
刚开始不会写,后来百度,一边调试一边看过程,直到弄懂
4)运行结果截图