第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;
}
运行结果: