首页 关于 微信公众号
欢迎关注我的微信公众号

c语言经典编程实例100题

题目

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

分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。

#include <stdio.h>
int main(){

	int total = 0;
	for (int b = 1; b < 5; b++)
	{
		for (int s = 1; s < 5; s++)
		{
			for (int g = 1; g < 5; g++)
			{
				if (b != s && s != g && b != g)
				{
					printf("%d\n",b*100+s*10+g);
					total++;
				}
			}
		}

	}
	printf("total = %d\n",total);
	return 0;
}

02题目:企业发放的奖金根据利润提成。利润(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()
{
	long money;
	scanf("%ld",&money);
	int bounds1,bounds2,bounds4,bounds6,bounds10,bounds;
	bounds1 = 100000 * 0.1;
	bounds2 = bounds1 + 100000 * 0.075;
	bounds4 = bounds2 + 200000 * 0.05;
	bounds6 = bounds4 + 200000 * 0.03;
	bounds10 = bounds6 +400000 * 0.015;
	
	if (money <= 100000)
	{
		bounds = money * 0.1;
	}else if(money <= 200000){
		bounds = bounds1 + (money - 100000)*0.075;
	}else if(money <= 400000){
		bounds = bounds2 + (money - 200000)*0.05;
	}else if(money <= 600000){
		bounds = bounds4 + (money - 400000)*0.03;
	}else if(money <= 1000000){
		bounds = bounds6 + (money - 600000) * 0.015;
	}else{
		bounds = bounds10 + (money - 1000000) * 0.01;
	}
	printf("bounds=%d\n",bounds);

	return 0;

}

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

分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果

#include <stdio.h>
#include "math.h"
int main(){

	long int i,x,y,z;
	for (int i = 1; i < 100000; i++)
	{
		x = sqrt(i+100);
		y = sqrt(i+268);
		if (x*x == i + 100 && y*y==i+268)
		{
			printf("\n%d\n",i);
		}
	}
	return 0;
}

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

分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天

#include <stdio.h>

int main(){
	int year,month,day,sum,leap;
	printf("\nplease input year\n");
	scanf("%d",&year);
	printf("\nplease inputmonth\n");
	scanf("%d",&month);
	printf("\nplease input day\n");
	scanf("%d",&day);
	switch(month){
		case 1: sum = 0; break;
		case 2: sum = 31; break;
		case 3: sum = 59; break;
		case 4: sum = 90; break;
		case 5: sum = 120; break;
		case 6: sum = 151; break;
		case 7: sum = 181; break;
		case 8: sum = 212; break;
		case 9: sum = 243; break;
		case 10: sum = 273; break;
		case 11: sum = 304; break;
		case 12: sum = 334; break;
		default: printf("data error\n"); break;
	}
	sum = sum + day;
	if (year%400==0 || (year%4==0 && year%100!=0)) // 判断是不是闰年
	{	
		leap = 1;
	}else{
		leap = 0;
	}

	if (leap == 1 && month>2)
	{
		sum++;
	}

	printf("\n It is the %dth day.\n",sum );
}

05题目:输入三个整数x,y,z,请把这三个数由小到大输出

分析:们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小。

#include <stdio.h>

int main(){
        int x,y,z,t;
        printf("\nplease input x:");
        scanf("%d",&x);
        printf("\n please input y:");
        scanf("%d",&y);
        printf("\n please input z:");
        scanf("%d",&z);

        if(x > y){  // 交换x,y的值
                t = x;
                x = y;
                y = t;
        }
        if(x > z){  // 交换x,z的值
                t = x;
                x = z;
                z = t;
        }
        if(y > z){  // 交换y,z的值
                t = y;
                y = z;
                z = t;
        }
        printf("small to big:%d %d %d\n",x,y,z);

        return 0;
}

08题目:输出九九乘法表

#include <stdio.h>
int main(){
	for(int i = 1;i<=9;i++){
		for(int j = 1;j<=i;j++){
			printf("%d x %d = %d",j,i,i*j);
			printf("  ");
			if(i==j){
				printf("\n");
			}
		}
	}
}

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

分析:兔子的规律数为 1,1,2,3,5,8,13…… 是一个典型的斐波那契数列, f(n) = f(n-1) + f(n-2)

#include <stdio.h>

// 非递归方式
void calcNumber()
{
	long res1,res2;
	
	res1 = res2 = 1;
	for(int i = 1; i <= 20; i++){
		printf("%12ld %21ld",res1,res2);
		if (i%2 == 0) printf("\n");
		res1 =  res1 + res2;
		res2 = res1 + res2;

	}
}

// 递归方式
long getNumber(int month)
{
	if (month == 1 || month == 2)
	{
		return 1;
	}
	return getNumber(month-1) + getNumber(month -2);
}

int main(){
	
	for(int i = 1; i <= 40; i++){
		printf(" %21ld",getNumber(i));
		if (i%2 == 0) printf("\n");

	}
}

题目12:判断101-200之间有多少个素数,并输出所有素数。

#include <stdio.h>
int main()
{
	int count = 0;
	for(int i=101;i<=200;i++)
	{
		
		int a = 1;
		for (int j= 2; j < i/2; j++)
		{
			if(i%j == 0) 
			{
				a = 0;
				break;
			}
		}
		if (a == 1)
		{
			count++;
			printf("%d   ", i);
			if(count%5 ==0) printf("\n");
		}
	}

	return 0;
}

题目13:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。

#include <stdio.h>
int main(){

        for(int i = 100;i <= 999; i++){
                int ge = i%10;
                int shi = (i%100)/10;
                int bai = i/100;
                if(ge*ge*ge + shi*shi*shi + bai*bai*bai == i){
                        printf("%d  ",i);
                }
        }

        return 0;
}

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

#include <stdio.h>

int main(){
	int num;
	printf("\n please input a number:");
	scanf("%d",&num);
	printf("%d=",num);
	for (int i =2;i<=num;i++)
	{
		while(num != i)
		{
			if(num%i == 0)
			{
				printf("%d*",i);
				num = num/i;
			}else{
				break;
			}
			
		}
	}


	printf("%d", num);
	
	return 0;
}

题目16:输入两个正整数m和n,求其最大公约数和最小公倍数

#include <stdio.h>

void calc(int a,int b)
{
	printf("input : (%d,%d)",a,b);
	if(b<a){
		int temp = a;
		a = b;
		b = temp;
	}
	printf("use : (%d,%d)",a,b);

	for(int i = a-1; i>=1;i--){
		if(a%i == 0 && b%i == 0){
			printf("\n(%d,%d)的最大公约数是:%d\n",a,b,i);
			break;
		}
	}
	
	int bei = b;	
	while(bei){
		if(bei%a == 0 && bei%b == 0){
			printf("\n(%d,%d)的最小公倍数是:%d\n",a,b,bei);
			break;	
		}else{
			bei++;
		}
	}
}

int main()
{
	int a,b;
	printf("\nplease input two nums:");
	scanf("%d,%d",&a,&b);
	if(a == b){
		printf("\n最大公约数和最小公倍数是:%d\n",a);
	}else{
		calc(a,b);
	}
	return 0;
}

总结

Blog

Opinion

Project