c语言实用经典100题(21-30题)

【程序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;
}

猜你喜欢

转载自blog.csdn.net/qq_38663663/article/details/80476687
今日推荐