C语言100道练习题打卡(1)

1

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

#include<stdio.h>
//有1,2,3,4四个数字,能组成多少个互不相同且不重复的三位数,都是多少

int main()
{
	int i, j, k;
	printf("\n");
	int count = 0;
	for (i = 1; i < 5; i++)
	{
		for (j = 1; j < 5; j++)
		{
			for (k = 1; k < 5; k++)
			{
				if (i != k && k != j && j != k)
				{
					printf("%d %d %d\n", i, j, k);
					count++;
				}
			}
		}
	}
	printf("count = %d", count);
	return 0;
}

2

题目:

根据企业利润计算奖金,从键盘输入利润,计算应发放奖金金客,公式如下:

1)利润低于或等于10万元时,奖金可提10%;

2)利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;

3)20万到40万之间时,高于20万元的部分,可提成5%;

4)40万到60万之间时高于40万元的部分,可提成3%;

5)60万到100万之间时,高于60万元的部分,可提成1.5%;

6)高于100万元时,超过100万元的部分按1%提成。

从键盘输入当月利润,求应发放奖金总数?

#include<stdio.h>
int main()
{
	double profit, bonus1, bonus2, bonus3, bonus4, bonus5,bonus;

	printf("请输入企业的利润为:");
	scanf_s("%lf", &profit);

	//计算每个利润段的奖金基数
	bonus1 = 100000 * 0.1;//利润低于或等于10万元时,奖金可提10%;
	bonus2 = bonus1 + 100000 * 0.075;//利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;
	bonus3 = bonus2 + 100000 * 0.05;//20万到40万之间时,高于20万元的部分,可提成5%;
	bonus4 = bonus3 + 100000 * 0.03;//40万到60万之间时高于40万元的部分,可提成3%;
	bonus5 = bonus4 + 100000 * 0.015;//高于100万元时,超过100万元的部分按1%提成

	if (profit <= 100000)
	{
		bonus = profit * 0.1;
	}
	else if (profit <= 200000)
	{
		bonus = bonus1 + (profit-100000) * 0.75;
	}
	else if (profit <= 400000)
	{
		bonus = bonus2 + (profit - 200000) * 0.05;
	}
	else if (profit <= 600000)
	{
		bonus = bonus3 + (profit - 400000) * 0.03;
	}
	else if (profit <= 1000000)
	{
		bonus = bonus4 + (profit - 600000) * 0.015;
	}
	else if(profit>1000000)
	{
		bonus = bonus5 + (profit - 1000000) * 0.01;
	}

	printf("提成为:bonus=%lf\n", bonus);
	return 0;
}

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

#include<stdio.h>

/*分析:一个整数,它加上100后是一个完全平方数
再加上168又是一个完全平方数,请问该数是多少
设该数为x
1,x+100=n*n;x+100+168=m*m
2,m*m-n*n=(m+n)(m-n)=168
3,设m+n=i;m-n=j,则i*j=168,那么i和j都是偶数
4,m=(i+j)/2,n=(i-j)/2,i和j均是大于2的偶数
6,由于i*j=168,j>=2,得到1<i<168/2+1
接下来将i的所有数字循环计算即可*/

int main()
{
	int i, j, n, m,x;
	for (i = 1; i < 168 / 2 + 1; i++)
	{
		if (168 % i == 0)
		{
			j = 168 / i;
			if (i > j && (i + j) % 2 == 0 && (i - j) % 2 == 0)//m,n均是偶数
			{
				m = (i + j) / 2;
				n = (i - j) / 2;
				x = n * n - 100;
				printf("%d\n", x);
				printf("%d+100 = %d*%d\n", x, n, n);
				printf("%d+168 = %d*%d\n", x, m, m);
			}
		}
	}
	
	return 0;
}

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

#include<stdio.h>

/*分析:
输入某年某月某日,判断这一天是这一年的第几天
年:判断是否是闰年,
月:闰年的2月有28天
天:一个月有30或31天
设这一天为这一年的第x天

以3月5日为例,应该把前两个月的天数相加后,加上五天,即为本年的第几天
特殊情况:闰年且输入月份大于3时需要考虑多加一天*/

