【程序21】
题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个
的一半零一个。到第 10 天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
1. 程序分析:采取逆向思维的方法,从后往前推断。
2.程序源代码:
#include<stdio.h> int main() { int day = 9, x1, x2 = 1; while(day > 0) { x1 = (x2+1) * 2; x2 = x1; day--; } printf("%d" , x1); return 0; }
【程序22】
题目:两个乒乓球队进行比赛,各出三人。甲队为
a,b,c
三人,乙队为
x,y,z
三人。已抽签决定
比赛名单。有人向队员打听比赛的名单。 a 说他不和 x 比, c 说他不和 x,z 比,请编程序找出
三队赛手的名单。
1. 程序分析:
2.程序源代码:
#include<stdio.h> int main() { char i, j, k; //i-a j-b k-c for(i = 'x'; i <= 'z'; i++) { for(j = 'x'; j <= 'z'; j++) { if(i != j) for(k = 'x';k <= 'z';k++) { if(i!=k&&j!=k) { if(i!='x'&&k!='x'&&k!='z') printf("order is a--%c\tb--%c\tc--%c\n",i,j,k); } } } } return 0; }
【程序23】
题目:打印出如下图案(菱形)*
***
******
********
******
***
*
1.程序分析:先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重
for循环,第一层控制行,第二层控制列。
2.程序源代码:
#include<stdio.h> int 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"); return 0; }
【程序24】
题目:有一分数序列:
2/1
,
3/2
,
5/3
,
8/5
,
13/8
,
21/13...
求出这个数列的前
20
项之和。
1. 程序分析:请抓住分子与分母的变化规律。
2. 程序源代码:
#include<stdio.h> int main() { int n,t,number=20; float a=2,b=1,s=0; for(n=1;n<=number;n++) { s=s+a/b; t=a;a=a+b;b=t; } printf("sum is %9.6f\n",s); return 0; }
【程序25】
题目:求
1+2!+3!+...+20!
的和
1. 程序分析:此程序只是把累加变成了累乘。
2. 程序源代码:
#include<stdio.h> int main() { float n,s=0,t=1; for(n=1;n<=20;n++) { t*=n; s+=t; } printf("1+2!+3!...+20!=%e\n",s); return 0; }
【程序26】
题目:利用递归方法求5!。
1.程序分析:递归公式:fn=fn_1*4!
2.程序源代码:
#include<stdio.h> int fact(j) { int j; int sum; if(j==0) sum=1; else sum=j*fact(j-1); return sum; } int main() { int i; int fact(); for(i=0;i<5;i++) printf("\40:%d!=%d\n",i,fact(i)); return 0; }
【程序27】
题目:利用递归函数调用方式,将所输入的
5
个字符,以相反顺序打印出来。
1. 程序分析:
2.程序源代码:
#include<stdio.h> void palin(int n); int main() { int i = 5; palin(i); printf("\n"); return 0; } void palin(int n) { char next; if(n <= 1) { next = getchar(); printf("\n"); putchar(next); } else { next = getchar(); palin(n - 1); putchar(next); } }
【程序28】
题目:有
5
个人坐在一起,问第五个人多少岁?他说比第
4
个人大
2
岁。问第
4
个人岁数,他说比第
3 个人大 2 岁。问第三个人,又说比第 2 人大两岁。问第 2 个人,说比第一个人大两岁。最后
问第一个人,他说是 10 岁。请问第五个人多大?
1. 程序分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道
第四人的岁数,依次类推,推到第一人( 10 岁),再往回推。
2.程序源代码:
#include<stdio.h> int age(int n); int main() { printf("%d\n",age(5)); return 0; } int age(int n) { int c; if(n==1) c=10; else c=age(n-1) + 2; //往前递推 return(c); }
【程序29】
题目:给一个不多于
5
位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
1. 程序分析:学会分解出每一位数
2.程序源代码:
#include<stdio.h> int main() { long a, b, c, d, e, x; scanf("%ld" , &x); a = x / 10000; //wan b = x % 10000 / 1000; //qian c = x % 1000 / 100; //bai d = x % 100 / 10; //shi e = x % 10; //ge if (a!=0) printf("there are 5, %ld %ld %ld %ld %ld\n",e,d,c,b,a); else if (b!=0) printf("there are 4, %ld %ld %ld %ld\n",e,d,c,b); else if (c!=0) printf(" there are 3,%ld %ld %ld\n",e,d,c); else if (d!=0) printf("there are 2, %ld %ld\n",e,d); else if (e!=0) printf(" there are 1,%ld\n",e); return 0; }
【程序30】
题目:一个
5
位数,判断它是不是回文数。即
12321
是回文数,个位与万位相同,十位与千位相同。
1. 程序分析:同 29 例
2.程序源代码:
#include<stdio.h> int main() { long a, b, c, d, e, x; scanf("%ld" , &x); a = x / 10000; //wan b = x % 10000 / 1000; //qian c = x % 1000 / 100; //bai d = x % 100 / 10; //shi e = x % 10; //ge if (e == a && d == b)/*个位等于万位并且十位等于千位*/ printf("this number is a huiwen\n"); else printf("this number is not a huiwen\n"); return 0; }