- 关于C语言的语句有选择语句,重复语句,跳转语句,return语句,表达式语句等等,今天我们来着重了解下选择语句。
- 选择语句:包含了if语句和switch语句。
- 重复语句:包含了while语句,for语句(其功能更为强大),do while语句。
- 跳转语句:包含了continue语句,break语句和goto语句。
- 另外二点我们放到后面慢慢讲。
接下来我们来讲一下逻辑表达式:
- 逻辑表达式含有:关系运算符,判断运算符,逻辑运算符。
- 往往逻辑表达式会出现两个值0(为假)和1(为真)。它们会作为这个逻辑表达式实现的重要依据。
首先我们来看到关系运算符
- 关系运算符:包括了> < >= <=。
来看个例子来了解:
int main()
{
int a = 3;
int b = 4;
int i = 5;
if (i = (a < b))//这个判断为真所以它产生的值为1,反之为0.
printf("%d\n", i);//所以它打印的数字为1.
}
- 关系运算符也可以用于比较整数和浮点数,例如2.3 < 3;产生的结果为1。
-
它的结合性是左结合,且关系运算符的优先级低于算术运算符。
看看判等运算符:
- 判等运算符包括:!=(不等于),==(等于)。
- 和关系运算符一样产生的结果也为0和1,且也都是左结合。
再来看看逻辑运算符:
- 逻辑运算符包括:!(逻辑非), ||(逻辑或),&&(逻辑且)。
- 其中!是一元运算符,||和&&是二元运算符,一元运算符的优先级高于二元运算符。
- 其产生的结果也为0和1。
- 逻辑运算符会将一切非零值操作数当作真值来处理,将零值当作的假值来处理。
- 如果表达式的值为0的话,那么!表达式的结果为1。
- 如果是x&&y这样的形式,如果x为假,那么这个表达式的值直接为假,不需再考虑后面y表达式的值,这称为短路计算。
- 如果x||y这样的形式的话,如果x为假,这时就要考虑后面y表达式的值了,如果y为真的话,那么整个表达式的值就为真了,否则就为假。如果x为真的话,则不需要考虑后面y的值了,直接判断为真。现在对短路计算有了初步了解了吧。
- !的优先级和一元正负号相同,而||和&&的优先级低于关系运算符和判等运算符,其结合性为左。
好,逻辑表达式讲完了,我们现在来讲讲选择语句中的if语句:
- if语句的表达式为“if()”,注意if语句的“()”不可省略,因为“()”是if语句中的一部分。
我们看一段代码:
int main()
{
int a = 0;
if (a == 0)//这里判断结果为1.
{
printf("%d\n", a);//条件为真,实现。
}
if (a = 0)//和==完全不相同,这里是将0的值赋给了a,然后在判断这个表达式是否为真,而&&则是直接判断a是否为0值。
{
printf("%d\n", a);//条件为假不实现。
}
}
- 注意if语句本身只可以包含一条语句,如果想让它处理多条语句的话,可以给它加上花阔号{},组成复合语句,这样它就可以处理多条语句了。
else字句:
- if语句可以包括else子句,来表示如果不满足if的条件,那么它将来到else子句,来执行else字句的内容。
- 要注意的是else字句只和它最近的且还未和其他else语句相匹配的if语句相匹配。
条件表达式:
- 它的形式为“x < y ? x:y”,它是C运算符中唯一一个要求三个操作数的的运算符,因此它被称为三元运算符。
- 关于它的作用我用代码来展示:
int main()
{
int a = 3;
int b = 4;
printf("%d\n", a < b ? a : b);
}
//最后输出的结果为3,为什么呢?因为先看a < b,在由?来判断,判断结果为真,a:b输出a,反之输出为b。
- 注意平常用条件表达式的时候如果有其他运算符,最好在条件表达式的前后加上括号,因为条件表达式的优先级除了赋值运算符低于所有我们先前所讲到的运算符。
布尔值:
- _Bool flag;即声明一个布尔值,布尔值只能赋值0或1,如果赋其他非0值的话,布尔值会将值强制转为1,比如:flag = 6;如果你打印的话,会发现flag的值还是为1。
- 如果程序中包含了<stdbool.h>的头,那么你将获得true和false两个宏,分别表示0和1,你可以这么写:flag = ture; flag = flase;
- 特别注意以上布尔值的应用是C99的标准。
现在讲选择语句中最后的switch语句:
- switch语句往往比if语句执行速度更快。
- 它的表达式和功能为:
int main() { int a = 0; scanf("%d", &a); switch(a)//括号中的可以处理整数和字符,字符将转换为整数来处理,但不可以处理字符串和浮点数。 { case 1://case后出现的数字必须是常量表达式。 printf("haha1\n");//可以跟任意数量的的语句,且不需要花括号{}。 break;//如果没有break,将会继续执行下去,case 2 的内容也打印出来,如道遇到default,将其内容打印出来后才停止,如果没有default,将把后面所有的case语句执行完后才结束switch语句。 case 2: printf("haha2\n"); break;//直接跳出switch语句。 default://如果输入的值不是1和2,那么其他的值将进入default语句。 printf("haha3\n"); } }