前面介绍了循环语句,现在接着介绍另外的C控制语句:分支语句和跳转语句,让程序根据测试条件执行相应的行为。以及介绍逻辑运算符,使用逻辑运算符能在while和if的条件中测试更多的关系。当然,理论终归是理论,实践才是将理论转换为高级思维的途径。希望初学者能够多多练习。
1.if语句
if语句被称为分支语句或选择语句,因为它相当于一个交叉点,程序要在两条分支中选择一个执行。if语句的通用格式如下:
if(expression)
statement;
if语句的结构于while语句很相似,它们的主要区别是,如果满足条件可执行的话,if语句只能测试和执行一次,而while语句可以测试和执行多次。
2.if else语句
简单形式的if语句可以让程序选择执行一条语句,或者跳过这条语句。if else的形式可以在两条语句之间做选择,并且只需测试一次。if else的语句通用格式是:
if(expression)
statement;
else
statement;
3.多重选择else if
在面对多重选择时,我们可以是使用else if扩展if else结构模拟这种情况。实际上,else if时if else语句的变式:
if(expression)
statement;
else if
statement;
else
statement;
//另一种写法
if(expression)
statement;
else{
if(expression)
statement;
else
statement;
}
因为整个if else语句被视为一条语句,因此不必将嵌套的if else语句用花括号括起来。
4.多层嵌套的if语句
上面介绍的if{}else if{}else{}
是嵌套if的一种形式,当然我们也可以
if(expression){
if(expression)
statement;
else
statement;
}……
虽然if else被看作是一条语句,但是当语句过长时,我们能够使用花括号提高程序的可读性。
5.逻辑运算符
下面我们先看一个程序,计算输入的一行语句中除单引号、双引号以外的其它字符的数量。
#incluede <stdio.h>
int main(void){
char ch;
int ch_count = 0;
while((ch = getchar()) != '\n'){ //不是换行符,则执行循环体
if(ch != '"' && ch != '\'')
ch_count++;
}
return 0;
}
上述程序在测试条件中使用了逻辑与运算符&&,逻辑与运算符要求两侧表达式都为真时,完整表达式的值才为真。逻辑与的优先级比关系运算符要低,所以不用在两侧加圆括号。
逻辑运算符总共有三种:逻辑与&&,逻辑或||,逻辑非!,如果大家对它们不熟悉没关系,其实它们就是中学数学中的逻辑关系,且、或、非,即&&两侧全为真时才为真,||两侧有真即为真,!则是将真值变为假,假值变为真。
另外,如果你的键盘并不能打出上述字符,也没关系。在C99标准中,新增了可用字母拼写代替逻辑运算符的拼写,它们被定义在ios646.h头文件中,在程序包含该头文件之后,可用and代替&&、or代替||、not代替!,这类似与其它某些语言。
逻辑与&&比逻辑或||的优先级要高,但两者的优先级都比关系运算符低,比赋值运算符高,同时逻辑非!的优先级很高,位于第二个优先级,与++等运算符优先级相同,只比我们目前学过圆括号的优先级低。另外要注意,通常C对类似语句sum = (1 * 2) + (3 * 4)
,对两个圆括号中的表达式求值顺序并没有规定,这取决于编译器的设计者,但是对于逻辑运算符而言,C保证了逻辑表达式的求值顺序是从左往右。&&和||运算符都是序列点(目前我们知道的序列点有分号,完整表达式,逗号运算符,&&和||运算符),所以程序会在一个运算对象到执行下一个运算符之前,所有的副作用都会生效。而且,C保证一旦发现某个元素让整个表达式无效,便立即停止求值。所以正是由于这些规定,while((c != getchar()) != ' ' && c != '\n')
这样的句子才会有效且十分有用。
(续上下一篇)
标签:语句,逻辑,&&,else,运算符,statement,跳转,分支 From: https://blog.51cto.com/u_15944236/6057458