C语⾔是结构化的程序设计语⾔,这⾥的结构指的是顺序结构、选择结构、循环结构。C语⾔是能够实现这三种结构的。 我们可以使⽤ if 、switch实现分⽀结构,使⽤ for、while、do while实现循环结构。
一.if语句
1.if
if语句的表达式如下
表达式成⽴(为真),则语句执⾏,表达式不成⽴(为假),则语句不执⾏
在C语言中,任一非0数则为真,0为假,也就是表达式的结果如果是0,则语句不执⾏,表达式的结果如果不是0,则语句执⾏。
举例如下:输入一个整数,判断其是否为奇数
2.else
只有一个if,有时会无法清楚的表达判断后的结果,如上图若赋值给a的值不是奇数,那么就什么都不会打印,此时就用到了if.......else语句,示例如下:
3.分⽀中包含多条语句
默认在 if 和 else 语句中默认都只控制⼀条语句,即只有if和else语句的下一行语句,若在if或else语句后连续输入多行语句,那么只有if语句后的第一行语句受if语句是否执行的影响,其余行语句均将正常执行。
如何让if语句的判断结果同时控制多条语句呢?只需将想让if语句控制的语句在if后用{}括起来即可,else同理
4.嵌套if
有时单独一组if和else无法完成全部判别,在if else语句中,else可以与另⼀个if语句连⽤,构成多重判断。
举例如下:判断一个整数为0,还是正数或负数
5.if和else匹配问题
如果有多个 if 和 else ,可以记住这样⼀条规则, else 总是跟最接近的 if 匹配。
当运行上图所示代码时会发现最终结果什么都不会输出,当第一个if判断为假后,不会执行下一行的if语句,而else是与最靠近的if配对,当第二个if没有执行时,else也就不会执行了。
可以理解为下图
二.关系操作符
C语⾔⽤于⽐较的表达式,称为“关系表达式”,⾥⾯使⽤的运算符就称 为“关系运算符”,主要有下⾯6个。
> ⼤于运算符
< ⼩于运算符
>= ⼤于等于运算符
<=⼩于等于运算符
== 相等运算符
!= 不相等运算符
关系表达式通常返回0或1,表⽰真假。关系表达式常用于分支和循环语句来判断是否执行。
当判别成功如2>1 , 2<3 , 3>=3 , 3<=4 , 1==1 , 1!=2时,会返回1表示真
相等运算符 == 与赋值运算符 = 是两个不⼀样的运算符。有时在分支或循环语句的表达式中可能会少打一个 = ,它可以运⾏,但很容易出现意料之外的结果。
如:if(a==3)和if(a=3)
前者是进行变量a是否等于3的判断。而后者是直接将3赋值给了a,使if里的表达式非0为真,从而
执行后续语句。
另⼀个需要避免的错误是:多个关系运算符不宜连⽤。
如a<b<c ,会从左往右进行判别,如果a<b为真,则会返回1,后续就变成了对1<c进行判别。如果想进行多个变量的并比较,可用后续将会学习到的逻辑与&&和逻辑或||进行判断。
三.条件操作符
条件操作符也叫三⽬操作符,需要接受三个操作数的,形式如下:
exp1 ? exp2 : exp3
条件操作符的计算逻辑是:如果 exp1 为真, 则进行exp2计算,计算的结果是整个表达式的结果;如果 exp1 为假,exp3计算,计算的结果是整个表达式的结果。
四.逻辑操作符:&&,||,!
逻辑运算符提供逻辑判断功能,⽤于构建更复杂的表达式,主要有下⾯三个运算符。
!:逻辑取反运算符(改变单个表达式的真假)。
&&:逻辑与运算符,就是并且的意思(两侧的表达式都为真,则为真,否则为假)。
||:逻辑或运算符,就是或者的意思(两侧⾄少有⼀个表达式为真,则为真,否则为假)。
1.逻辑取反运算符
假设有一变量a为0,我们可使用!a将此取反为非0。
#include <stdio.h>
int main()
{
int a = 0;
if(!a)
{
printf("114514\n");
}
return 0;
}
如果a为真, !a就是假,如果a为假,!a就是真。所以上⾯的代码的意思就是a为假,!a为真,执⾏if语句中的代码。
2.逻辑与运算符
&&就是与运算符,也是并且的意思,&&是⼀个双⽬操作符,使⽤的⽅式是a&&b, &&两边的表达 式都是真的时候,整个表达式才为真,只要有⼀个是假,则整个表达式为假。
3.逻辑或运算符
|| 就是或运算符,也就是或者的意思,||也是⼀个双⽬操作符,使⽤的⽅式是a||b,||两边的表达式只要有⼀个是真,整个表达式就是真,两边的表达式都为假的时候,才为假。
4.短路
C语⾔逻辑运算符还有⼀个特点,它总是先对左侧的表达式求值,再对右边的表达式求值,这个顺序是固定的。如果左边的表达式满⾜逻辑运算符的条件,就不再对右边的表达式求值。这种情况称为“短路”。
对于&&逻辑与运算符来说:
if(a >= 3 && a <= 5)
表达式中&&的左操作数是a>= 3 ,右操作数是a<=5 ,当左操作数a>= 3的结果是0的时候,即使不判断a<=5,整个表达式的结果也是0。
对于||逻辑或运算符来说
if(a == 3 || a == 1 || a == 2)
当a为3判断为真时,就不会再进行后续判断了
像这种仅仅根据左操作数的结果就能知道整个表达式的结果,不再对右操作数进⾏计算的运算称为短路求值。