C程序设计(第五版) 第四章 知识总结

C语言有两种选择结构句:
(1)if语句 用来实现两个分支的选择结构
(2)switch语句 用来实现多分支的选择结构。

一、用if语句实现选择结构

if语句的一般形式:

if (表达式) 语句1
[else 语句 2]

其中:表达式可以是关系表达式、逻辑表达式,甚至是数值表达式。对上面if语句的一般形式中,方括号中的部分(else子句)既可以有也可以没有。

语句1和语句2可以是一个简单的语句,也可以是一个复合语句或是另一个if语句。因此,if可以有三种形式:

(1)if (表达式) 语句1
(2)if (表达式)
语句1
else
语句2
(3)if (表达式1) 语句1 //在else部分又嵌套了多层if语句
else if(表达式2) 语句2
else if(表达式3) 语句3
....
else 语句m

注意:
1.if语句中的“内嵌语句“是if语句的一部分,每个内嵌语句末尾都必须有分号! if (x>0) y=1 else y=-1; //此句错误,语句1末尾少分号。
2.对if语句编译时,若发现内嵌语句结束(出现分号),还需检查后面有无else。else子句不能作为语句单独使用,必须是if语句的一部分,与if配对使用。
3.复合语句必须用花括号括起来。

二、关系运算符和关系表达式

在C语言中,比较符称为关系运算符。
关系运算符及其优先次序
C语言提供6种关系运算符:

<
<=
\>
\>\=
\==
\!=

注:同时出现以上运算符时,前四种运算符优先级高于后两种

关系表达式
用关系运算符将两个数值或数值表达式连接起来的式子,称为关系表达式。
注意:若a=3,b=2,c=1。f=a>b>c 要注意判断a,b,c的运算顺序和逻辑结果。此语句,先执行“a>b”得值为1,在执行关系运算符“1>c”,得到值为0,赋值给f。

三、逻辑运算符和逻辑表达式

用逻辑运算符将关系表达式或其他逻辑量连接起来的式子就是逻辑表达式。
逻辑运算符及优先次序
在C语言中逻辑运算符只有“&&”、“||”、“!”三种。详细表格见P91。
逻辑运算符优先级:!(非)> &&(与)> ||(或)
总优先级顺序:!(非)> 算数运算符 > 关系运算符 > &&和|| >赋值运算符
例:a|| b&&c同等于a||(b&&c)

逻辑表达式

逻辑表达式值应该是一个逻辑量“真”或“假”,1表示真,0表示假。非零的数值就为“真(1)”。
短路特性:
a&&b&&c。 只有a为真(非0),才需要判断b的值。只有当ab都为真,才需要判断c的值。如果a为假,则不需要判断b和c的值。表达式为假。
a||b||c。 只要a为真(非0),不必判断b和c。只有a为假,才要判断b和c。

例:

(m=a>b)&&(n=c>d) a=1,b=2,c=3,d=4。m和n为1。//由于a>b值为0,因此m=0,此时判断整个表达式不为真,所以不运算n=c>b,因此n值不是0而是1。

条件运算符和条件表达式

三目运算符:
形式: 表达式1 ? 表达式2 : 表达式3
例:

max=(a>b) ? a : b; //其中“(a>b) ? a : b”是一个条件表达式。“?”是条件运算符。

如果a>b条件为真,则表达式值等于a,否则取值b。“?”和“:”必须同时使用。
运算:先求解表达式1,若为真,求解表达式2,并且2的结果是整个条件表达式的值。若表达式1为假,则求解表达式3.
注意:注意优先级顺序,条件表达式优先于赋值表达式,因此上面的例子是先求解表达式,再赋值给max。

四、选择结构的嵌套

在if语句中又包含多个if语句称为if语句的嵌套。具体例子见P97.

注意:
1.if与else的配对关系。else总是与它上面的最近的未配对的if配对。
2.如果if与else的数目不一样,可以加花括号来确定配对关系。

五、用switch语句实现多分支选择结构

switch语句是多分支选择语句。
一般形式:

switch(表达式)
{
case 常量1:语句1
case 常量2:语句2
...
case 常量n:语句n
default:语句n+1
}

其作用是根据表达式的值,使流程跳转到不同的语句。
其中,表达式值的类型应该为整数类型(包括字符型)

注意:
1.case后面跟一个常量(或常量表达式),它们和default都是起标号(标记)的作用,用来标记一个位置。
2.可以没有default标号,此时如果没有与switch表达式相匹配的case常量则不执行任何语句,转到switch下一个语句。
3.每个case常量必须不相同。
4.case标号只起标记作用。根据switch表达式找到匹配的入口标号,并不在此进行条件检查,执行完一个case标号后的语句后,就从此标号开始执行下去,不再进行判断。因此,如果想阻止语句继续执行标号下面的所有语句,要在case子句后用break语句跳出switch结构。
5.处于最后一个default子句中可以不加break语句,因为流程已经到了switch结构的结束处。
6.多个case标号可以共用一组执行语句。
如:

case 'A' :
case 'B':
case 'C': printf("good");break;
...
//此时匹配A、B、C时都执行同一组语句,输出“good”。
引用请注明出处:http://www.sgyh.xyz/archives/74.html

TAG:none

发表新评论