
第四章 选择结构程序设计.docx
19页第四章 选择结构程序设计选择结构是结构化程序设计的三种基本结构之一C语言用关系运算或逻辑运算来判断 条件是否能够得到满足,并根据计算的结果决定程序的不同流程,实现选择结构的程序设计4.1 关系运算和逻辑运算4.1.1逻辑值及其在C语言中的表示关系运算和逻辑运算的运算结果都是一个逻辑值,逻辑值只有两个值,即:“真”和“假” 在C语言中,没有专门的“逻辑类型”,而是用数值1来表示“真”,用数值0来表示“假”, 因此逻辑值也可以作为一个整数参与算术运算4.1.2 关系运算符与关系表达式所谓“关系运算”实际上就是“比较运算”,即将两个数据进行比较,判定两个数据是 否符合给定的关系例如,a > b中的“〉”表示一个大于关系运算如果a的值是8, b的值是 5,则这个关系运算的结果为“真”,即条件成立;如果a的值是6, b的值是9,则运算的结 果为“假”,即条件不成立1.关系运算符及其优先级C 语言提供了六种关系运算符,如表4.1 所示表 4.1 关系运算符及其优先级运算符含义优先级运算符含义优先级<小于==AjV -r. 等于这两种关系运算符的<=小于或等于这四种关系 运算符的优先级 相同(高)!=不等于优先级相同(低)>大于>=大于或等于在关系运算符中,前4 个优先级相同,后2 个优先级相同,且前4个的优先级高于后2个。
所有关系运算符的优先级都比算术运算符的优先级低、但都比赋值运算符的优先级高 需要注意的是有些运算符是由两个字符组合而成的,如:”<=”,其两个字符之间不能有 空格2.关系表达式用关系运算符将两个表达式连接起来,进行关系运算的式子,称为关系表达式被连接 的表达式可以是算术表达式、关系表达式、逻辑表达式、赋值表达式、字符表达式例如:a>b、 (a+3)>(b-4)、'a'<'b'、a>c==b 等都是合法的关系表达式关系运算的运算结果实际上是一个 整数值:0 或者 1例如,假设 nl=5, n2=8, n3=10,贝I」:(1) 关系表达式n1==n2的值为02) 关系表达式n1<=n3的值为13) 关系表达式n1+n2>n3的值为1 4)关系表达式 n1== n2>n3 的值等为 0注意:当需要比较两个实型数是否相等时,应当避免使用x==y这样的关系表达式,因 为通常存放在内存中的实型数是有误差的,因此有可能不能精确相等这时可以根据其精度 要求,用表达式 fabs(x-y)<0.000001 来判断两个单精度实数 x 和 y 是否相等,用表达式 fabs(a-b)v1e-14来判断两个双精度实数a和b是否相等。
4.1.3 逻辑运算符与逻辑表达式1.逻辑运算符及其优先级C语言提供了三种基本的逻辑运算符,如表4.2所示在逻辑代数中还存在其它的逻辑 运算,但它们都可以转化为这三种基本的逻辑运算的组合表 4.2 逻辑运算符及其优先级运算符含义优先级&&逻辑“与”(AND)优先级(中)||逻辑“或”(0R)优先级(低)!逻辑“非”(NOT)优先级(高)其中,“&&”和“||”运算符是双目运算符,具有自左向右的结合性运算符是单 目运算符,应该出现在运算对象的左边,具有自右向左的结合性逻辑运算符与赋值运算符、算术运算符、关系运算符之间从高到低的运算优先次序是:! (逻辑非)、算术运算符、关系运算符、&&(逻辑与)、||(逻辑或)、赋值运算符2.逻辑表达式由逻辑运算符和运算对象所组成的表达式称为逻辑表达式逻辑运算的对象可以是C语 言中任意合法的表达式逻辑表达式的运算结果或者为1(“真”),或者为0(“假”)例如: 在关系表达式(x>y)为真的条件下,若a值为10, b值为16,表达式(a>b)&&(x>y)的值为“假” 用数值0来表示;若a值为10, b值为6,表达式(a>b)&&(x>y)的值则为“真”,用数值1 来表示。
对于参与关系运算或逻辑运算的任意一个表达式,如果该表达式的值为零,就代表一个 逻辑“假”值;只要表达式的值不是零,无论是正数还是负数,都代表一个逻辑“真”值逻辑运算符的运算规贝如表4.3所示在 C 语言中,常用逻辑表达式来表示多个条件的组合如: (a!=0)&&(b*b-4*a*c>0)表 4.3 逻辑运算符的运算规则数学表达式OvxvlO表示x的值应该在0到10的范围内但在C语言中不能用OvxvlO 这样一个关系表达式来表述以上的数学关系因为无论x是什么值,按照关系运算符的结合 性(自左至右),先计算左边的表达式0vx,其运算结果只能为0或1,它们都是小于10的 数值,因而表达式0 只有当a的值为“真”时,才需要判别b的值;只有当a&&b 的值为“真”时,才需要判别c的值如: a=0;b=1;c=1;d=a&&b&&(c=b+3)运算结果是:d的值为0, c的值仍为12) a || b || c若a的值为“真”,就不用再判别b和c的值,直接给出整个表达式的值为“真”;若 a的值为“假”,b的值为“真”,则a II b的值为“真”,也可以直接给出整个表达式的值 为“真”;只有a和b的值均为“假”时,才需要判别c的值如: a=1;b=0;c=0;d=aIIbII(c=b+3)运算结果是:d的值为1,c的值仍为04.2 if 语句if 语句可以根据给定的条件进行判断,决定执行某个分支程序段,以实现选择结构的程 序设计4.2.1 if 语句的三种形式C语言的if语句有3种形式:单分支if语句、双分支if语句和多分支if语句1.单分支 if 语句单分支 if 语句的形式为:if(表达式)语句执行单分支选择语句时,首先判断表达式的值,若为非 0(即判定为逻辑“真”),则执 行表达式后面的语句;若为 0(即判定为逻辑“假”),则不执行表达式后面的语句控制流 程如图 4.1 所示。 达式,以其值的非0 或 0 来确定逻辑真假2) if (表达式)后面的语句可以是一条语句,也可以是由多个语句组合而成的复合语 句例如:if (avb) {t=a; a=b; b=t;}例 4.1 输入一个数,如果该数大于等于 0,则输出它的平方根,当它小于0,则不做任何处 理include 这种方法,对从3个或3个以上的数中找最大值的处理,非常有效 请读者仔细体会例4.3输入三个整数,分别放在变量a、b、c中,程序把输入的数据重新按由小到大的顺序 放在变量a、b、c中,最后输出a、b、c中的值程序如下:main(){int a, b, c, t;printf (“input a, b, c: ”);scanf (“%d %d %d ”, &a, &b, &c );printf (“a=%d, b=%d, c=%d\n”, a, b, c);if(a>b){t=a; a=b; b=t;}if (a>c){t=a; a=c; c=t ;} /*至此三个数中最小的数已放入a中* /if (b>c){t=b; b=c; c=t; }printf (“a=%d, b=%d, c=%d\n”, a, b, c);}程序运行结果为:假M假[达式3真假建达式再句1 ~r~| 再句5|~T~ ~I~再句2 ]-r~表达式2表达式4图4.3多分支if语句的流程图input a, b, c: 62 34 24/ a=62,b=34,c=24a=24,b=34,c=623 .多分支f语句 多分支 if 语句的形式为:if(表达式1)语句1else if(表达式2) 语句2else if(表达式3) 语句3else if(表达式 n) 语句 nelse 语句 n+1执行多分支if语句时,如果表达式i的值为非0,则执行语句i,后面的语句不再执行; 否则执行else后面的语句。 流程图如图4.3所示 例4.4编写程序,根据输入的学生成绩,给出相应的等级90分以上的等级为A,60分以 下的等级为E,其余每10分为一个等级程序如下:main( ){int g;printf(“Enter g:”); scanf(“%d”, &g);printf(“g=%d:”, g);if(g>=90) printf(“A\n”);else if(g>=80) printf(“B\n”);else if(g>=70) printf(“C\n”);else if(g>=60) printf(“D\n”) else printf(“E\n”);}程序运行结果为:Enter g:78/g=78:C4.2.2 if 语句的嵌套在上述3种if语句结构中,当if (表达式)或else后面语句本身又是一个if语句结构时, 就形成了 if语句的嵌套结构if语句的二层嵌套结构如下:if( )if()语句1else 语句2elseif( ) 语句 3else 语句 4在 if 语句的嵌套结构中并不需要对称,只根据需要决定嵌套的形式在写 if 语句的嵌 套结构时,要注意el。












