资源描述
猴子第一天摘了若干个桃子,当即吃了一半,还不解馋,又多吃了一个;第二天,吃剩下的桃子的一半,还不过瘾,又多吃了一个;以后每天都吃前一天剩下的一半多一个,到第10天想再吃时,只剩下一个桃子了。问第一天共摘了多少个桃子?
分析
1) 设x1为前一天桃子数,设x2为第二天桃子数, 则:
x2=x1/2-1, x1=(x2+1)*2
x3=x2/2-1, x2=(x3+1)*2
以此类推: x前=(x后+1)*2
2) 从第10天可以类推到第1天,是一个循环过程。
程序如下:
1. #include <stdio.h>
2. #include <stdlib.h>
3.
4. int main(){
5. int day, x1, x2;
6. day=9;
7. x2=1;
8. while(day>0) {
9. x1=(x2+1)*2; // 第一天的桃子数是第2天桃子数加1后的2倍
10. x2=x1;
11. day--;
12. }
13. printf("the total is %d\n",x1);
14.
15. return 0;
16. }
运行结果:
the total is 1534
3对情侣参加婚礼,3个新郞为A、B、C,3个新娘为X、Y、Z,有人不知道谁和谁结婚,于是询问了6位新人中的3位,但听到的回答是这样的:A说他将和X结婚;X说她的未婚夫是C; C说他将和Z结婚。这人听后知道他们在开玩笑,全是假话。请编程找出谁将和谁结婚。
算法分析
将A、B、C这3人用 1、2、3 表示,将X和A结婚表示为“X=1”,将Y不与A结婚表示为“Y!=1”。按照题目中的叙述可以写出表达式:
· x!=1 A不与X结婚
· x!=3 X的未婚夫不是C
· z!=3 C不与Z结婚题意还隐含着X、Y、Z这3个新娘不能结为配偶,则有:x!=y 且x!=z且y!=z,穷举以上所有可能的情况,代入上述表达式中进行推理运算,若假设的情况使上述表达式的结果均为真,则假设情况就是正确的结果。
根据算法分析,可以利用计算机程序对这些情况进行穷举,然后得出正确的结果。
根据算法分析,该问题的程序实现如下:
1. #include <stdio.h>
2.
3. void Marry(void);
4.
5. int main(){
6. Marry();
7.
8. return 0;
9. }
10.
11. void Marry(){
12. int x, y, z;
13. for (x=1;x<=3;x++) //穷举x的全部可能配偶
14. for (y=1;y<=3;y++) //穷举y的全部可能配偶
15. for(z=1;z<=3;z++) //穷举z的全部可能配偶
16. if (x!=1 && x!=3 && z!=3 && x!=y && x!=z && y!=z){ //判断配偶是否满足题意
17. printf ("X和%c结婚\n", 'A'+x-1); //打印判断结果
18. printf ("Y和%c结婚\n", 'A'+y-1);
19. printf ("Z和%c结婚\n", 'A'+z-1);
20. }
21. }
运行结果:
X和B结婚
Y和C结婚
Z和A结婚
怎么用循环输出以下图形:
*
***
*****
*******
*****
***
*
main()
{
int i,j,k;
for(i=0;i<=3;i++)
{
for(j=0;j<=2-i;j++)
printf(" ");
for(k=0;k<=2*i;k++)
printf("*");
printf("\n");
}
for(i=0;i<=2;i++)
{
for(j=0;j<=i;j++)
printf(" ");
for(k=0;k<=4-2*i;k++)
printf("*");
printf("\n");
}
}
打印菱形
#include"stdio.h"
int main(void){
int i,j,k;
for(i=0;i<=3;i++) { // 循环4次,打出前4行
for(j=0;j<=2-i;j++)//设定每行*前面的空格,每行都是2-i个
printf(" ");
for(k=0;k<=2*i;k++)//循环打出2*i-1个*号,
printf("*");
printf("\n"); //打完一行后换行
}
for(i=0;i<=2;i++) {//循环3次,打出后3行
for(j=0;j<=i;j++)//设定每行*前面的空格,每行都是i个
printf(" ");
for(k=0;k<=4-2*i;k++)//循环打出2*(2-i)个*号
printf("*");
printf("\n"); //打完一行后换行
}
return 0;
九九乘法表共9行9列,重点考察for循环的掌握情况。
下面给出了输出完整乘法表、右上、右下、左上、左下乘法表的代码。
【代码一】输出完整的三角形:
#include <stdio.h>
int main() {
int i,j; // i, j控制行或列
for(i=1;i<=9;i++) {
for(j=1;j<=9;j++)
// %2d 控制宽度为两个字符,且右对齐;如果改为 %-2d 则为左对齐
// \t为tab缩进
printf("%d*%d=%2d\t", i, j, i*j);
printf("\n");
}
return 0;
}
运行结果:
1*1= 1 1*2= 2 1*3= 3 1*4= 4 1*5= 5 1*6= 6 1*7= 7 1*8= 8 1*9= 9
2*1= 2 2*2= 4 2*3= 6 2*4= 8 2*5=10 2*6=12 2*7=14 2*8=16 2*9=18
3*1= 3 3*2= 6 3*3= 9 3*4=12 3*5=15 3*6=18 3*7=21 3*8=24 3*9=27
4*1= 4 4*2= 8 4*3=12 4*4=16 4*5=20 4*6=24 4*7=28 4*8=32 4*9=36
5*1= 5 5*2=10 5*3=15 5*4=20 5*5=25 5*6=30 5*7=35 5*8=40 5*9=45
6*1= 6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36 6*7=42 6*8=48 6*9=54
7*1= 7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49 7*8=56 7*9=63
8*1= 8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64 8*9=72
9*1= 9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81
【代码二】输出右上三角形和左上三角形:
#include <stdio.h>
int main() {
int i,j;
for(i=1;i<=9;i++){
for(j=1;j<=9;j++){
if(j<i)
//打印八个空格,去掉空格就是左上三角形
printf(" ");
else
printf("%d*%d=%2d ",i,j,i*j);
}
printf("\n");
}
return 0;
}
运行结果:
1*1= 1 1*2= 2 1*3= 3 1*4= 4 1*5= 5 1*6= 6 1*7= 7 1*8= 8 1*9= 9
2*2= 4 2*3= 6 2*4= 8 2*5=10 2*6=12 2*7=14 2*8=16 2*9=18
3*3= 9 3*4=12 3*5=15 3*6=18 3*7=21 3*8=24 3*9=27
4*4=16 4*5=20 4*6=24 4*7=28 4*8=32 4*9=36
5*5=25 5*6=30 5*7=35 5*8=40 5*9=45
6*6=36 6*7=42 6*8=48 6*9=54
7*7=49 7*8=56 7*9=63
8*8=64 8*9=72
9*9=81
去掉八个空格后的运行结果:
1*1= 1 1*2= 2 1*3= 3 1*4= 4 1*5= 5 1*6= 6 1*7= 7 1*8= 8 1*9= 9
2*2= 4 2*3= 6 2*4= 8 2*5=10 2*6=12 2*7=14 2*8=16 2*9=18
3*3= 9 3*4=12 3*5=15 3*6=18 3*7=21 3*8=24 3*9=27
4*4=16 4*5=20 4*6=24 4*7=28 4*8=32 4*9=36
5*5=25 5*6=30 5*7=35 5*8=40 5*9=45
6*6=36 6*7=42 6*8=48 6*9=54
7*7=49 7*8=56 7*9=63
8*8=64 8*9=72
9*9=81
【代码三】输出右下和左下三角形:
#include <stdio.h>
int main(){
int i,j,n;
for(i=1;i<=9;i++){
// 将下面的for循环注释掉,就输出左下三角形
for(n=1; n<=9-i; n++)
printf(" ");
for(j=1;j<=i;j++)
printf("%d*%d=%2d ",i,j,i*j);
printf("\n");
}
return 0;
}
运行结果:
1*1= 1
2*1= 2 2*2= 4
3*1= 3 3*2= 6 3*3= 9
4*1= 4 4*2= 8 4*3=12 4*4=16
5*1= 5 5*2=10 5*3=15 5*4=20 5*5=25
6*1= 6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36
7*1= 7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49
8*1= 8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64
9*1= 9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81
去掉循环后的运行结果:
1*1= 1
2*1= 2 2*2= 4
3*1= 3 3*2= 6 3*3= 9
4*1= 4 4*2= 8 4*3=12 4*4=16
5*1= 5 5*2=10 5*3=15 5*4=20 5*5=25
6*1= 6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36
7*1= 7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49
8*1= 8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64
9*1= 9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81
题目:输出9*9乘法口诀表
1.程序分析:分行与列考虑,共9行9列,i控制行,j控制列。
2.程序源代码:
#include "stdio.h"
#include "conio.h"
main()
{
int i,j,result;
printf("\n");
for (i=1;i<10;i++)
{
for(j=1;j<10;j++)
{
result=i*j;
printf("%d*%d=%-3d",i,j,result); /*-3d表示左对齐,占3位*/
}
printf("\n"); /*每一行后换行*/
}
getch();
}
展开阅读全文