C语言题目练习100例——题目+题目分析+源代码(41—50)

【题目41】

题目:求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加使用键盘控制。
1.题目分析:
2.题目源代码如下:

#include "stdio.h"

int main()
{
	int s=0,a,n,t;
	printf("请输入a和n:\n");
	scanf("%d%d",&a,&n);
	t=a;
	while(n>0)
	{
		s=s+t;
		a=a*10;
		t=t+a;
		n--;
	}
	printf("a+aa+...=%d\n",s);
	return 0;
}

【题目42】

题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数。
1.题目分析:
2.题目源代码如下:

#include "stdio.h"
#define N 1000

int main()
{
	int i,j,k,n,sum;
	int a[256];
	for(i=2;i<=N;i++)
	{
		sum=a[0]=1;
		k=0;
		for(j=2;j<=(i/2);j++)
		{
			if(i%j == 0)
			{
				sum=sum+j;
				a[++k]=j;
			}
		}
		if(i==sum)
		{
			printf("%d=%d",i,a[0]);
			for(n=1;n<=k;n++)
			{
				printf("+%d",a[n]);
			}
			printf("\n");
		}
	}
	return 0;
}

【题目43】

题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
1.题目分析:
2.题目源代码如下:

#include "stdio.h"

int main()
{
	float h,s;
	h=s=100;
	h=h/2;			//第一次反弹的高度
	for(int i=2;i<=10;i++)
	{
		s=s+2*h;
		h=h/2;	
    }
    printf("第10次落地时,共经过%f米,第10次反弹高%f米\n",s,h);
    return 0;
}

【题目44】

题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
1.题目分析:采取逆向思维的方法,从后往前推断。
2.题目源代码如下:

#include "stdio.h"
#include "stdlib.h"

int main()
{
	int day=9,x1=0,x2=1;
	while(day>0)
	{
		x1=(x2+1)*2;		//第1天的桃子数是第2天桃子数加1后的两倍
		x2=x1;
		day--; 
	}
	printf("第一天共摘了:%d \n",x1);
	return 0;
}

【题目45】

题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。
有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
1.题目分析:
2.题目源代码如下:

#include "stdio.h"
#include "stdlib.h"

int main()
{
	char i,j,k;
	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("顺序为:a--%c\tb--%c\tc--%c\n",i,j,k);	
						 }	
					}
				 }		
			}
		}	
	}	
}

【题目46】

题目:打印出如下图案(菱形)

      ✲
    ✲✲✲
  ✲✲✲✲✲
 ✲✲✲✲✲✲✲
  ✲✲✲✲✲
    ✲✲✲
      ✲

1.题目分析:
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");
	}
} 

【题目47】

题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和。
1.题目分析:
2.题目源代码如下:

##include "stdio.h"

int main()
{
	int i,t;
	float sum=0,a=2,b=1;
	for(i=1;i<=20;i++)
	{
		sum=sum+a/b;
		t=a;
		a=a+b;
		b=t;
	}
	printf("%9.5f\n",sum);
	return 0;
}

【题目48】

题目:求1+2!+3!+…+20!的和。
1.题目分析:
2.题目源代码如下:

#include "stdio.h"

int main()
{
	int i;
	double sum,mix;
	sum=0;mix=1;
	for(i=1;i<=20;i++)
	{
		mix=mix*i;
		sum=sum+mix;
	}
	printf("%lf\n",sum);
	return 0;
}

【题目49】

题目:利用递归方法求5的阶乘。
1.题目分析:
2.题目源代码如下:

#include "stdio.h"

int main()
{
	int i;
	int fact(int j);
	for(i=0;i<6;i++)
	{
		printf("%d!=%d\n",i,fact(i));
	}
}

int fact(int j)
{
	int sum;
	if(j==0)
	{
		sum=1;
	}
	else
	{
		
		sum=j*fact(j-1);
	}
	return sum;
}

【题目50】

题目:利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。
1.题目分析:
2.题目源代码如下:

#include "stdio.h"

int main()
{
	int i=5;
	void palin(int n);
	printf("请输入5个字符:");
	palin(i);
	printf("\n"); 
}
void palin(int n)
{
	char next;
	if(n<=1)
	{
		next=getchar();
		printf("相反的顺序输出的结果是:");
		putchar(next);
	}
	else
	{
		next=getchar();
		palin(n-1);
		putchar(next);
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值