快起床刷题啦 C语言经典60题(1-20)卷死同学

1、有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

#include <stdio.h>

int main(void)
{
	int i = 0;
	int j = 0;
	int k = 0;
	int m = 0;
	int num = 0;
	int count = 0;
	for(i=1;i<5;i++)
	{
		for(j=1;j<5;j++)
		{
			for(k=1;k<5;k++)
			{
				m++;
				if(i != j && j!=k && i!=k)
				{
					num = i*100+j*10+k;
					printf(" %d ",num);

					if(m%10 ==0)
					{
						printf("\r\n");
					}
					count++;
				}
				else
				{
				}
			}
		}
	}
	printf("\r\n count is %d \r\n",count);
	return 0;
}

2、企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?

#include <stdio.h>

int main(void)
{	
	float I = 0;
	float bonus = 0;
	printf("请输入当月利润I,按Enter完成输入 \r\n");
	printf("单位:万元 \r\n ");
	printf("I: ");
	scanf("%f",&I);
	if(I>100)
	{
		bonus = (I-100)*0.01+40*0.015+20*0.03+20*0.05+10*0.075+10*0.1;
	}
	else if(I>60)
		{
			bonus = (I-60)*0.015+20*0.03+20*0.05+10*0.075+10*0.1;
		}
			else if(I>40)
			{
				bonus = (I-40)*0.03+20*0.05+10*0.075+10*0.1;
			}
				else if(I>20)
					{
						bonus = (I-20)*0.05+10*0.075+10*0.1;
					}
					else if(I>10)
						{
							bonus = (I-10)*0.075+10*0.1;
						}
						else
						{
							bonus = I*0.1;
						}
	printf("I:%f 万元, bonus:%f 万元 \r\n",I,bonus);
	return 0;
}

3、一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

#include <stdio.h>
#include <math.h>

int main(void)
{
	int a = 0;
	int b = 0;
	int i = 0;
	float c = 0;
	float d = 0;
	float diff_a = 0;
	float diff_b = 0;
	do
	{
		a = i+100;
		b = i+168;
		//使用sqrt函数计算开方后的数
		c = sqrt(a);
		d = sqrt(b);
		//判断开方后是否为整数
		diff_a = c - (int)c;
		diff_b = d - (int)d;
		if(diff_a == 0 && diff_b ==0)
		{
			printf("%d \r\n",i);
			break;
		}
		i++;
	}while(1);
	return 0;
}

4、输入三个整数x,y,z,请把这三个数由小到大输出

#include <stdio.h>

int main(void)
{
	int a = 0;
	int b = 0;
	int c = 0;
	int temp = 0;
	printf("请输入三个整数,以空格隔开,最后点击enter键结束!\r\n");
	scanf("%d",&a);
	scanf("%d",&b);
	scanf("%d",&c);
	if(a>b)
	{
		temp = a;
		a = b;
		b = temp;
	}

	if(b>c)
	{
		temp = b;
		b = c;
		c = temp;
	}
	if(a>b)
	{
		temp = a;
		a = b;
		b = temp;
	}
	printf("%d<%d<%d \r\n",a,b,c);
	return 0;
}

5、用*号输出字母c的图案。

#include <stdio.h>

int main(void)
{
	printf("   * * *\r\n");
	printf("  * \r\n");
	printf(" * \r\n");
	printf("  * \r\n");
	printf("   * * * \r\n");
	return 0;
}

6、输出9*9口诀

#include <stdio.h>

int main(void)
{
	int  i = 0; 
	int  j = 0; 	
	for(i = 1;i<10;i++)
	{
		for(j = 1;j<10;j++)
		{
			printf("%d * %d = %-3d",i,j,i*j);
		}
		printf("\r\n");
	}
	return 0;
}

7、古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

#include <stdio.h>

int main(void)
{
	int i = 0;
	long num[20] = {1,1};
	for(i=2;i<20;i++)
	{
		num[i] = num[i-1] + num[i-2];
		printf("第%d个月兔子总数为:%d对 \r\n",i+1,num[i]);
	}
	return 0;
}

8、将一个正整数分解质因数。例如:输入90,打印出90=2 * 3 * 3 * 5。

#include <stdio.h>
int main(void)
{
	long i = 0;
	int b[20] = {0};//暂定该数有20个质因数
	int j = 0;
	long a = 0;
	int k = 0;
	printf("请输入一个正整数:");
	scanf("%d",&a);
	printf("输入的正整数为:%d \r\n",a);
	printf("%d = ",a);
	i = 2;
	while(i<=a)
	{
		if(a%i == 0 )
		{
			a = a/i;
			b[j] = i;		
			//得到一个约数后,要将i重置为1,重新寻找下一个约数
			i = 1;
			j++;
		}
		i++;
	}
	//打印成题目要求的格式
	for(k=0;k<j;k++)
	{	
		//最后一个乘数,不打印*
		if(j ==0 || k == j-1)
		{
			printf("%d",b[k]);
		}
		else
		{
			printf("%d*",b[k]);	
		}
	}
	printf("\r\n");
	return 0;
}

9、利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。

#include <stdio.h>

int main(void)
{
	char g = '0';
	char A = 'A';
	char B = 'B';
	char C = 'C';
	unsigned int a = 0;
	printf("请输入成绩:");
	scanf("%d",&a);
	printf("输入的成绩为:%d \r\n",a);
	g = (a >= 90)?A:((a>=60)?B:C);
	printf("成绩等级为:%c \r\n",g);
	return 0;
}

10、输入两个正整数m和n,求其最大公约数和最小公倍数。

#include <stdio.h>

int main(void)
{	
	//定义输入的两个正整数
	int a = 0;
	int b = 0;
	int temp = 0;
	//打印时使用
	int c = 0;
	int d = 0;
	//定义最大公约数
	int maxCommonNumber = 0;
	//定义最小公倍数
	int minCommonNumber = 0;
	printf("请输入两个正整数,以空格隔开:");
	scanf("%d%d",&a,&b);
	printf("\r\n");
	//保证a>b
	if(a>b)
	{}
	else
	{
		temp = a;
		a = b;
		b = temp;
	}
	//打印赋值,方便打印
	c = a;
	d = b;
	//辗除法。
	//思路:a%b =c,b%c =d,...,一直循环,直至为0
	do
	{
		if(b!=0)
		{
			a = a%b;

			if(a!=0)
			{
				b = b%a;
			}
		}
	}while(a!=0 && b!=0);
	//最大公约数为a,b中非零的
	maxCommonNumber = (a==0)?b:a;
	//最大公倍数为二者相乘,再除以最大公约数
	minCommonNumber = c*d/maxCommonNumber;
	printf("%d %d的最大公约数为:%d \r\n",c,d,maxCommonNumber);
	printf("\r\n");
	printf("最小公倍数为:%d \r\n",minCommonNumber);
	return 0;
}

11、输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

#include <stdio.h>

int main(void)
{
	char txt[] = "0"; //char * txt = "0" 只读  char txt[] = "0"可读可写
	int num = 0; 
	int i = 0;
	int j = 0;
	int LetCount = 0;
	int spaCount = 0;
	int numCount = 0;
	int othCount = 0;
	printf("请输入一行字符:");
	gets(txt);
	while(txt[i] != '\0')
	{
		num = txt[i] + 0;//字符类型转数字类型
		if(num >= 97 && num <= 122)
		{
			LetCount++;
		}
		else if(num >= 65 && num <= 90)
			{
				LetCount++;
			}
			else if(num == 32)
				{
					spaCount++;
				}
				else if(num >= 48 && num <= 57)
					{
						numCount++;
					}
					else
					{
						othCount++;
					}
		i++;
	}
	printf("输入的字符为:");
	for(j=0;j<i;j++)
	{
		printf("%c",txt[j]);
	}
	printf("\r\n其中,中英文字母个数为: %d \r\n",LetCount);
	printf("      空格个数为: %d \r\n",spaCount);
	printf("      数字个数为: %d \r\n",numCount);
	printf("      其他字符个数为: %d \r\n",othCount);
	return 0;
}

12、求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。

#include <stdio.h>
#include <math.h>

int main(void)
{
	unsigned int a = 0;
	unsigned int times = 0;
	long s = 0;
	long sNumber[10] = {0};//暂定10个,若定义为sNumber[],则不能超过3个
	long f = 0;
	int i = 0;
	int j = 0;
	printf("请输入0-9中的一个数字:");
	scanf("%d",&a);
	printf("\r\n");
	printf("请输入相加的次数:");
	scanf("%d",&times);
	for(i=0;i<times;i++)
	{
		s = s + a*pow(10.0,i);//求取每个加数
		sNumber[i] = s;//保存每个加数到数组中
	}
	//打印对应的格式
	printf(" s = ");
	for(j=0;j<times;j++)
	{
		f = f + sNumber[j];//求和
	
		if(j == times-1)
		{
			printf("%d",sNumber[j]);
		}
		else
		{
			printf("%d+",sNumber[j]);
		}
	}
	printf("\r\n s = %d \r\n",f);
}

13、一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程找出1000以内的所有完数。

#include <stdio.h>

int main(void)
{
	int a = 0;
	int i = 0;
	int j = 0;
	int k = 0;
	int sum = 0;
	int c[100] = {0};//约数个数上限暂定100
	j = 0;
	for(a=1;a<1000+1;a++)
	{
		j = 0;
		i = 1;
		//求取所有约数
		while(i<a)
		{
			if(a%i == 0)
			{
				c[j] = i;
				j++;
			}
			i++;
		}
		//求和判断
		sum = 0;
		if(j>0)
		{
			for(k=0;k<j;k++)
			{
				sum = sum + c[k];
			}

			if(sum == a)
			{
				printf(" %d ",a);
			}
		}
	}
	printf("\r\n");
	return 0;
}

14、一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?

#include <stdio.h>

