内容正文:
4.3 5.2 2
【技能实践】
1.(1)floatx,y;
(2)(x>-1)
(3)(x>=0)
(4)y=fabs(x-log(5)/log(10))
2.year%4==0&&year%100||year%400==0
3.(1)c=getchar()
(2)isalpha(c)
(3)isdigit(c)
4.(1)c=c+5
(2)c=c+5-26
5.(1)scanf("%f%f%f",&a,&b,&c);
改为scanf("%lf%lf%lf",&a,&b,&c);
(2)a+b>c&&a+c>b
改为a+b>c&&a+c>b&&b+c>a
(3)a==b==c改为a==b&&b==c
6.#include<stdio.h>
intmain()
{ doublex;
scanf("%lf",&x);
printf("%.2lf,",x);
if(x<0)printf("error!");
elseif(x<60)printf("%c",'F');
elseif(x<70)printf("%c",'E');
elseif(x<80)printf("%c",'D');
elseif(x<90)printf("%c",'C');
elseif(x<100)printf("%c",'B');
elseif(x==100)printf("%c",'A');
elseprintf("error!");
}
第二节 switch语句
【知识梳理】
一、switch的用法
2.相等 break
3.(1)分号
(2)整 字符
(3)":" 常 变 1 整 字符
三、switch与多分支if的关联
1.多
2.1 从匹配处向下依次执行 break
【巩固练习】
1.4
2.∗∗0∗∗
∗∗2∗∗
3.a=2
4.passwarn67
5.m=3
【拓展练习】
1.AB
2.a=5,b=6
3.23
4.(1)'a' (2)'b' (3)'c' (4)'d' (5)break;
5.(1)m (2)len=31 (3)len=29 (4)break;
【技能实践】
1.Welcome!
2.(1)c=(int)(s/200)
(2)printf("%f",p∗w∗s∗(1-d/100.0));
3.(1)switch(pk=getchar())
(2)case'6':case'7':case'8':case'9':f=-1;break;
(3)case'A':case'J':case'K':case'Q':f=0;break;
(4)case'w':case'W':f=1;break;
(5)if(f==-1)printf("落选");
(6)elseif(f==0)printf("待定");
(7)elseif(f==1)printf("晋级");
4.#include"stdio.h"
main()
{ intn;
scanf("%d",&n);
if(n<1||n>12)
printf("输入出错!");
else
{ switch((n-1)/3)
{ case0:printf("春季!");break;
case1:printf("夏季!");break;
case2:printf("秋季!");break;
case3:printf("冬季!");break;
}
}
}
第3节 选择结构应用举例
【巩固练习】
1.2022isnotaleapyear
2.0.600000
3.ch>='A'&&ch<='Z' ch=ch-32
4.(1)31
(2)year%4==0&&year%100! =0||year%400
==0
61
单招零距离计算机专业综合下册
总复习方案·第四章 选择结构程序设计
6. 程序设计题:根据成绩,输出其等级。用多分支if语句实现。等级标准如下表所示:
分数x
等级
x-100
A
90x100
B
80<x90
C
70<x<80
D
60x<70
E
x~60
1
共include<stdio.h
int main)
*END4
第二节
switch语句
知识体系
[switch的用法
break的用法
switch
嵌套switch
多分支if与switch的关联
知识梳理
一、switch的用法
实际问题中常常需要用到多个分支的选择,这些当然可以用嵌套的f语句来处理,但往
往造成if嵌套的层次很多,使程序完长,不便于阅读。此时,便可使用switch语句实现。
1.一般形式:
switch(表达式
)
case常量表达式1:语句1:[break;]
case常量表达式2:语句2;break;
case常量表达式3:语句3;[break:]
.59.
单招零距离·计算机专业综合·下册
._.....
case常量表达式n:语句n;[break;]
[default:语句n十1;]
2. 执行过程:当表达式的值与某个case后常量表达式的值
时,便从该case后的
语句开始执行,直至执行到
语句或执行到switch语句结束;若所有case后的常量表
达式与表达式的值均不等时,则执行default后的语句,且default书写位置不影响表达式与
case后常量表达式的匹配。
3.注意点:
(1)switch(表达式)后不能接"
型或
(2)switch(表达式)中,表达式的类型必须为
型,不允许是浮点型;
量,不能为
,常量表达式必须为
(3)case常量表达式后接
量,目
个,其类型必须为
仅有
型或
型,不允许是浮点型;
(4)同一个switch语句中的所有case后面的常量表达式的值都必须互不相同
(5)当语句超过一条时,可以不用括起来;
(6)break语句用于跳出它所在的switch语句,否则会继续依次执行其后的case后的语句。
二、switch语句的嵌套
1.一般形式:
switch(表达式1)
__
case常量表达式:语句:[break;
case常量表达式:
switch(表达式2)
case常量表达式:语句;[break:]
case常量表达式:语句;break:
.____.
case常量表达式:语句;[break;]
[default:语句:]
[break;]
.____.
case常量表达式:语句:break:
[default:语句;]
2. 注意点:break语句仅跳出其所在层的switch语句,而不能跳出外层的switch语句。
三、switch与多分支if的关联
1. 两者均是有
条分支;
条分支;而switch会
2. 多分支if至多会执行
,若需
终止其继续执行,则分支后应加
语句。
.60.
总复习方案·第四章 选择结构程序设计
典例精析
【例1】 程序阅读题:
#include <stdio.h>
int main()
、
char grade-C;
switch(grade)
case'A':printf(“90-10o
”);
case'B:printf(“80-9o
”);
case'C':printf(“70-80
”);
case'D':printf(“60-7o
”);break;
case'E':printf(“<6on”);
default:printf(“error!)n”)
_{
【分析】
本题的执行过程为:首先从键盘接收一个字符C并将其放在变量grade中,然后
执行switch语句。switch后面的条件表达式为grade,则表达式的值为字符C,用字符C依次
与下面的case中的常量进行匹配。与第3个case后的常量匹配,则从其后的语句开始往下执
行程序(在执行过程中不再进行匹配。)因此先执行printf(“70一80
”);,屏幕上输出70一80
并换行;再往下继续执行printf(“60一70
”),屏幕上输出60一70,并换行;再继续执行break
此时跳出switch语句。
【答案】
70-80
60-70
【例2】运输公司对用户计算运费。路程(s)越远,每公里运费越低。标准如下:
s250km
没有折扣
250<s<500
2%折扣
500s1000
5%折扣
1000<s2000
8%折扣
2000s3000
10%折扣
3000<s
15%折扣
设每公里每吨货物的基本运费为p,货物重为w,距离为s,折扣为d,则总运费f的计算公
式为:f一p*w*s*(1一d),请编程实现
【分析】首先分析折扣变化的规律性:折扣的“变化点”都是250的倍数,设c的值为s
250,即c代表250的倍数。则c和折扣之间的关系如下;
c1,无折扣;
1<c2,折扣d-2%
2c5,d-5%
4<c8,d-8%
.61.
单招零距离·计算机专业综合·下册
8 c 12,d-10%
c12,d-15%
【答案】
#include <stdio.h
int main()
int c,s;
float p,w,d,f;
scanf(”%f,%f,%d”,&p,&.w,&s)
if(s-3000)c-12;
else c-s/250;
switch(c)
)
case 0:d-0:break
case 1:d-2;break;
case 2:
case 3: d-5;break;
case4:
case5:
case6:
case 7: d-8;break;
case8:
case9:
case 10:
case 11:d-10;break;
case 12:d-15;break
)
f-p*w*s×(1-d100.0);
printf("freight-%15,4fn",f;
巩固练习
1. 若inti一1;执行下列程序段后,变量i的值是
switch(i)
(case0:i十-1;
case1:i+-1:
case2:i+-1;
default:i+-1;
. 62·
总复习方案·第四章 选择结构程序设计
2. 设有说明语句:”inta一1,b一0;”,则执行以下语句后,输出结果为
switch(a)
case 1:switch(b)
case 0:printf("**0**n”);break;
case1:printf(”**1**n”);break;
case 2:printf("*×2×*
”);break;
)
3.写出程序的运行结果:
#include<stdio.h>
int main()
( intx-1,a-0;
switch(十十x)
default:a十十;
case2:a十+:
case1:a十+;break:
case0:a十 +:
)
printf("a-%dn",a);
4.写出程序的运行结果:
#includeSstdio.h>
#include<ctype.h>
int main()
)。
char n-C;
switch(tolower(n))
/tolower(n)将字符转换为相应小写字母,但变量n中的内容不变。
(default: printf("error");break;
case'a':case'b':printf("good"):break:
case'c':printf("pass"):
case'd':printf("warn");
printf("\t%d",n);
5.写出程序的运行结果:
#include <stdio.h>
int main()
(inta-16,b-15,m-0;
switch(a%3)
.63.
单招零距离·计算机专业综合·下册
case 0:m十+;break
case1:m 十;
switch(b%2)
.
default:m十十;
case0:m十十:break:
)
break;
default:m十+;
printf("m=%d
",m);
~
拓展练习
#C}
1. 阅读下面程序,当从键盘输入字母A时,程序的运行结果为
共include stdio.h
intmain()
( char ch;
ch一getchar();
switch(ch)
case'A':printf(“%c”,A);
case'B': printf("%c”,B);break
default:printf(“%s
”,”other”)
)
2. 阅读程序,分析结果是
共includestdio. h
int main()
intx-1,a-2,b-3;
switch(x)
case0:a十十;b+十;
case1:a+十;b+十;
case2:a十十;b++;
default:a+十;b+十;
)
printf("a-%d,b-%dn”,a,b)
)
3. 阅读程序,分析结果是
#includestdio.h
intmain()
.64·
总复习方案·第四章 选择结构程序设计
( intx-2;
switch(x)
case 1:printf("%d”,x十十);
case 2:printf(”%d",x十十);
case3:printf("%d",x十十);break;
default:printf("%d”,x十十);
)
)
4. 程序填空题:输入等级,输出该等级的分数段,评分标准如下:
成绩
等级
90-100
老#心#
70-89
60-79
59以下
#include<stdio.h
#include<ctype.h>
int main()
char grade;
scanf("%c”,&.grade)
switch(tolower(grade))
{
case (1):printf("90-1oo”);break;
case (2):printf("70-89"):break;
case (3):printf("6o-79");break;
case(4):printf("<60”);
(5);
default: printf("error!")
5.程序填空题;以下程序计算某年某月有几天。一年中1、3、5、7、8、10、12月份为31天,
4、6、9、11月份为30天,闺年的2月为29天,非闺年的2月为28天
共include<stdio.h>
int main()
②
int y,m,len;
printf(”请输入年份与月份:”)
scanf("%d%d",&.y,&.m);
switch( (1))
case 1:case 3: case 5:case 7:case 8:case 10: case 12: (2) ; break;
.65.
单招零距离·计算机专业综合·下册
case 2:len-28;
if(y%4-08.8.y%100!-0lly%400-0)(3);
(4);
case 4:case 6:case 9:case 11: len-30: break;
default: printf("error");
)
printf("%d年%d月的天数为%dn”,y,m,len);
)
技能实践
#C}
1. 程序阅读题;
#include<stdio.h>
int main()
( intx-1,y=0;
switch(x)
case 1:switch(y)
case O: printf("Welcome! n");break;
case 1: printf("Good Bye!n");break
)
break;
case 2:printf("Come in!n");
)
)
2.程序填空题:运输公司对客户计算运费,输入每吨每千米货物的运费、货物重量、运输
距离,输出总运费。运输距离(以s表示,单位为千米)越远,单位运费(以元/(吨·千米)为单
位)越低。计算标准备如下;
(s<200
没有折扣
200s400
2%折扣
400s<800
5%折扣
800s<1600
8%折扣
1600<s<2400
10折扣
2400二s
15%折扣
设每吨每千米货物的运费为p,货物为w,距离为s,折扣为d,则总运费的计算公式为:总
运费-p×w×s×(1-d)
共include<stdio.h>
int main()
i intc.d;
doublep,w,s;
scanf(”%lf%lf%lf”,&.p.&.w,&.s):
if(s<o|1p<o||w<o)
.66.
总复习方案·第四章 选择结构程序设计
printf(”输入出错”)
else
if (s-2400)c-12;
else
(1)
:
switch(c)
1
case 0:d-0;break;
case 1:d-2;break;
case 2: case 3:d-5;break;
case 4: case 5: case 6: case 7:d-8;break;
case 8: case 9: case 10:case 11:d-10;break;
case 12:d-15;break;
(2)
3. 程序改错题:下列程序模拟抽签过程。用符号1~9表示扑克牌A、2~9,用符号A表
示扑克牌10,用符号J、Q、K表示扑克牌J、Q、K,用符号w、W表示扑克牌“小王”、“大王”。若
抽到扑克牌A、2~9表示“落选”,抽到扑克牌10、J、Q、K表示“待定”,抽到扑克牌“小王”、“大
王”表示“晋级”。从键盘输入抽到的牌,输出抽签结果。程序有错,请改正,修改时不得增行或
减行。
共include<stdio.h>
int main()
r char pk;int f;
*found*关***关关关关*关关
switch(getchar(pk))
case 1:case 2.case 3:case 4:case 5:
**found*******¥****/
case 6:case 7:case 8:case9:f--1
关*found*关关** 关关*****/
case'A':caseJ':caseK':caseQ':f-0:
关$ound*关关*****关关关关/
case'w':case'W::f-1;
default:f--2;
。.
(*关*关*****关。
if(f一-1)printf("落选”);
.67.
单招零距离·计算机专业综合·下册
else if(f-0)printf("待定")
/关*关*关**关*关关*$ound关*※关*关*兴关关关关/
else if(f-1)printf("晋级");
elseprintf(”出错”);
4. 程序设计题:从键盘输入一个整数,如果整数在1一12,则输出对应的季节(月份和季节
对应关系如下表所示),否则输出“输入出错!”。
#includestdio.h>int main( )
关关 关关 *关关 **BEGIN** 关*关* 苦 *关
月份
季节
1-3月
春季
4一6月
夏季
7一9月
秋季
10-12月
冬季
* 关**关关*关关END*关*关关关关关关
第二节
选择结构应用举例
知识体系
[分段函数问题(如商场打折、行李计费、IP地址分类问题等
最大值最小值问题
间年问题
选择结构应用举例方程求解
日期相关问题
四则运算
知识梳理
选择结构通过判断某些特定条件是否满足来决定下一步的执行流程,是非常重要的控制
结构。常见的有单分支选择结构、双分支选择结构、多分支选择结构以及嵌套的分支结构,形
式灵活多变。
C语言中的选择结构语句有两种:if语句和switch语句。switch语句一般用于判断固定
值的时候;if语句用于判断区间或范围的时候。用switch语句能实现的,用f语句都能实现
反之则不然。
.68.