int main()
{
	int day, year, month, sum, leap;
	printf("请输入日期:格式为:年,月,日\n");
	scanf_s("%d,%d,%d", &year, &month, &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("请重新输入");
		break;
	}

	sum = sum + day;//某月加上某天

	//判断是不是闰年
	if ((year % 400 == 0) || (year % 4 == 0 && year % 100 == 0))
	{
		leap = 1;
	}
	else
	{
		leap = 0;
	}

	//如果是闰年且月份大于2,总天数应该加一天
	if (leap == 1 && month > 2)
	{
		sum++;
	}
	printf("这是这一年中的第%d天", sum);
	return 0;
}

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

方法一:

#include<stdio.h>
int main()
{
	int x, y, z;
	printf("请输入三个整数: \n");
	scanf_s("%d,%d,%d", &x, &y, &z);

	printf("从小到大排序:\n");
	if (x < y)
	{
		if (y < z)
		{
			printf("%d,%d,%d", x, y, z);
		}
		else
		{
			printf("%d,%d,%d", x, z, y);
		}
	}
	else if (y < x)
	{
		if (x < z)
		{
			printf("%d,%d,%d", y, x, z);
		}
		else
		{
			printf("%d,%d,%d", y, z, x);
		}
	}
	
	return 0;
}

方法二:

#include<stdio.h>
int main()
{
	int x, y, z,t;
	printf("请输入三个整数: \n");
	scanf_s("%d,%d,%d", &x, &y, &z);

	if (x > y)
	{
		t = x;
		x = y; 
		y = t;
	}
	if (x > z)
	{
		t = z;
		z = x;
		x = t;
	}
	if (y > z)
	{
		t = y;
		y = z;
		z = t;
	}
	printf("从小到大排序:%d %d %d\n", x, y, z);
	return 0;
}

6 用*号输入字母C的图案

#include<stdio.h>
int main()
{
	int i, j, k;
	int n = 5;
	for (i = 0; i < n; i++)
	{
		for (j = 0; j < 5; j++)
		{
			if ((i == 0 || i == n - 1) || (j == 0 && i != n / 2) || (j == n - 1 &&i!= n / 2))
			{
				printf("*");
			}
			else
			{
				printf(" ");
			}
		}
		printf("\n");
	}
	return 0;
}

7 输出九九乘法表

