配色: 字号:
《C语言程序设计教程》第四章选择结构
2023-05-23 | 阅:  转:  |  分享 
  
第四章 选择结构4.1 关系运算符及其表达式 4.2 逻辑运算符及其表达式 4.3 if语句 4.4 switch语句 4.5
程序举例4.6 C语言趣味程序实例34.7 本章小结关键字:if语句 if语句嵌套 switch语句
选择结构是一种应用非常广泛的程序控制结构,是计算机科学用来描述自然界和社会生活中分支现象的手段。其特点是:根据所给定选择条件为
真(即分支条件成立)与否,决定从各实际可能的不同操作分支中执行某一分支的相应操作,并且任何情况下恒有“无论分支多寡,必择其一;纵然
分支众多,仅选其一”的特性。4.1关系运算符及其表达式 关系运算是对两个运算对象进行大小关系的比较运算。C语
言的关系运算符共有6个,>(大于 )、 >=(大于等于 )、 < (小于 )、 <= (小于等于)、 ==(等于 )
、 != (不等于)。 关系运算符中>,>=,<,<=优先级相同,高于相同级别的==,!=。运算方向
自左向右。由关系运算符组成的表达式称为关系表达式 。关系表达式的一般形式为: 表达式 关系运算符 表达式 例如:a>4
a+b 假”两种,由于C语言中没有逻辑型数据,因此用“1”和“0”分别表示逻辑真和逻辑假。例如: 3>2 的值为“真”,即为1。
5>4==2的值为“假”,即为0。 【程序文本4.1】关系表达式示例。#include “stdio.
h”main(){ int a,b,c,d,e; c=2; d=4; e=6; a=c>d; b=d tf(“a=%d,b=%d”,a,b);}程序运行结果:a=0,b=1 C语言中提供了三种逻辑运算符,!(逻辑非 )、&& (逻辑
与 )、|| (逻辑或 )。逻辑非的优先级别最高,逻辑与次之,逻辑或最低。运算方向自左向右。逻辑运算符与其他运算符的优先级从高到低
依次是:逻辑非(!)、算术运算符、关系运算符、逻辑与(&&)、逻辑或(||)、赋值运算符。由逻辑运算符组成的表达式称为逻辑表达式。
例如: !a b&&c 2||d逻辑表达式的值为1(结果为“真”时)和0(结果为“假”时)。 4.
2逻辑运算符及其表达式 【程序文本4.2】逻辑表达式示例。#include “stdio.h”main(){ int x,y,m
,n; x=3; y=7; m=9; printf(“%d\n”,x+y>m&&x==y); printf(“%d\n”
,x||y+m&&y-m); printf(“%d\n”,!(x+y)||m-1&&y+m/2); } 程序运行结果:
0 1 1 4.3 if语句 实现选择结构最常用的方法是采用if语句。它根据给定的条件进行判断(真或假),
以决定执行某个分支程序段。C语言提供了3种基本的if语句形式。4.3.1 if语句的三种形式1.单分支结构 这是一种最简单的i
f形式,格式为: if(表达式) { 语句序列; }执行
过程:如果表达式的值为真,则执行其后的语句,否则跳过该if的语句,直接执行下一条语句。 【程序文本4.1】输入两个实数,按从小到大
的顺序输出这两个数。#include “stdio.h”main(){ float x,y,t; printf(“请输入两个实数
(x,y):”);scanf(“%f,%f”,&x,&y);if(x>y){t=x;x=y;y=t;} printf(“%5.2
f,%5.2f”,x,y);} 程序运行结果:(运行2次): 请输入两个实数(x,y):32,45↙ 32.00,45.00
请输入两个实数(x,y):45,32↙ 32.00,45.00 从运行结果可以看出,只有“x>y”为真时才执行复合语句“{
t=x;x=y;y=t;}”,当程序只需实现单分支选择时,就可以使用这种形式的if语句来完成。 2.双分支if…else语句这是
一种使用比较频繁的条件语句,格式为:if(表达式) {语句序列1; }else {语句序列2; }执行过程:如果表
达式的值为“真”,则执行语句1,否则执行语句2。 【程序文本4.2】输入一名学生的C语言成绩,判断是否及格。#include “
stdio.h”main(){ int x; printf(“请输入一名学生的C语言成绩:\n”); scanf(“%d”,&
x); if(x>=60)printf(“及格\n”); else printf(“不及格\n”);} 程序运行结果:(运行
2次):请输入一名学生的C语言成绩:89↙及格请输入一名学生的C语言成绩:58↙不及格 执行本程序时,当输入的成绩大于等于60时
,执行if后面的语句,输出“及格”;当输入的成绩小于60时,执行else后面的语句,输出“不及格”。对于选择结构程序只能执行if后
面的语句或者else后面的语句,绝对不可能同时执行两个分支。3. 多分支if…else…if语句这种多分支语句其实是固定在else
分支下嵌套着另一个if…else语句,格式为:if (表达式1) 语句序列1;else if(表达式2) 语句序
列2; else if(表达式3) 语句序列3; …else
if(表达式n) 语句序列n; else 语句序列n+1; 执行过程:程序先判断表达式1的值,当其
结果为“真”时,则执行语句1;否则判断表达式2的值,当其值为“真”时,则执行语句2;否则判断表达式3的值,当其值为“真”时,则执行
语句3;否则接着进行判断,依此类推,直到找到结果为“真”的表达式,并执行与之相关的语句。如果经过判断,所有的表达式都为“假”,那么
就执行最后一个else之后的语句。 【程序文本4.3】现有一分段函数,输入任意一个x值,输出对应的y值。y =x+3
(x>3)x (x=3)x-3 (x<3)#include “stdio.h”main(){ int x,y; p
rintf(“\n请输入x的值:”); scanf(“%d”,&x); if(x<3) y=x+3; else if(
x==3) y=x; else y=x-3;printf(“x=%d,
y=%d”,x,y);} 程序运行情况如下(运行3次):请输入x的值:2↙x=2,y=5请输入x的值:3↙x=3,y=3请输入x
的值:4↙x=4,y=1 在应用if-else-if多分支结构时,应注意每个else是和其前面最近的if配对使用的。一般来讲,中
间的各个else不能省略,但最后一个else可以省略,这时表示当所有的表达式的值都为假时,执行该选择结构下面的语句。 4.3.
2 if语句的嵌套if语句的嵌套是指在if语句中又含有了if语句的形式。可以嵌套在if子句中,也可以嵌套在else子句中,可以多层
嵌套。其一般形式为: if(表达式1) if(表达式2) 语句序
列1; else 语句序列2; else
if(表达式3) 语句序列3; else 语句序列4;
在if语句的嵌套结构中并不需要对称,可以根据实际情况上面格式中的一部分,并且可以进行if语句的多重嵌套。【程序文本4.4】
从键盘输入3个数,如果这3个数能构成一个三角形,则输入该三角形的形状信息(等边、等腰、任意三种情况)。#include “std
io.h”main(){ float a,b,c; printf(“\n请输入a,b,c的值:”); scanf(“%f,%f
,%f”,&a,&b,&c);if(a>0&&b>0&&c>0&&a+b>c&&b+c>a&&a+c>b) if(a==b&
&b==c) printf(“等边三角形!\n”); else if(a==b||b==c||a==c)
printf(“等腰三角形!\n”); else printf(“任意三角形!\n”)
; else printf(“不能构成三角形!\n”); } 程序运行情况如下(运行4次)请输入a,b,c的值:6,6,
6↙ 等边三角形!请输入a,b,c的值:6,6,8↙ 等腰三角形!请输入a,b,c的值:6,7,8↙ 任意三角形!请输入a,
b,c的值:2,3,6↙ 不能构成三角形!4.3.3 条件运算符 条件运算符“?:”是C语言中唯一的一个三目运算符,要求3个
运算对象同时参加运算。条件表达式的语法格式为: 表达式1?表达式2:表达式3 其运算规则为:如果表达式1为“真
”,则求解表达式2的值,并将其作为整个条件表达式的值;否则就求解表达式3的值,并将其作为整个条件表达式的值。例如: int a,b
,max; a=3; b=4; a>b?max=a:max=b;执行时先判断a和b的大小,a的
值是3,b的值是4,“a>b”的值为“假”,执行表达式“max=b”, 所以最后max的值为4。通常可以用前面介绍的if语句来改写
,上例中的条件表达式可改写为: if(a>b) max=a; else
max=b; 4.4 switch语句 我们在解决实际问题时,经常要用到多分支的选择。虽然用if语句的嵌套格式可以实
现,但有时不太方便简洁,C语言提供了一个用于多分支的switch语句,用它来解决多分支问题更加方便有效。其一般形式为: swi
tch(表达式){ case常量表达式1: 语句组1; case常量表达式2: 语句组2;
case常量表达式n: 语句组n; default
: 语句组n+1; }其执行过程为: 将“表达式”的值与“常量表达式”的值依次进行比较,当发现了某个匹配
的值时,就执行该case后面的语句,直到遇到break语句或switch语句结束的“}”为止。如果没有匹配的值,则执行defaul
t后面的语句。 【程序文本4.5】为某运输公司编制计算运费的程序。运行程序时,由用户输入运输距离s和运量w,程序输入单价p和总金额
t。运费标准为:当s<1000km时,没有优惠,单价为6元/(吨·公里);当1000km≤s<2000km时,优惠5%;当2000
km≤s<3000km时,优惠8%;当3000km≤s<5000km时,优惠10%;当s≥5000km时,优惠12%; #incl
ude “stdio.h”main(){ int s,w,g; float p,t; printf(“请输入距离s和运量w的
值:”); scanf(“%d, %d”,&s,&w); g=s/1000; switch(g) {case 0: p=
6;break;case 1: p=60.95;break;case 2: p=60.92;break; case 3:
case 4: p=60.90;break; defalt: p=60.88;break;} t=psw; pri
ntf(“单价p是%.3f\n总价t是%.3f\n”,p,t);}程序运行结果:请输入距离s和运量w的值:900,100↙单价p是
6.000总价t是540000.000请输入距离s和运量w的值:3500,100↙单价p是5.400总价t是1890000.000
4.5 程序举例【例1】输入年份,判断是否为润年。分析:能被4整除,不能被100整除或能被400整除的年份为润年。#include
“stdio.h”main(){ int year; printf(“\n请输入年份:”); scanf(“%d”,&yea
r); if((year%4==0&& year%100!=0)|| year%400==0) printf(“%d年是闰年。
\n”,year); else printf(“%d年不是闰年。\n”,year);}程序运行结果:(运行2次)请输入年份:
1996↙1996年是闰年。请输入年份:2014↙2014年不是闰年。 【例2】实现英寸与厘米的换算。分析:设置一个变量flag
,用于选择换算的方向,flag的值为1表示英寸换算成厘米,flag的值为2表示厘米换算成英寸。#include “stdio.h”
main(){ float y,r=2.54; int flag; printf(“请输入要换算的数据和换算的方式(1.英寸
→厘米,2. 厘米→英寸):\n”); scanf(“%f,%d”,&y,&flag); if(flag==2||flag==
1) if(flag==1) printf(“%8.2f英寸=%8.2f厘米”,y,yr); else pr
intf(“%8.2f厘米=%8.2f英寸”,y,y/r);else printf(“数据错误!\n”); }程序运行结果:(
运行2次)请输入要换算的数据和换算的方式(1.英寸→厘米,2. 厘米→英寸):2,1↙2.00英寸= 5.08厘米请输入要换
算的数据和换算的方式(1.英寸→厘米,2. 厘米→英寸):4,2↙4.00厘米= 1.57英寸 【例3】某企业利润提成
的规则如下: (1)利润低于或等于10万元的,可提成奖金10%; (2)利润高于10万元,低于20万元时,低于10万元的部分按10
%提成,另外10万元可以提成7.5%; (3)利润高于20万元,低于40万元时,其中20万按前面的方法发放,另外20万元可以提成5
%; (4)利润高于40万元,40万按前面的方法提成,高于部分按3%提成。请从键盘输入利润,输出应发的提成。 用if语句编写
程序如下:#include “stdio.h” main() { int pf; float pr; printf(
“\n请输入利润总数(单位:万元):”); scanf(“%d”,&pf); if(pf<=10) pr=pf0.1
0; else if(pf<20) pr=100.10+(pf-10)0.075;
else if(pf<40) pr=100.10+100.075+(pf-20)0.05;
else pr=100.10+100.075+200.05+(pf-40)0.03;
printf(“\n应发的奖金是:%f万元。”,pr); } 程序运行结果:(运行4次)请输入利润总数(单位:万元):
5↙应发的奖金是:0.500000万元。 请输入利润总数(单位:万元):13↙应发的奖金是:1.225000万元。请输入利润总数(
单位:万元):25↙应发的奖金是:2.000000万元。请输入利润总数(单位:万元):60↙应发的奖金是:3.350000万元。
用switch语句编写程序如下: #include “stdio.h” main() { int pf; f
loat pr; printf(“\n请输入利润总数(单位:万元):”); scanf(“%d”,&pf); swit
ch(pf/10) { case 0: pr=pf10;break; case 1: pr=100.
10+(pf-10)0.075;break; case 2: case 3: pr=100.10+100.075+(pf-20)0.05;break; default: pr=100.10+100.075+200.05+(pf-40)0.03;} printf(“\n应发的奖金是:%f万元。”,pr);} 4.6 本章小结 C语言提供了6种关系运算符:>(大于),>=(大于等于),<(小于),<=(小于),==(等于),!=(不等于);提供了3种逻辑运算符:&&(逻辑与),||(逻辑或),!(逻辑非)。if语句的控制条件通常用关系表达式或逻辑表达式构造,也可以用一般表达式表示。 选择结构主要是通过if语句和switch语句来实现的,if语句的基本形式有三种:单分支、双分支、多分支结构。一般,采用if语句实现简单分支结构程序,用switch和break语句实现多分支结构程序。虽然用if语句的嵌套也能实现多分支结构程序,但有时用switch和break语句实现多分支结构能使程序简单明了。
献花(0)
+1
(本文系昵称1689447...首藏)