c语言经典50道例题---精华篇

代码1.
阶乘相加,当输入为5->5!+4!+3!+2!+1!的和
define _CRT_SECURE_NO_WARNINGS 1
#include 
#include
#include
int main() {
	//阶乘的进阶版
	int n, i, sum = 0, k = 1;// n为阶乘, i为循环次数, sum求和
	scanf("%d", &n);//当输入为5时->5!+4!+3!+2!+1!的和
	for (i = 1; i <= n; i++) {
		k = k * i;//求阶乘
		sum += k;//求每个阶乘的和
	}
	printf("%d!=%d", n, sum);
}


代码2.
1-2+3-4+5......的和
int main() {
	int i, sum = 0, sign = 1;//i用于循环,sum求和,sign用于调整正负号
	int n;
	scanf("%d", &n);//输入一个数,从1开始累加到这个数
	for (i = 1; i <= n; i++) {   //i>n时结束循环
		sum += i * sign;//通过i*sign变正负号,在通过sum相加求和
		sign = -sign;//变正负号作用
	}
	printf("结果为:%d", sum);
	return 0;
}`![在这里插入图片描述](https://img-blog.csdnimg.cn/270308370d36435c8b66b1f669bdc16d.png#pic_center)



代码3.
学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
#define _CRT_SECURE_NO_WARNINGS 1
#include
int main() {
	int score;
	scanf("%d", &score);
	char k = score >= 90 ? 'A' : score >= 60 ? 'B' : 'C';
	printf("成绩等级:%c",k);
	return 0;
}


代码4
计算和输出下列级数的和。
//	S = 1 / (1×2) + 1 / (2×3) + … + 1 / (n×(n + 1))
#include
int main() {
	float fz = 1;//分子
	float fm;//分母
	float s = 0;int n;//s求和
	scanf("%d", &n);
	int i=1;//用于循环
	while (i <= n) {
		fm = i * (i + 1);
		s += fz / fm;
		i++;
	}
	printf("%f", s);
}
结果:当输入为10时,结果为0.909091



代码5.
	某个公司采用公用电话传递数据,数据是四位的整数,
    在传递过程中是加密的,加密规则如下:每位数字都加上5, 
	然后用和除以10的余数代替该数字,
	再将第一位和第四位交换,第二位和第三位交换。
int main() {
	int a, b, c,m=0;
	scanf("%d", &a);//输入4位数
	while (a) {
		b = (a % 10)+5;//取每一轮最后一位
		b= b % 10;//余数代替
		m = m * 10 + b;
		a = a / 10;//每一轮将最后一位截去

	}
	printf("%d", m);
}



代码6.
输出100以内能被3整除且个位数为6的所有整数
int main() {
	int i;
	for (i = 6; i <= 100; i++) {
		if (i % 10 == 6 && i%3==0) {
			printf("%3d", i);
		}
	}
}


代码7.	
判断一个素数能被几个9整除,注:当个1000以内所有素数看就行了
int fun(int n) {
	int i;
	for (i = 2; i <= n / 2; i++) {
		if (n % i == 0)return 0;
	}
	return 1;
}
int main() {
	int i,k=0,p=0;//p记录次数,k判断是否余数是0
	for (i = 1; i < 1000; i++) {
		if (fun(i) == 1) {
			int m = i;
			while ((k = m % 9)==0) {
				p++;
				m = m / 9;
			}
			printf("素数%d,可以被%d个9整除\n", i, p);
		}
	}
}


代码8.
将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
注:自己算一下更容易理解
int main() {
	//将一个正整数分解质因数。例如:输入90, 打印出90 = 2 * 3 * 3 * 5。
	int n,i;
	scanf("%d", &n);//输入一个正整数
	printf("90=");
	for (i = 2; i < n; i++) {//从2开始循环
		while (n % i == 0) {//判断能否被整除,可以执行下面程序
			n = n / i;
			printf("%d*", i);
		}
	}
	printf("%d", n);
}



代码9.打印下方图形

*
 
***
 
******
 
********
int main() {
	int i;
	for (i = 0; i < 4; i++) {
		for (int j = 0; j < i * 2 + 1; j++) {
			printf("*");
		}
		printf("\n\n");
	}
	return 0;
}



代码10.
请编写一个函数void fun(int m, int k, int xx[])
该函数的功能是:将大于整数m且紧靠m的k个素数存入xx所指的数组中。

void fun(int m, int k, int xx[]) {
	int i = 0,j=0;
	while (k) {
		m++;//每次加1,判断是否靠近的下一个是素数,若是送到数组中
		for (i = 2; i < m / 2; i++) {
			if (m % i == 0)//不是素数退出循环
				break;
		}
		if (i == m / 2) {
			//证明是素数
			xx[j++] = m;
			k--;//到0while循环结束,且靠近m的值也存放到数组中;
		}
	}
}
int main() {
	int xx[80];
	int k,m;
	scanf("%d %d", &k,&m);//k个素数存入数组
	fun(m, k, xx);
	for (int i = 0; i < k; i++) {
		printf("%3d", xx[i]);//输出
	}
}


代码11.
古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,
小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
int main() {
	int f1 = 1, f2 = 1;
	int i;
	for (i = 1; i <= 20; i++) {
		printf("%10d%10d", f1, f2);
		f1 = f1 + f2;//第三个月....第五个月...以此类推
		f2 = f1 + f2;//第四个月....规则同上
		if (i % 2 == 0)printf("\n");
	}
	return 0;
}



代码12.
实现矩阵(33列)的转置(即行列互换)![在这里插入图片描述](https://img-blog.csdnimg.cn/dde80dafef274717bea8474cfacae749.png)
int main() {
	int arr[3][3],i,j;
	for (i = 0; i < 3; i++) {
		for (j = 0; j < 3; j++) {
			scanf("%d", &arr[i][j]);//数组元素赋值
		}
	}
	for (i = 0; i < 3; i++) {
		for (j = 0; j < i; j++) {//看图
			int k = arr[i][j];
			arr[i][j] = arr[j][i];
			arr[j][i] = k;
		}
	}
	for (i = 0; i < 3; i++) {
		for (j = 0; j < 3; j++) {
			printf("%4d", arr[i][j]);
		}
		printf("\n");
	}
	![在这里插入图片描述](https://img-blog.csdnimg.cn/8b917d7f4488462eb2e9949847ef3b50.png)



代码13.
编写函数,函数的功能是:从字符串中删除指定的字符。同一字母的大小写按不同字符处理。

void fun(char arr[80], int k) {
	int i,j;
	for (i = 0; i < strlen(arr); i++) {
		if (arr[i] == k) {
			for ( j = i ; j < strlen(arr); j++) {
				arr[j ] = arr[j+1];
			}
			i--;
		}
	}
	printf("%s", arr);
}
int main() {
	char arr[80],k;
	scanf("%c", &k);//被删除字符
	scanf("%s", arr);
	fun(arr, k);
	return 0;
}


代码14.
一球从100米高度自由落下,
每次落地后反跳回原高度的一半;
再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
int main() {
	float h = 100,f = 50;
	for (int i = 2; i <= 10; i++) {
		h += f * 2;//第一次反弹和第二次下降,以此类推
		f = f / 2;//每次除以2,因为每次落地后反跳回原高度的一半
	}
	printf("高度:%f,第10次反弹高度:%f", h, f / 2);
}


代码15.
求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。
例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。
int main() {
	int a,b;//b是控制几个数相加,a是数值
	scanf("%d %d", &a, &b);
	int sum=0;//求和
	int m=0;
	for (int i = 1; i <= b; i++) {//while也可以
		m = m * 10 + a;//-> (0*10+2=2) ->2*10+a=22,以此类推
		sum += m;
	}
	printf("%d", sum);//结果
	return 0;
}
当键盘输入25时结果为24690


代码15.
回文数问题,个位与万位相同,十位与千位相同。如:12321   
int main() {
	int m = 0,a;
	scanf("%d", &a);//输入一个数,判断是否为回文数
	int k = a;
	while (k) {
		m = m * 10 + k % 10;
		k = k / 10;
	}
	if (m == a) {
		printf("YES");
	}
	else printf("No");
}
当输入1234时,不是回文数。12321时是回文数



代码16.
猴子吃桃问题:猴子第一天摘下若干个桃子,
当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。
到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
int main() {
	int m = 1, k = 9;//m为最后一天桃子个数,k是天数
	while (k > 0) {
		m = (m + 1) * 2;//从后往前推
		k--;
	}
	printf("%d", m);
	return 0;
}
注:列个方程,更容易理解



代码17.
编写一个unsigned xx(unsigned w),w是一个大于10的无符号整数,函数求出w的后n-1位的数作为函数值返回。
如输入1234则输出234,如输入45则输出5
unsigned xx(unsigned k) {
	if (k >= 10000)return k % 10000;
	else if (k >= 1000)return k % 1000;
	else if (k >= 100)return k % 100;
	return k % 10;
}
int main() {
	unsigned k;
	scanf("%u", &k);
	if (k >= 10)printf("%u", xx(k));
	else printf("输入错误");
	return 0;
}

代码18.
判断字符串是否回文,若是则输出YES,不是则输出No
int main() {
	char arr[80];
	scanf("%s", arr);
	int k=strlen(arr)-1;//计算长度,减一的目的就是下标从0开始
	int z = k,i;//z指向\0前一个字符
	for ( i = 0; i < k  / 2; i++) {
		if (arr[i] == arr[z]) { z--; continue; }//第一个和最后一个比较,第二个倒数第二个比较以此类推.......
		else break;//不相同退出循环
	}
	if (i == k / 2)printf("Yes");//当i等于k/2证明完全相同
	else printf("No");
	return 0;
}


代码19.
给定秒数 seconds ,把秒转化成小时、分钟和秒
#include
int main(){
    int a=0,b=0,seconds;//分别为小时分钟和秒
    scanf("%d",&seconds);
    int i=seconds/60;//计算共有多少60秒
    seconds=seconds%60;//求秒
    while(i>0){
        if(b>=60){a++;b=0;};//分钟>=60时,小时加一,分钟清空
        b++;//每一轮加一分钟
        i--;//循环次数减一
    }
    printf("小时:%d 分钟:%d 秒:%d",a,b,seconds);
}



代码20.
同构数:所谓“同构数”是指这样的数,它出现在它的平方数的右边
int main() {
	int i;
	for (i = 5; i <= 100;i++) {
		if (i < 10) {
			if ((i * i) % 10 == i)printf("%d\n", i);
		}
			else if (i >= 10) {
				if ((i * i) % 100 == i)printf("%d\n", i);
			}
	}
}
结果为:562576


代码21.
在字符串中所有数字字符前加一个$字符
int main() {
	char arr[80] = {0}, i = 0, j;
	scanf("%s", arr);
	int k = strlen(arr);
	while (arr[i]!='\0') {
		if (arr[i] >= '0' && arr[i] <= '9') {
			for (j = k; j > i; j--) {//取到\0位置
				arr[j] = arr[j - 1];//倒数第二赋给倒数第一,以此类推
			}
			arr[i] = '$';//最后将数字字符赋为'$'
			i++;//因为目前指向'$',++指向后面的数字字符,结合下面又++就指向新的数据,(即下一个字符)
		}

		k = strlen(arr);//每次都要找\0位置
		i++;//!!!
	}
	printf("%s", arr);
	return 0;
}
结果:输入:hello2022
           hello$2$0$2$2


代码22.
将所有大于1小于整数m的非素数存入xx所指数组中,非素数的个数通过k传回。
int fun(int arr[100],int m) {
	int i,j,k=0,n=0;
	for (i = 2; i < m; i++) {
		for ( j = 2; j < i / 2; j++) {
			if (i % 2 == 0) {//证明是非素数
				arr[n++] = i;//非素数放到数组中
				k++;//统计非素数个数
				break;
			}
		}
	}
	return k;
}
int main() {
	int arr[100],m;
	scanf("%d", &m);
	int k=fun(arr, m);
	printf("非素数个数:%d", k);
	return 0;
}
输入100时
非素数个数:47


代码22.
求x的y次方
int main() {
	int x, y;
	scanf("%d %d", &x, &y);
	if (y == 0 && x != 0) {
		printf("%d", 1);
	}
	else {
		int k = x;
		while (y >1) {
			x = x * k ;
			y--;
		}
		printf("%d",x);
	}
}



代码23.
杨辉三角:
    1
    1    1
    1    2    1
    1    3    3    1
    1    4    6    4    1
    int main() {
	int arr[5][5],j,i;
	for (i = 0; i < 5; i++) {//将每行第一个与最后一个赋值1
		arr[i][0] = 1;
		arr[i][i] = 1;
	}
	for (i = 2; i < 5; i++) {
		for (j = 1; j < i; j++) {//当前值等于上一行的第j个元素与j-1个元素的和
			arr[i][j] = arr[i - 1][j] + arr[i - 1][j - 1];
		}
	}
	for (i = 0; i < 5; i++) {//输出打印
		for (j = 0; j <= i; j++)
			printf("%5d",arr[i][j]);
		printf("\n");
	}
	return 0;
}



代码24.
将一个3*3的矩阵的上三角元素化为0
   1   0   0
   4   5   0
   7   8   9
   int main() {
	int arr[3][3], j, i;
	for (i = 0; i < 3; i++) {
		for(j=0;j<3;j++){
		scanf("%d", &arr[i][j]);//每个元素赋值
	 }
  }
	for (i = 0; i < 3; i++) {
		for (j = 3 - 1; j > i; j--) {
			arr[i][j] = 0;
		}
	}
	for (i = 0; i < 3; i++) {
		for (j = 0; j < 3; j++) {
			printf("%4d", arr[i][j]);
		}
		printf("\n");
	}
}



代码25.
将一个3*3的矩阵的下三角元素化为0
   1   2   3
   0   5   6
   0   0   9
  int main() {
	int arr[3][3], j, i;
	for (i = 0; i < 3; i++) {
		for(j=0;j<3;j++){
		scanf("%d", &arr[i][j]);//每个元素赋值
	 }
  }
	for (i = 0; i < 3; i++) {
		for (j = 0; j< i; j++) {
			arr[i][j] = 0;
		}
	}
	for (i = 0; i < 3; i++) {
		for (j = 0; j < 3; j++) {
			printf("%4d", arr[i][j]);
		}
		printf("\n");
	}
}



代码26.
求一个3*3矩阵对角线元素之和
int main() {
	int arr[3][3], j, i,sum=0;
	for (i = 0; i < 3; i++) {
		for(j=0;j<3;j++){
		scanf("%d", &arr[i][j]);//每个元素赋值
	 }
  }
	for (i = 0; i < 3; i++) {
		for (j = 0; j <= i; j++) {
			if (i == j)
				sum += arr[i][j];
		}
	}
	printf("对角线元素和为:%d", sum);
	1 2 3 
	4 5 6
    7 8 9
    对角线元素和为:15



代码27.
打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。
例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方
int main() {
	int k,m=0,sum=0,i;
	for (i = 100; i < 1000; i++) {
		k = i;//保存i的值,利用k循环
		while (k) {//每轮取k最后一位,取完将k/10进行调整,在立方求和
			m = k % 10;
			m = m * m * m;
			sum += m;
			k = k / 10;
		}
		if (sum == i)printf("水仙花数有:%4d\n", i);
		sum = 0;//记住每轮要清空sum的值
	}
	return 0;
}



代码28.
一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=123.编程找出1000以内的所有完数。
int main() {
	int i,j,sum=0;
	for (i = 6; i < 1000; i++) { //最小完数是6
		for (j = 1; j <= i / 2; j++) { 
			if (i % j == 0)
				sum += j;
		}
		if (sum == i)printf("完数有:%d\n", i);
		sum = 0;//清空,
	}
}



代码29.
输入两个正整数,求其最大公约数和最小公倍数
int main() {
	int a, b,temp;
	scanf("%d %d", &a, &b);
	int m = a, n = b;
	if (a <b) {
		 temp = a;
		a = b;
		b = temp;
	}
	while (b != 0) {
		temp = a % b;
		a = b;
		b = temp;
	}
	printf("最大公约数%d", a);
	printf("最小公倍数%d", m * n / a);
	return 0;
}



代码30.123个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
int main() {
	int i, j, k,m=0;
	for (i = 1; i <= 3; i++) {
		for (j = 1; j <= 3; j++) {
			for (k = 1; k <= 3; k++) {
				if (i != j && i != k && k != j){m++;printf("%d%d%d", i, j, k);}
			}
			printf("\n");
		}
	}
	printf("个数:%d",m);
	return 0;
}



代码31.
一元二次方程
int main() {
	float a, b, c,s=0;
	scanf("%f %f %f", &a, &b, &c);
	s = b * b - 4 * a * c;
	if (s > 0) {
		//有两个根
		float k1 = (-b + sqrt(s))/(2 * a);
		float k2 = (-b - sqrt(s))/(2 * a);
		printf("%f %f\n", k1, k2);
	}else if (s == 0) {
		//有一个跟
		float k1 = (-b + sqrt(s)) / (2 * a);
		printf("%f\n", k1);

	}
	else {
		printf("没有根");
	}
	return 0;
}
结果当输入 1 2 1-1.000000



代码32.
递归实现9*9乘法表
int fun(int n) {
	if (n==0)return 0;
	else {
		fun(n - 1);
		for (int i = 1; i <= n; i++) {
			printf("%d*%d=%d ", n, i, n * i);
		}
		printf("\n");
		return 0;
	}
}
int main() {
	fun(9);
}
结果:
1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
4*1=4 4*2=8 4*3=12 4*4=16
5*1=5 5*2=10 5*3=15 5*4=20 5*5=25
6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36
7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49
8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64
9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81



代码33.
实现字符串的连接
void fun(char* pa, char* pb) {
	while (*pa != '\0') pa++;//找到字符串尾
	while (*pb != '\0') {//进行连接,直到\0为止
		*pa = *pb;
		pa++; pb++;
	}
	*pa = '\0';//因为连接时没有带\0所以末尾要赋个\0
}
int main() {
	char arr1[200];
	char arr2[80];
	scanf("%s %s", arr1, arr2);
	fun(arr1, arr2);
	printf("%s", arr1);
}
结果:
hello world
helloworld



代码34.
实现字符串求长
int fun(char* p) {
	int k = 0;
	while(*p != '\0') {
		p++;
		k++;
	}
	return k;
}
int main() {
	char arr1[80];
	scanf("%s", arr1);
	int k=fun(arr1);
	printf("长度为%d", k);
}
结果: 输入 hello
      输出 5



代码35.
字符串的复制
void fun(char* pa,char* pb) {
	while (*pb!='\0') {
		*pa = *pb;
		pa++; pb++;
	}
	*pa = '\0';
}
int main() {
	char arr1[80];
	char arr2[80];
	scanf("%s %s", arr1, arr2);
	fun(arr1, arr2);
	printf("%s", arr1);
	return 0;
}
结果:输入hello world
     输出world



代码36.
字符串的比较
int fun(char* pa,char* pb) {
	while (*pb!='\0'&&*pa!='\0') {
		if (*pa != *pb)return 0;
		pa++;
		pb++;
	}
	return 1;
}
int main() {
	char arr1[80];
	char arr2[80];
	scanf("%s %s", arr1, arr2);
	if (fun(arr1, arr2) == 1)printf("两个字符串相等");
	else printf("两个字符串不相等");
	return 0;
}



代码37.
国家名排序
int main() {
	char arr[5][100];
	int i,j;
	for (i = 0; i < 5; i++) {
		scanf("%s", &arr[i]);//输入国家名
	}
	for (i = 0; i < 4; i++) {
		for (j = 0; j < 4 - i; j++) {//冒泡排序
			if (strcmp(arr[j], arr[j + 1])>0) {//从小到大排序
				char k[100];//存临时变量
				strcpy(k, arr[j]);//字符串的复制来赋值
				strcpy(arr[j], arr[j + 1]);
				strcpy(arr[j + 1], k);
			}
		}
	}
	for (i = 0; i < 5; i++) { printf("%s\n", arr[i]); }
	return 0;
}



代码38.
用递归方法将一个整数n转换字符串,例如1234转换成"1234"
int fun(int n) {
	if (n) { 
		fun(n / 10);
	printf("%c", (n % 10) + 48);
	}
	else {
		return 0;
	}
}
int main() {
	int n;
	scanf("%d", &n);
	fun(n);
}




代码39.
打印数字金字塔
          1
        1 2 1
       1 2 3 2 1
      1 2 3 4 3 2 1
     1 2 3 4 5 4 3 2 1
    1 2 3 4 5 6 5 4 3 2 1
   1 2 3 4 5 6 7 6 5 4 3 2 1
  1 2 3 4 5 6 7 8 7 6 5 4 3 2 1
 1 2 3 4 5 6 7 8 9 8 7 6 5 4 3 2 1
int main() {
	int i, j, k;
	for (i = 1; i <= 9; i++) {//一共九行
		for (j = 9; j > i; j--)
			printf(" ");//打印每行前的空格
		for (k = 1; k <= i ;k++) {
			printf("%d", k);//打印每行从1到达行数的数字,如此行要打印出1 2 1,打印1 2
		}
		int n = i;//记录值,
		for (k = i + 1; k <= i * 2 - 1; k++) {
			n--;
			printf("%d", n);//打印如1 2 1 中1 2后的1,如12321 中123 后的2 1
		}
		printf("\n");
	}
}



代码40.
从键盘输入一个日期(年、月、日),判断这是今年的第几天
int main() {
	int arr[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
	int year, month, day;
	scanf("%d %d %d", &year, &month, &day);//输入年月日
	int i,sum=day;//sum取日
	for (i = 0; i < month-1&&month!=1; i++) {//若是1月份直接取到day的值,因为是下标所以i
		sum += arr[i];//每个月天数相加
	}
	if ((year % 4 == 0 && year % 100 != 0 || year % 400 == 0)&&year>2) {//判断是否为闰年,若为闰年天数+1
		//闰年
		sum += 1;
	}
	printf("今天是这一年的第:%d天", sum);
	return 0;
}

c语言经典50道例题---精华篇_第1张图片

41.
int main() {
	float fz=1, fm=3,t=1+(fz/fm), sum=0,i=2,j=5;
	while (t >= 1e-6) {
		sum += t;//求和
		fz = fz*i;
		fm = fm * j;
		i++;//每次+1
		j += 2;//每次+2
		t = fz / fm;
	}
	printf("%f", sum * 2);//因为求得是派所以要*2,上述是2分之派的结果
}

![在这里插入图片描述](https://img-blog.csdnimg.cn/84f360236bc544fbadb021779a331389.png

42.
int main() {
char a; int i = 0, k = 0;
while ((a = getchar()) != '\n') {
	if (a >= '0' && a <= '9') {
		k = k * 16 + a - 48;//-48转换成数字
	}
	else if(a >= 'A' && a <= 'F') {
		k = k * 16 + a - 'A' + 10;
	}
}
printf("%d", k);
}

在这里插入图片描述

43.
int main() {
	char a; int i = 0, k = 0;
	while ((a = getchar()) != '\n') {
		if (++i > 20)break;
		if (a >= '0' && a <= '9') {
			k = k * 10 + a - 48;//-48转换成数字
		}
	}
	printf("%d", k);
}



44.
问题:企业发放的奖金根据利润提成。
利润(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,求应发放奖金总数?
int main() {
	float b1 = 100000 * 0.1;
	float b2 = b1 + 100000 * 0.075;
	float b4 = b2 + 200000 * 0.05;
	float b6 = b4 + 200000 * 0.03;
	float b10 = b6 + 400000 * 0.015;
	float k;
	scanf("%f", &k);
	if (k < 100000)printf("%f\n",  k * 0.1);
	else if (k < 200000)printf("%f\n",  b1 + (k-100000) * 0.075);
	else if (k < 400000)printf("%f\n",  b2 + (k-200000) * 0.05);
	else if (k < 600000)printf("%f\n",  b4 + (k-400000) * 0.03);
	else if (k < 600000)printf("%f\n", b6 + (k - 400000) * 0.015);
	else  {
		printf("%f", b10 + (k - 1000000) * 0.01);
	}




45.
一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
int main() {
	int i,x,y;
	for (i = 1; i <= 1000; i++) {
		x = sqrt(i + 100);
		y = sqrt(i+268);
		if (x * x == i+100 && y * y == i+268)printf("%d\n", i);
	}
}

在这里插入图片描述

46.
int main() {
	int i,x,y;
	for (i = 1000; i < 10000; i++) {
		x = i % 100;//取后两位
		y = i / 100;//取前两位
		x = x + y;
		if (x * x == i) {
			printf("%d\n", i);
		}
	}
	return 0;
}

在这里插入图片描述

47.
int fun(int m,int n) {
	for (int i = 2; i < m; i++) {
		if (m % i == 0)return 0;
	}
	for (int i = 2; i < n; i++) {
		if (m % i == 0)return 0;
	}
	return 1;
}
int main() {
	int i = 6,k,j;
	for (; i <= 50; i++) {
		for (j = 1; j < i; j++) {
			k = i - j;//保证k+j等于i
			if(fun(k, j)==1)printf("%d,%d和%d\n",i,k,j);
		}
	}
	return 0;
}

c语言经典50道例题---精华篇_第2张图片

48.
int main() {
	char A,B,C;
	for (A = 'x'; A <= 'z'; A++) {
		for (B = 'x'; B <= 'z'; B++) {
			for (C= 'x'; C<= 'z'; C++) {
				if (A != B && A != C && B != C) {
					if (A != 'x' && C != 'x' && C != 'z') {
						printf("A->%c", A);
						printf("B->%c", B);
						printf("C->%c", C);

					}
				}
			}
		}
	}
	return 0;
}

在这里插入图片描述

49.
int main() {
	int arr[80] = { 2,4,6,8,10,12,14,16,18,20 };
	int k,i,j;
	scanf("%d", &k);
	for (i = 0; i < 10; i++) {
		if (k < arr[i]) {
			for (j = 10; j > i; j--) {
				arr[j] = arr[j - 1];//后移
			}
			arr[i] = k;//给小于的位置赋值
			break;//跳出循环,没有break结果不对
		}
	}
	for (i = 0; i < 11; i++) {
		//打印
		printf("%d ", arr[i]);
	}
	return 0;
}

在这里插入图片描述

50.
int main() {
	char arr[100];
	gets(arr);//输入字符串
	int i = 0,sum=1,flag=1;//下标
	while (arr[i] != '\0') {
		if (flag == 1 && arr[i] >= 'a' && arr[i] <= 'z') {
			arr[i] -= 32;//转大写
			flag = 0;
		}
		if (arr[i] ==32) {//32是空格
			sum++;
			flag = 1;
		}
		i++;
	}
	printf("单词个数为:%d", sum);
}

你可能感兴趣的:(c语言,c++,算法)