#include<stdio.h>
int main()
{
	//九九乘法表,i控制行,j控制列
	int i, j, result;

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

8 输出象棋棋盘

#include<stdio.h>
/*分析:
国际想起棋盘由64个黑白相间的格子组成,分为8行8列。
用i控制行,j控制列,根据i+j的和的变化来控制输出黑方格或白方格
*/

int main()
{
	int i, j;
	for (i = 0; i < 8; i++)
	{
		for (j = 0; j < 8; j++)
		{
			if ((i + j) % 2 == 0)
			{
				printf("%c%c", '*', '*');//**表示黑方格
			}
			else
			{
				printf("  ");
			}
		}
		printf("\n");
	}
	return 0;
}

9 打印楼梯图形 和笑脸

题目:打印楼梯,同时在楼梯上方打印两个笑脸

//题目:打印楼梯,同时在楼梯上方打印两个笑脸
//用11来表示两个笑脸;用i控制行,用j控制列
//j根据i的变化来控制输出黑方格的个数
#include<stdio.h>
int main()
{
	int i, j;
	printf("11\n");//用11来表示两个笑脸
	for (i = 1; i < 11; i++)
	{
		for (j = 1; j <= i; j++)
		{
			printf("%c%c", 70, 70);
		}
		printf("\n");
	}
	return 0;
}

10 兔子生崽

方法1:

#include<stdio.h>
/*有一对兔子,从出生后第3个月都圣一对兔子,小兔子长到第三个月后又生一对兔子,
假如兔子都不死,问每个月的兔子总数为多少?(输出前40个月即可)*/

/*分析:兔子的个数规律为数列1,1,2,3,5,8,13,21....,即下个月是上两个月之和*/
int main()
{
	int f1 = 1, f2 = 1, i;

	for (i = 1; i <= 20; i++)
	{
		printf("%12d%12d", f1, f2);
		if (i % 2 == 0)
			printf("\n");
			f1 = f1 + f2;
			f2 = f1 + f2;
	}
	return 0;
}

这让我想起来青蛙跳台阶的案例,我们再来回顾一下吧

题目:一只青蛙要从第一级台阶开始,每次可以跳上一级或者两级,直到跳完所有的台阶。我们需要找出青蛙有多少种跳法

方法1;

int Fib(int x)
{
	int i = 1;
	int j = 1;
	int z = 1;
	while (x > 0)
	{
		z = i + j;
		i = j;
		j = z;
		x--;
	}
	return z;
}
int main()
{
	int n = 0;
	printf("青蛙跳的台阶数为:\n");
	scanf_s("%d", &n);
	int ret = Fib(n);
	printf("青蛙跳台阶的方法有%d种", ret);
	return 0;
}

方法2:

利用递归方式

int Fib(int x)
{
	if (x == 1)
		return 1;
	else if (x == 2)
		return 2;
	else
		return Fib(x - 1) + Fib(x - 2);
}
int main()
{
	int n = 0;
	printf("青蛙跳的台阶数为:\n");
	scanf_s("%d", &n);
	int ret = Fib(n);
	printf("青蛙跳台阶的方法有%d种", ret);
	return 0;
}

11 判断101到200之间的素数

#include<stdio.h>

/*分析:
判断素数的方法:
用一个数分比如取出2到sqrt(这个数),如果能被整除,则表明此数不是素数
*/


int main()
{
	int i,j;
	int count = 0;

	for (i = 101; i <= 200; i++)
	{
		for (j = 2; j < i; j++)
		{
         //如果j能被i整除再跳出循环
			if (i % j == 0)
			{
				break;
			}
		}
     //判断循环是否提前跳出,如果j<i说明在2~j之间,i有可整除的数
			if (j >= i)
			{
				count++;
				printf("%d ", i);
				//每五个数换行
				if (count % 5 == 0)
					printf("\n");
			}
		
	}
	return 0;
}

12 水仙花数

打印水仙花数,所谓水仙花数是指一个三位数,其各位数字立方和等于该数本身。

例如:153是一个水仙花数,因为153 = 1的三次方+5的三次方+3的三次方

#include<stdio.h>
/*
利用for循环控制100~999个数,每个数分解出个位,十位,百位
*/

int main()
{
	int x, y, z, i;
	for (i = 100; i < 1000; i++)
	{
		x = i % 10;
		y = i / 10 % 10;
		z = i / 100 % 10;

		if (i == (x * x * x + y * y * y + z * z * z))
		{
			printf("%d\n", i);
		}
	}
	return 0;
}
相关推荐
白榆maple6 分钟前
(蓝桥杯C/C++)——基础算法(下)
算法
JSU_曾是此间年少10 分钟前
数据结构——线性表与链表
数据结构·c++·算法
朱一头zcy1 小时前
C语言复习第9章 字符串/字符/内存函数
c语言
此生只爱蛋1 小时前
【手撕排序2】快速排序
c语言·c++·算法·排序算法
何曾参静谧1 小时前
「C/C++」C/C++ 指针篇 之 指针运算
c语言·开发语言·c++
咕咕吖2 小时前
对称二叉树(力扣101)
算法·leetcode·职场和发展
九圣残炎2 小时前
【从零开始的LeetCode-算法】1456. 定长子串中元音的最大数目
java·算法·leetcode
lulu_gh_yu2 小时前
数据结构之排序补充
c语言·开发语言·数据结构·c++·学习·算法·排序算法
丫头,冲鸭!!!3 小时前
B树(B-Tree)和B+树(B+ Tree)
笔记·算法
Re.不晚3 小时前
Java入门15——抽象类
java·开发语言·学习·算法·intellij-idea