讲解视频:
P3-2.【结构化程序设计】第二节——知识要点:多分支选择语句
知识要点:多分支选择语句
一、任务分析
已知某公司员工的保底薪水为500,某月销售商品的利润profit(整数)与利润提成的关系如下(单位:元):
profit<1000 没有提成
1000≤profit<2000 提成10%
2000≤profit<5000 提成15%
5000≤profit<10000 提成20%
10000≤profit 提成25%
要求输入某员工某月的销售利润,输出该员工的实领薪水。
本任务涉及到多分支结构,可以用if语句的嵌套来实现,也可以用swith语句实现。
二、必备知识与理论
1.用if语句实现多分支选择
说明:在嵌套的if语句中,如果if和else的个数不一致,C语言规定:else总是与最近的if语句配对。也可以加花括号来确定配对关系。
2.switch语句
上面的符号函数只有3个分支,如果分支较多,嵌套的if语句层数就多,程序冗长且可读性降低。C语言提供的switch语句可以直接处理多分支选择,并且switch语句条理清楚,结构明了。它的格式如下:
switch(表达式)
{
case 常量表达式1:语句1;
case 常量表达式2:语句2;
…
case 常量表达式n:语句n;
[default:语句n+1;]
}
执行流程:先计算表达式的值,如果其值与哪个常量表达式的值相匹配,就执行哪个case后面的语句;如果表达式的值与任何一个case后面的常量表达式的值都不相同,当有default子句时,则执行default后面的执行语句;如果没有default子句,则程序直接跳出switch语句。
三、任务实施
本任务涉及到多分支结构,可以用if语句的嵌套来实现,也可以用swith语句实现。
方法一:用if语句的嵌套编写程序。
程序代码如下:
#include<stdio.h>
#define B 500
main()
{
int prot,n;
float salary;
printf("please input profit:");
scanf("%d",&prot);
if(prot<1000)
salary=B;
else if(prot<2000)
salary=B+prot*0.1;
else if(prot<5000)
salary=B+prot*0.15;
else if(prot<10000)
salary=B+prot*0.2;
else salary=B+prot*0.25;
printf("实领薪水:%.2f\n",salary);
}
方法二:用switch语句编写程序。
分析:(1) switch后面括号内的表达式应有一个确定的值以便与case后的常量表达式的值相匹配,多个case语句可以共用一组执行语句,设n=prot/1000,得一个整数商,则
case 2:
case 3:
case 4: salary=B+prot*0.15;
(2) 因为case语句的执行规则是找到一个入口后顺序执行后面的语句,每一个员工的工资只有一个计算标准,按照一个标准计算之后其他语句不必再执行,所以需要用break语句来结束switch结构。
程序代码如下:
#include<stdio.h>
#define B 500
main()
{
int prot,n;
float salary;
printf("please input profit:");
scanf("%d",&prot);
n=prot/1000;
switch(n)
{
case 0:salary=B;break;
case 1:salary=B+prot*0.1;break;
case 2:
case 3:
case 4:salary=B+prot*0.15;break;
case 5:
case 6:
case 7:
case 8:
case 9:salary=B+prot*0.2;break;
default:salary=B+prot*0.25;
}
printf("实领薪水:%.2f\n",salary);
}
四、深入训练
1. 从键盘输入任意字符,判断是字母、数字还是其它字符。
提示:(1)ch>='A'&& ch<='Z'|| ch>='a'&& ch<='z'为字母字符。
(2)ch>='0'&& ch<='9'为数字字符。
(3)否则为其它字符。
本程序可用嵌套的if else语句实现。
2.输入两个数字及运算符(+、-、*、/),输出其运算结果。
提示:(1)当除数b为0时,输出必要的信息提示。
(2)运算符op定义为字符型,如果输入(+、-、*、/)之外的字符,显示信息提示。