C语言经典例题100道(详细说明)

程序【1】.

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

分析:123 124 134 234,不能重复、三位数

#include<stdio.h>
int main()
{
	int i,j,k;
	int num=0;
	for(i=1;i<=4;i++)
	{
		for(j=1;j<=4;j++)
		{
			for(k=1;k<=4;k++)
			{
				if(i!=j&&j!=k&&i!=k)
				{
				printf("%d %d %d\n",i,j,k);
				num++;
				}
			}
		}
	 } 
	 printf("一共%d个\n",num);
}

运行结果:

3b99e8577012410c8125fffa26c6e8d0.png

扩展:

当123 132 321 算作三种不同的顺序时,三个数进行排序的个数

#include<stdio.h>
int main()
{
	int i,j,k;
	int num=0;
	for(i=1;i<=4;i++)
	{
		for(j=1;j<=4;j++)
		{
			for(k=1;k<=4;k++)
			{
				if(i!=j&&j!=k&&i!=k)
				{
				printf("%d %d %d\n",i,j,k);
				num++;
				}
			}
		}
	 } 
	 printf("一共%d个\n",num);
}

运行结果:a0d0c82dca134173a84be00f4b9d072a.png

程序【2】.

题目:企业发放的奖金根据利润提成。利润低于或等于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%提成,输入当月利润,求应发放奖金总数?

分析:多个if做判断,根据每种情况输出不同的奖金

#include<stdio.h>
int main()
{
	long int LiRun;
	double Bonus;
	printf("请输入当月利润:\n");
	scanf("%d",&LiRun);
	if(LiRun<=100000)
		Bonus=LiRun*0.1;
	if(LiRun<=200000&&LiRun>100000)
		Bonus=(LiRun-100000)*0.075+100000*0.1;
	if(LiRun<=400000&&LiRun>200000)
		Bonus=(LiRun-200000)*0.05+100000*0.1+100000*0.075;
	if(LiRun<=600000&&LiRun>400000)
		Bonus=(LiRun-400000)*0.03+100000*0.1+100000*0.075+200000*0.05;
	if(LiRun<=1000000&&LiRun>600000)
		Bonus=(LiRun-600000)*0.015+100000*0.1+100000*0.075+200000*0.05+200000*0.03;
	if(LiRun>1000000)
		Bonus=(LiRun-1000000)*0.001+100000*0.1+100000*0.075+200000*0.05+200000*0.03+400000*0.015;
	printf("应发放奖金为%f",Bonus);
}

运行结果:

1326aac99f164eaea0cb2d1a165b7ef7.png

程序【3】.

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

分析:分别翻译两句,两个条件同时满足,则为要的数。(平方用sqrt(),需要加入match库)

#include<stdio.h>
#include<math.h>
int main()
{
	long int i,x,y,z;
	printf("该整数为:\n") ;
	for(i=1;i<100000;i++)
	{
		x=sqrt(i+100);
		y=sqrt(i+268);
		if(x*x==i+100&&y*y==i+268)
			printf("%d\n",i);
	}
}

运行结果:

ad2007e315664180ae3139c5761db6a2.png

程序【4】.

题目:输入某年某月某日,判断这一天是这一年的第几天?

分析:①因为2月特殊,闰年29,过需要判断是否是闰年(能被400整除一定是闰年,或者可以被4整除但不能被100整除)。②用switch判断不同的月。③输入年月日(int),输出某天(int)

#include<stdio.h>
int main()
{
	int year,month,day,sum;
	while(1)
	{
		printf("\n请输入某年某月某日\n");
		scanf("%d %d %d",&year,&month,&day);
		// 1 3 5 7 8 10 12 均为31天 
		// 4 6 9 11 均为30天 
		switch(month)
		{
		case 1:
			sum = 0;
			break; 
		case 2:
			sum = 31;
			break; 
		case 3:
			sum = 31+28;
			break; 
		case 4:
			sum = 31+28+31;
			break; 
		case 5:
			sum = 31+28+31+30;
			break; 
		case 6:
			sum = 31+28+31+30+31;
			break; 
		case 7:
			sum = 31+28+31+30+31+30;
			break; 
		case 8:
			sum = 31+28+31+30+31+30+31;
			break; 
		case 9:
			sum = 31+28+31+30+31+30+31+31;
			break; 
		case 10:
			sum = 31+28+31+30+31+30+31+31+30;
			break; 
		case 11:
			sum = 31+28+31+30+31+30+31+31+30+30;
			break; 
		case 12:
			sum = 31+28+31+30+31+30+31+31+30+30+30;
			break; 
		}
		sum = sum+day;	
		if( ((year%100!=0)&&(year%4==0) || (year%400==0)) &&month>2 )//判断是否是闰年|| &&同优先级
			 sum++;
		printf("该天为%d年第%d天\n",year,sum);		
	}	
} 

运行结果:

b1779eac922b4c0b93658d3d2c57a9a3.png

程序【5】.

题目:输入三个整数,并排序,由小到大输出。

分析:进行替换数是需要引入一个中间变量

#include<stdio.h>
int main()
{
	int max, med,min;
	int temp;
	printf("请输入三个整数:\n");
	scanf("%d %d %d",&max,&med,&min);
	if(max<med)//第一个数先固定为最大的 
	{
		temp = max;
		max = med;
		med = temp;
	 } 
	 if(max<min)
	{
		temp = max;
		max = min;
		min = temp;
	 } 
	if(med<min)//后两个数再做比较
	{
		temp = med;
		med = min;
		min = temp;
	 } 
	 printf("由大到小依次排列为:%d %d %d",max,med,min) ;
} 

运行结果:

b402f359e2e34fc2b2c9be1812e1c2cd.png

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值