C基础第四天

文章展示了使用C语言中的switch和for/while循环解决实际问题的四个例子:企业奖金计算、学生成绩管理、找出1000以内的质数以及猴子吃桃问题。这些示例展示了不同情况下的条件分支和循环结构的应用。
摘要由CSDN通过智能技术生成

第1题

企业发放的奖金根据利润提成。(witch做法)

利润低于或等于 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(int argc, const char *argv[])
{
	float a=0;
	int income;
	printf("请输入当月利润是:(万元)\n");
	scanf("%d",&income);
	switch(income/10){
	case 0:
		a=income*0.1;
		break;
	case 1:
		a=(income-10)*0.075+10*0.1;
		break;
	case 2:
		a=(income-10)*0.075+10*0.1;
		break;
	case 3:
		a=(income-20)*0.05+10*0.075+10*0.1;
		break;
	case 4:
		a=(income-20)*0.05+10*0.075+10*0.1;
		break;
	case 5:
		a=(income-40)*0.03+20*0.05+10*0.075+10*0.1;
		break;
	case 6:
		a=(income-40)*0.03+20*0.05+10*0.075+10*0.1;
		break;
	case 7:
		a=(income-40)*0.03+20*0.05+10*0.075+10*0.1;
		break;
	case 8:
		a=(income-40)*0.03+20*0.05+10*0.075+10*0.1;
		break;
	case 9:
		a=(income-60)*0.015+20*0.03+20*0.05+10*0.075+10*0.1;
		break;
	case 10:
			a=(income-100)*0.01+40*0.015+20*0.03+20*0.05+10*0.075+10*0.1;
	default:
		printf("输入有误!\n");
	}
	printf("当月奖金为:%g万元\n",a);
	return 0;
}

该做法只限于利润的输入为整数,因为Switch的选项不支持浮点类型

income/10 是提出数字的开头数字,用于case的常量选项

%g 占位符代表输出有效位数

运行结果如下:

第2题

用switch实现学生成绩管理:(提示可以看swith章节的练习3)

从外部输入一个学习成绩,范围为0 – 100,

成绩大于等于90分,则输出A,

成绩大于等于80,则输出B,

成绩大于等于60,则输出C,

小于60,则输出D

#include <stdio.h>
int main(int argc, const char *argv[])
{
	int grade;
	printf("请输入学生的分数:\n");
	scanf("%d",&grade);
	switch(grade/10){
	case 10:
	case 9:printf("该学生的等级为A\n");
		   break;
	case 8:
		   printf("该学生的等级为B\n");
		   break;
	case 7:
	case 6:
		   printf("该学生的等级为C\n");
		   break;
	case 5:
	case 4:
	case 3:
	case 2:
	case 1:
	case 0:
		   printf("该学生的等级为D\n");
		   break;
	default:
		   printf("输入有误!\n");

	}
	return 0;
}

grade/10 代表数字的开头,用于 case 常量选项

case 的内容不写或者不写 break 会顺序执行下去,所以可以省略

运行结果如下:

第3题

求1000以内所有的质数

质数:只能够1和它本身整除

解析:用双重循环,第一层循环2~1000,第二层循环 2~这个数/2之内有没有能整除的因子

如果有则 break 进入下个数的循环

while循环做法:

#include <stdio.h>
int main(int argc, const char *argv[])
{   
	int flag;
	int num=0;
	int i=2;
	int j;
	printf("1000以内的质数有\n");
	while(i<1000){
		flag=1;
        j=2;
		while(j<=i-1){
			if(i%j==0){
				flag=0;
				break;
			}
			j++;
		}
		if(flag){
			printf("%d\t",i);
			num++;
		}
		i++;
	}
	printf("\n");
	printf("共有%d个质数\n",num);
	return 0;
}

每次内循环完都要重置 j flag

因为 j 不能等于 1,所以从 2 开始

j 必须小于 i ,且不能等于 i ,因为质数可以被数字本身整除,所以用 i-1

当 i 等于 2 的时候没有走内层 while 循环,直接就判断 flag ,然后输出了

for循环做法:

#include <stdio.h>
int main(int argc, const char *argv[])
{   
	int flag;
	int num=0;
	printf("1000以内的质数有\n");
	for(int i=2;i<1000;i++){
		flag=1;
			for(int j=2;j<i;j++){
				if(i%j==0){
					flag=0;
					break;
				}	
			}
		if(flag){
			printf("%d\t",i);
			num++;
		}
	}
	printf("\n");
	printf("共有%d个质数\n",num);
	return 0;
}

用 flag 标记已经被其他因数整除的数字,等待跳出里面那层循环之后,判断是否被其他因子整除过,只输出没被整除的

1 不算质数 ,运行结果如下:

 

第4题

猴子吃桃问题:

猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个

第二天早上又将剩下的桃子吃掉一半,又多吃了一个。

以后每天早上都吃了前一天剩下 的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。

求第一天共摘了多少。

提示:倒着往前退,找到公式规律

while 循环的做法:

#include <stdio.h>
int main(int argc, const char *argv[])
{
	int i=10;
	int taozi=0;
	while(i>=1){
		if(i==10){
			taozi=1;
		}else{
			taozi=(taozi+1)*2;
		}
		printf("第%d天有%d个桃子\n",i,taozi);
		i--;
	}
	return 0;
}

for 循环的做法:

#include <stdio.h>
int main(int argc, const char *argv[])
{
	int taozi=0;
	for(int i=10;i>=1;i--){
		if(i==10){
			taozi=1;
		}else{
			taozi=(taozi+1)*2;
		}
		printf("第%d天有%d个桃子\n",i,taozi);
	}
	return 0;
}

代码运行结果如下:

第5题

打印99乘法表

1 x 1 = 1

2 x 1 = 2 2 x 2 = 4

3 x 1 = 3 3 x 2 = 6 3 x 3 = 9

while循环做法:

#include <stdio.h>
int main(int argc, const char *argv[])
{
	int i=1;
	int j;
	while(i<10){
		j=1;
		while(j<=i){
			printf("%dx%d=%d\t",i,j,i*j);
			j++;
		}
		printf("\n");
		i++;
	}
	return 0;
}

for循环做法:

#include <stdio.h>
int main(int argc, const char *argv[])
{
	for(int i=1;i<10;i++){
	for(int j=1;j<=i;j++){
	printf("%dx%d=%d\t",i,j,i*j);
	}
	printf("\n");
	}
	return 0;
}

运行结果如下:

第6题

for循环打印以下形状

********
 ********
  ********
   ********
    ********
     ********

while循环做法:

#include <stdio.h>
int main(int argc, const char *argv[])
{
	int i=1;
	int k;
	int j;
	while(i<=6){
		k=0;
		while(k<=i-1){
			printf(" ");
			k++;
		}
		j=0;
		while(j<=8){
			printf("*");
			j++;
		}
		printf("\n");
		i++;
	}
	return 0;
}

for循环做法:

#include <stdio.h>
int main(int argc, const char *argv[])
{
	for(int i=1;i<=6;i++){
		for(int k=0;k<=i-1;k++){
			printf(" ");
		}
		for(int j=1;j<=8;j++){
			printf("*");
		}
		printf("\n");
	}
	return 0;
}

运行结果:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值