内容正文:
总复习方案·第四章选择结构程序设计
第四章
选择结构程序设计
大纲要求
1.掌握f语句。
2.理解switch语句实现多分支选择。
3.理解选择结构的嵌套。
第一节f语句
知识体系
©⑤
单分支
简单if
双分支
多分支f
嵌套if
一般嵌套
知识梳理
⊙Y⑤
一、选择结构
在顺序结构中,各语句按排列的先后次序无条件地顺序执行。而在实际应用中,常需要根
据某个条件来判断是否执行指定的任务。在程序中,利用选择结构来检查所指定的条件是否
满足,并根据检查的结果决定执行哪组语句。
l.C语言中的选择结构语句:if语句、switch语句。
2.条件:作为选择执行哪组语句的依据,可以是任意类型的表达式,通常是由
运算符组成的表达式。
3.条件判断:对指定条件进行判断,判断的结果有两种一真或假,
即为真,0
即为假。
二、简单if语句
1.单分支结构if语句
语句格式:if(表达式)语句:
语法含义:若表达式的值为非0(真),则执行语句:否则不执行语句。
2.双分支结构if…else…语句
语句格式:if(表达式)
语句1;
else
语句2;
·51·
单招零距离·计算机专业综合·下册
语法含义:如果表达式的值为非0(真),则执行语句1,否则执行语句2。
三、嵌套if语句
在f语句中又包含其它一个或多个f语句,这被称为f语句的嵌套。
1.一般形式
f(表达式1)
if(表达式2)语句1;[else语句2:]
[else
if(表达式3)语句3;[else语句4:]
说明:嵌套的形式有很多,可为单分支,也可为双分支。当嵌套在真分支的f结构为单分
支时,内嵌的f语句必须用
括起来。
2.嵌套的特殊形式
在f结构中,若内嵌的f总是出现在上层f的假分支中,该结构被称为
其一般形式为:
f(表达式1)
语句1:
else if(表达式2)
语句2:
else if(表达式3)
语句3:
4
else语句n;
说明:else与if之间需留有空格,为便于阅读,书写时每个else应对齐。
3.嵌套f的使用说明
(1)嵌套f结构中,有f就必然有
,else的个数
于if的个数:
(2)分析嵌套f结构的关键是进行f一else配对,以便分清嵌套层次,配对原则为
(3)一个完整的f结构,无论嵌套多少层,最多仅会执行其中
条分支。
典例特析
Y⊙
【例1】阅读程序,分析运行结果:
#include <stdio.h
int main()
{inta=1,b=3,c=5:
if (c==a+b)
printf("yes
");
else
printf("no
"):
·52·
总复习方案·第四章选择结构程序设计
【分析】本题考点是if语句基本形式的第二种。若c==a+b成立,则执行printf("yes
n");否则(即c==a十b不成立),执行printf("non"):运算符十的优先级高于==,因此先
算a十b,值为4,表达式5==4不成立,因此执行printf("non");即输出字符串no。
【答案】no
【例2】阅读程序,分析运行结果:
#include <stdio.h>
int main()
{intx=2,y=-1,z=5:
if(x<y)
if(y<0)
z=0:
else
z=z十1:
printf(“%d小n”,z):
【分析】遇到选择结构,首先要明确条件表达式成立时执行哪些操作。本题中,第一个「
语句,其后的复合语句没有大括号{},说明复合语句中只包含一条语句,进而省略了{}。内
层的if..else..是if语句的第二种基本形式,在结构上视为一条语句。因此内层的if.else.
作为第一个f语句的复合语句。
若表达式x<y成立,则继续判断,若y<0,则执行z=0;否则(即y>=0),执行z=z十1;
输出z。因2>一1,故表达式x<y不成立,因此不执行内层的if…else….进而z中的值没有
被改变。输出z中的值为5
【答案】5
【例3】题目:企业发放的奖金根据利润提成:利润(x)低于或等于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%提成,从键盘输入当月利润x,求应发放奖金总数
bonus?
【分析】本题考点是多分支的if语句。根据题目,可以分析得出应发奖金bous和利润
x(单位:万元)之间的对应关系如下:
利润x(万元)
应发奖金bonus
x<=10
0.1¥x
10<x<=20
10*0.1+(×-10)¥0.075
20<x<=40
1000.1十10*0.75+(x-20)00.05
40<x<=60
10%0.1+10¥0.75+20%0.5+(x-40)%0.03
60<x<=100
10¥0.1+10*0.75+20*0.5+20*0.3+(x-60)*0.015
x>200
10¥0.1+10¥0.75+20*0.5+20*0.3+40¥0.15+(x-100)*0.01
【答案】
程序源代码:
·53·
单招零距离·计算机专业综合·下册
#include <stdio.h
int main()
int x,bonus;
scanf("%d",&.x):
if(x<=10)
bonus=x 0.1;
else if(x<=20)
bonus=10¥0.1+(x-10)*0.075:
else if(x<=40)
bonus=10¥0.1+10*0.75+(x-20)*0.05:
else if(x<=60)
bonus=10*0.1+10*0.75+20*0.5+(x-40)¥0.03;
else if(x<=100)
bonus=10*0.1+10¥0.75+20*0.5+20¥0.3+(x-60)¥0.015:
else
b0nus=10*0.1+10¥0.75+20*0.5+20*0.3+40*0.15+(x-100)*0.01;
printf("bonus=%d",bonus);
巩固练习
©r⊙
1.写出程序的运行结果:
#include <stdio.h>
int main()
int a=0,b=1,c=++b;
if (a++)
c++:b++;
printf("a,b,c=%d,%d,%d",a,b,c):
2.为了使以下程序的输出结果为t=4,输入值a和b应满足的条件是
#include <stdio.h
int main()
int s,t,a,b:
scanf ("d,%d",&.a,&.b):
s=1;
t=1;
if(a>0)s=s十1:
if (a>b)t=s+t;
else if(a==b)t=5;
else t=2 s;
printf("s=%d,t=%d",s,t);
·54·
总复习方案·第四章选择结构程序设计
3.程序填空题:补充程序段,使其实现的功能与下列条件语句一致。
c-a>b?a:b;
程序段1:
f
c=a;else
程序段2:
if(a>c)
4.下列四个程序段中含有嵌套f结构的有
,其中含有多分支f结构的有
:程序段②中存在
个f结构,程序段③中存在
个f结构:程序段
③中去掉{}后结构发生什么变化?
①if(a<1)x=1:
②if(a<1)x=3:
if(a<2)x=2;
else if (a<2)x=2;
else x=3;
else x=1;
③if(a<3){if(a<2)x=2:}
④if(a<1)x=1:
else x=3;
if(a<2)x=2;
if(a<1)x=1:
if(a<3)x=3:
5.下面程序的功能是:根据下表中给定的函数关系,对输人的每个x值计算出相应的y
值。请填空:
函数关系
y
1<x<=5
x
0<x<=1
2x
x<=0
x-1
其它
-1
#include <stdio.h
int main()
int x,y;
scanf("%d",&x);
f((
))y=x¥x;
else if (
))y=2*x;
else if(x<=0)y=x-1;
else
printf("x=%d,y=%d
",x,y)
试
拓展练习
@gY⑤
1.下述程序的输出结果是()。
#include <stdio.h
int main (
{inta=0,b=0,c=0;
·55·
单招零距离·计算机专业综合·下册
if(++a>0||++b>0)
++c:
printf("%d.%d,%d",a,b.c);
}
A.0,0,0
B.1,1,1
C.1,0,1
D.0,1,1
2.若执行以下程序时从键盘上输入3和4,则输出结果是()。
int main (
int a,b,s;
scanf ("%d%d",&a,&b);
s=a:
if(a<b)s=b;
S米=S:
printf ("%d
",s);
}
A.14
B.16
C.18
D.20
3.当a=1,b=3,c=5,d=4时,执行完下面一段程序后x的值是()。
if (a<b)
if (c<d)x=1;
else
if (a<c)
if (b<d)x=2;
else x=3;
else x=6;
else x=7;
A.1
B.2
C.3
D.4
4.从键盘上输入5,程序运行结果是
#include<stdio.h
int main()
int x;
scanf("%d",&.x):
if(x-->5)
printf("%d
",x):
else
printf("%d
",--x);
5.下面程序的结果是
,else与第
个if搭配。
#include<stdio.h
int main()
{inta=2,b=-1,c=2;
if (a>b)
·56
总复习方案·第四章选择结构程序设计
if(b>0)c=0;
else c+=1
printf("%d",c)
技能实践
©Y⊙
1x-lg5|(x≤1)
1.程序填空题:下列程序用来求y=1一x(一1<x<0)的值,请完善程序:
2(2x十5)(x≥0)】
#include <stdio.h
#include <math.h
int main()
{
scanf("%f",&.x);
f
if
y=2*(2*x十5):
else y=1-x;
else
printf("y=%f",y);
}
2.程序填空题:从键盘输入一个年份,输出该年2月的天数。若年份能被4整除且不能被100
整除,或能被400整除,则该年为闰年。闰年2月的天数为29天,非闰年2月的天数为28天。
#include <stdio.h
int main()
int year,leap;
scanf("%d",&.year);
if
)leap=1;
else leap=0;
printf("%d年2月的天数是%d",year,28+leap):
}
3.从键盘上输入任意字符且判断其种类。如果是字母则输出提示"是字母",如是数字则
输出提示"是数字”,如都不是则输出提示"是其他字符”。
#include<stdio.h
#include<ctype.h
int main()
char c;
if
printf("%c是字母!
",c)
·57.
单招零距离·计算机专业综合·下册
else if(
)
printf("%c是数字!n",c)
else
printf("%c是其他字符!
",c)
}
4.程序填空题:输入一个小写字母,将字母循环后移5个位置后输出。例如'变成f','w
变成b'。请填空:
#include"stdio.h"
int main()
char c;
c=getchar();
if(c>=a'&.&c<=u')
else if(c>=v'8.8.c<=z')
putchar(c);
}
5.程序改错题:从键盘输人一个三角形三条边的边长依次存入变量a、b、c中,判断它们能
否构成三角形,若能,则判断构成的三角形是"等边三角形"或"等腰三角形"或"普通三角形"。
#include <stdio.h
#include <math.h
int main()
double a,b,c;
/米米米米米*米*米米*米f0und*米**关*米米关**/
scanf("%f%f%f",&.a,&.b,&.c);
/米兴*兴*关¥米兴兴*米f0und米¥米¥¥¥0兴米关米米/
if(a+b>c&.&.a+c>b)
?米米米关米米*兴光兴米米f0und米兴米米关*米米米米*/
if(a==b==c)
printf("构成等边三角形"):
else if(a==blb==clla==c)
printf("构成等腰三角形"):
else
printf("构成普通三角形"):
else
printf("不能构成三角形");
}
·58·
总复习方案·第四章选择结构程序设计
6.程序设计题:根据成绩,输出其等级。用多分支「语句实现。等级标准如下表所示:
分数x
等级
x=100
A
90≤x<100
B
80x<90
C
70x80
D
60x<70
E
x<60
F
#include <stdio.h
int main()
了¥¥米米*¥*¥¥¥并BEGIN¥共关米关关¥¥米头¥/
第二节switch语句
知识体系
Y⊙
[switch的用法
break的用法
switch
嵌套switch
多分支if与switch的关联
知识梳理
©Y⊙
一、switch的用法
实际问题中常常需要用到多个分支的选择,这些当然可以用嵌套的f语句来处理,但往
往造成f嵌套的层次很多,使程序冗长,不便于阅读。此时,便可使用switch语句实现。
1.一般形式:
switch(表达式)
case常量表达式1:语句l;[break;]
case常量表达式2:语句2;[break;]
case常量表达式3:语句3;[break;]
·59·}
3.第一种方法,采用中间变量t
#include<stdio.h>
intmain()
{ inta,b,t;
printf("请输入两个正整数");
scanf("%d%d",&a,&b);
printf("交换前a的值为%d,b的值为%d\
n",a,b);
t=a;a=b;b=t;
printf("交换后a的值为%d,b的值为%d\
n",a,b);
}
第二种方法,不采用中间变量t
#include<stdio.h>
intmain()
{ inta,b;
printf("请输入两个正整数");
scanf("%d%d",&a,&b);
printf("交换前a的值为%d,b的值为%d\
n",a,b);
a=a+b;
b=a-b;
a=a-b;
printf("交换后a的值为%d,b的值为%d\
n",a,b);
}
4.#include<stdio.h>
intmain()
{
chara,b;
floatx;
inty=35;
scanf("%c,%c,%f",&a,&b,&x);
printf("a=%c,b=%c,x=%.3E,y=%d
",
a,b,x,y);
}
5.#include<stdio.h>
intmain()
{ charc1='C',c2='h',c3='i',c4='n',c5='a';
printf("原字符为:%c%c%c%c%c
",c1,
c2,c3,c4,c5);
c1+=4;c2+=4;c3+=4;c4+=4;c5+=4;
printf("加密后的字符为:%c%c%c%c%c
",
c1,c2,c3,c4,c5);
}
【技能实践】
1.程序填空题:
(1)&x
(2)(x-h∗3600)/60
(3)x%60或 x-h∗3600m∗60
2.程序改错题:
(1)scanf("%f",f);改成scanf("%f",&f);
(2)c=5/9∗(f-32);改成c=5.0/9∗(f-32);或c
=5/9.0∗(f-32);或c=5.0/9.0∗(f-32);或c=
(float)5/9∗(f-32);或c=5/(float)9∗(f-32);或c
=(float)5/(float)9∗(f-32);
(3)printf("%d
",c);改成printf("%.1f
",c);
3.程序设计题:
x=rand()%900+100;
gw=x%10;
sw=x/10%10;
bw=x/100;
y=gw∗gw∗gw+sw∗sw∗sw+bw∗bw∗
bw;
第四章 选择结构
第一节 if语句
【知识梳理】
一、选择结构
2.关系、逻辑
3.非0
三、嵌套if语句
1.一对大括号{}
2.多分支if语句
3.(1)(表达式) 上面小于或等于
(2)else总是和最近尚未配对的if配对
(3)一
【巩固练习】
1.a,b,c=1,3,2
2.0<a<b
3.程序段1:if (a>b) c=a;else c=b ;
程序段2: c=b ;if(a>c) c=a ;
4.②、③ ② 1 2 分支x=3;与if(a<2)配
5.(x>1)&&(x<=5) (x>0)&&(x<=1)
y=-1
【拓展练习】
1.C 2.B 3.B
51
总复习方案参考答案
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
单招零距离计算机专业综合下册