int main(void)
{
	double high = 100;
	double sum = 0;
	int i = 0;
	for(i=0;i<10;i++)
	{
		sum = sum + high + 0.5*high;
		high = 0.5*high;
	}
	//减去第10次反弹的高度
	sum -= high;
	printf("第10次落地共经过:%f 米 \r\n",sum);
	printf("第10次反弹高度为:%f 米 \r\n",high);
	return 0;
}

15、猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。

#include <stdio.h>

int main(void)
{
	int i = 0;
	int peach = 0;
	peach = 1;
	for(i = 1;i<10;i++)
	{
		peach = (peach*2+2);
		printf(" 第%d天的桃子数为:%d \r\n",10-i,peach);
	}	
	return 0;
}

16、两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。

#include <stdio.h>

int main(void)
{
	int temp = 0;
	//将x,y,z编号
	int x = 1;
	int y = 2;
	int z = 3;
	int a = 0;
	int b = 0;
	int c = 0;
	printf("x的编号为:%d \r\n",x);
	printf("y的编号为:%d \r\n",y);	
	printf("z的编号为:%d \r\n",z);
	for(temp=1;temp<=3;temp++)
	{
		if(temp!=x && temp!=z)
		{
			c = temp;
		}
	}
	//a的对手不会是c的对手
	for(temp=1;temp<=3;temp++)
	{
		if(temp!=x && temp!=c)
		{
			a = temp;
		}
	}
	//b的对手不会是a、c的对手
	for(temp=1;temp<=3;temp++)
	{
		if(temp!=a && temp!=c)
		{
			b = temp;
		}
	}
	printf("\r\n");
	printf("a的对手编号为:%d \r\n",a);
	printf("b的对手编号为:%d \r\n",b);	
	printf("c的对手编号为:%d \r\n",c);
	return 0;
}

17、打印菱形

#include <stdio.h>

int main(void)
{
	int i = 0;
	int j = 0;
	int sum = 0;
	//临时变量,因为不能直接修改i,j的值,会死循环(调试出现)
	int m = 0;
	int n = 0;
	for(i=1;i<7+1;i++)
	{
		for(j=1;j<7+1;j++)
		{
			m = i;
			n = j;
			if(m>4)
			{
				m = 8-m;
			}
			if(n>4)
			{
				n = 8-n;
			}		
			sum = m+n;
			if(sum>=5)
			{
				printf("*");
			}
			else
			{
				printf(" ");
			}
		}
		printf("\r\n");
	}
	return 0;
}

18、有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和。

#include <stdio.h>

int main(void)
{
	float a[20] = {2,3};//只初始化前两项即可
	float b[20] = {1,2};
	int i = 0;
	int j = 0;
	float temp = 0;
	float sum = 0;
	printf("\r\n该数列的前20项为:\r\n");
	for(i=2;i<20;i++)
	{
		a[i] = a[i-1]+a[i-2];//分子规律
		b[i] = a[i-1];//分母规律
	}
	for(j=0;j<20;j++)
	{
		printf("%.f",a[j]);//打印整数浮点数,但是不打印小数点出来
		printf("/");
		printf("%.f ",b[j]);
		//打印换行,每5项换行
		if((j+1)%5 ==0)
		{
			printf("\r\n");
		}
		//涉及到相除,所以不光temp要设置为浮点型,a[j]、b[j]也要设置为浮点型
		temp = a[j]/b[j];
		sum += temp;//求和
	}
	printf("\r\n该数列的前20项之和为:%f \r\n",sum);
	return 0;
}

19、求1+2!+3!+…+20!的和

#include <stdio.h>

int main(void)
{
	_int64 a[20] = {1};//只初始化首项为1,其他为0即可
	int i = 0;
	int j = 0;
	_int64 sum = 0; //注意类型定义
	for(i=1;i<20;i++)
	{
		a[i] = a[i-1]*(i+1);	
	}
	for(j=0;j<20;j++)
	{	
		printf(" %I64d ",a[j]);//注意打印格式
		sum += a[j];	
		if((j+1)%5 == 0)
		{
			printf("\r\n");
		}
	}
	printf("\r\n 1+2!+3!+...+20!的和为:%I64d \r\n",sum);//注意打印格式
	return 0;
}

20、利用递归方法求5!

#include <stdio.h>
int multiply(int n);
int main(void)
{
	int a =5;
	int b = 0;
	b = multiply(a);
	printf("=%d \r\n",b);

}
//递归函数
int multiply(int n)
{
	int s = 0;
	//递归的判断停止条件
	if(n > 0)
	{
		s = n*multiply(n-1);
		//设置打印格式,为了好看点
		if(n!=5)
		{
			printf("%d*",n);
		}
		else
		{
			printf("%d",n);
		}	
	}
	else
	{
		s = 1;
	}
	return s;
}

对于新手学习C语言还是比较枯燥和乏味的,这里推荐一个学习交流群【669325409】,里面有很多学习资料也可以免费领取,省去了很多学习成本,需要学习资料的小伙伴都可以加群,找群主或者管理员免费领取,平时里面也有大神不时分享一些公开课和项目经验,很合适小白。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值