第4章选择结构程序设计选择结构程序(分支结构程序),是指可以根据不同的条件有选择地(有条件地)执行程序中的语句。要实现这种选择结构有两个前提:一是能够在程序中表示条件;二是有实现选择的语句。在C语言中通常使用关系表达式或逻辑表达式来表示条件,使用if语句和switch语句来实现分支选择。4.1关系表达式与逻辑表达式4.1.1关系表达式1.关系运算符关系运算就是对两个数据之间大小关系的一种断言。可见,关系运算的结果是一个逻辑值。若断言成立,则关系运算的结果为“真”,否则为“假”。例如,5<=5的结果为“真”,而5>5的结果为“假”。在C语言中有6种关系运算符,如表4.1所示。需要注意,有的关系运算符与数学中的写法不同。表4.1关系运算符及其含义含义关系运算符小于L小于或等于大于>大于或等于O等于1不等于表4.1中前四种关系运算符(<、<=、>、>=)的优先级高于后两种关系运算符(==、!=)。关系运算符优先级的详细情况可以查看本书的附录C。2.关系表达式用关系运算符将运算量连接起来构成的表达式,称为关系表达式。例如:a>=ba%2==0a%2!=0关系表达式的运算结果是一个逻辑值,即“真”(true,T)或者“假”(false,F)。但是C语言中没有逻辑型数据,故借用整数1代表“真”、0代表“假
【例4.1】输出关系表达式的值。#include<stdio.h>int main (void)(int.a=3,b=2,c=1;printf("gdln",a>b);printf("8dn",a82==0);printf("%dln",c!=c<a);printf("&din",a>b>c);return 0;程序运行结果:1000在表达式a%2=0中,先求a%2,结果为1:再求1==0,结果为0(假)。在表达式c!=c<a中,根据优先级,先求c<a,结果为1(真);再求c!=1,结果为0(假)。在表达式a>b>c中,先求a>b,结果为(真);再求1>c,结果为0(假)。可见,C语言中的表达式a>b>c与数学中的a>b>c的含义是完全不同的。4.1.2逻辑表达式1.逻辑运算符关系表达式通常只能表示单一的条件,若要表示复合的条件,则需要使用逻辑表达式。例如,在C语言中条件“x>0并且x<10”不能表示为0<x<10,而应当使用逻辑表达式。要构成逻辑表达式,需要使用逻辑运算符,在C语言中有三种逻辑运算符,如表4.2所示。表4.2逻辑运算符及其含义含义逻辑运算符逻辑与&&逻辑或逻辑非三种逻辑运算符的功能,可以用逻辑运算的真值表表示,如表4.3所示。显然,逻辑运算的结果仍然是一个逻辑值。表4.3逻辑运算的真值表Ca&&blaaballb语真真真真假言假假假真真程假真假真真序假假假假真设计在三种逻辑运算符中,逻辑非的优先级最高,逻辑与次之,逻辑或最低。有关逻辑运新算符优先级的详细情况可以查看本书的附录C。思例如:路36
a>bllc>d&&x>y等价于(a>b)Il((c>d)&&(x>y))!ala>b等价于(!a)(a>b)2.逻辑表达式由逻辑运算符将运算量连接起来构成的表达式称为逻辑表达式。例如,在当今的格里高利历法中,置闰规则是400年97闰;满足以下两个条件之一的年份即为闰年:①能被4整除,但不能被100整除的年份;②能被400整除的年份。上述两个条件可用逻辑表达式(year%4=-0)&&(year%100!=0)(year%400==0)来表示,其中year为年份。需要注意,在C语言中,“x的值介于1~10”不能用关系表达式1<=x<-10表示。实际上,此处“x的值介于1~10”是两个条件,故应使用逻辑表达式x>=1&&x<=10来表示。3.逻辑量可以参与逻辑运算的量,称为逻辑量。C语言中的逻辑量可以分为常规逻辑量和扩展逻辑量两种。常规逻辑量包括:①逻辑常量,即1和0;②逻辑变量,即用于存储逻辑常量的变量;③结果是逻辑值的表达式,包括关系表达式、逻辑表达式等。C语言为了提高编程的灵活性,大大扩展了逻辑量的范畴,充许任意整型、实型、字符型、枚举型和指针型的数据(或表达式)参与逻辑运算。不妨将这些类型的数据(或表达式)称为扩展逻辑量。同时规定,只要扩展逻辑量的值为非0,就看作“真”;只要扩展逻辑量的值为0,就看作“假”。【例4.2】逻辑运算量的扩展示例。#include<stdio.h>int main(void)(int a=4;float b=5.0;printf("sdin",!a);//a的值为非o,看作真,故!a为0printf("sdin","at+'b"ll'c'):I/0为非0因为其ASCII码为48printf("sdln",a&&"o");//0为0,因为其ASCII码为0printf("sdln",b&&"lo');return 0;第4程序运行结果:章01选1择O结几点说明:构(1)关系运算或逻辑运算的结果称为逻辑值,逻辑值只能是1(真)或0(假)。程(2)参与逻辑运算的量称为逻辑量。若逻辑量的值为非0,则看作真;若逻辑量的值为序设0,则看作假。计37
4.逻辑运算的“短路”在对逻辑表达式“表达式1&&表达式2”求值时,若表达式1的值为0,则整个表达式的值必定为0,因此不必再对表达式2进行求值。同样地,在对逻辑表达式“表达式1]表达式2”求值时,若表达式1的值为1,则整个表达式的值必定为1,因此不必再对表达式2进行求值。这种求值方式称为逻辑运算的“短路”。【例4.3】逻辑运算的短路示例。#include <stdio.h>int main(void)(inta=1,b=2,c=3,d=4,p=l,q=1,rir=(p=a>b)&&(g=c>d);printf("p=%d,q=d,r=%d/n",p,g,r);return O;程序运行结果:p=0,q=1,r=0在对表达式(p=a>b)&&(q=c>d)求值时,首先求得p=a>b的值为0,从而整个表达式的值即可确定为0,因此无须再对q=c>d求值,故q的值不变。回4.2算法及其表示口在解决比较复杂的问题时,应当首先确定相应的算法。算法,是指解题方案准确而完整的描述,是一系列解决问题的清晰指令。算法代表着用系统的方法描述解决问题的策略机制。4.2.1简单算法举例【例4.4】已知两个整型变量a和b的值,求出其中的较大数并输出。问题分析:这是一个数值计算问题。可以通过比较变量a和b的大小,求得最大值。编程思路:Sl:输人变量a和b的值。S2:如果a>b,则a=max。S3:否则b=max。S4:输出max的值。c语4.2.2算法的表示言描述算法的工具有许多种,常用的有自然语言、伪代码、流程图、N-S图与PAD图等。程库1.用自然语言表示算法设计自然语言就是人们日常使用的语言,可以是汉语、英语等。例4.4中的算法就是用自然新语言表示的。用自然语言表示的算法,通俗易懂,但容易出现歧义。因此,一般很少使用思自然语言描述算法。路38
2.用流程图表示算法流程图是对算法的一种图形化表示,用一系列规定的图形、流程线及文字说明来表示算法中的基本操作和控制流程。其优点是直观形象、简洁易懂。表4.4中列出常用标准流程图符号。表4.4:常用标准流程图符号符号名称符号功能起止框表示算法的开始和结束输人/输出框7表示算法的输人/输出操作,框内填写需输人或输出的项/处理框表示算法中的各种处理操作,框内填写处理说明或算式判断框表示算法中的条件判断操作,框内填写判断条件V=流程线表示算法的执行方向0连接点表示流程图的延续【例4.5】将例4.4中的算法改用流程图表示将例4.4中的算法用流程图表示如图4.1所示。3.用N-S图表示算法在使用流程图的过程中,人们发现流程线并不是必需的,有时候甚至是有害的。为此,人们设计了一种新的流程图,将整个算法写在一个大的方框内,而这个大的方框又由若干小的基本方框构成。这种流程图称为N-S图,也称为盒图。【例4.6】将例4.4中的算法改用N-S图表示。例4.4中的算法用N-S图表示如图4.2所示。开始输入a、b的值输入a、b的值a=maxb=maxa>=bT第4b=maxa=max输出max的值章输出max的值结束选图4.1求两个数中较大数的流程图图4.2求两个数中较大数的N-S图择结构4.3if语句程序if语句是专门用于实现选择结构的语句,它能根据条件的真假选择执行两种处理中的设一种。计39