C语言是结构化的程序语言,支持三种结构:顺序结构、选择结构、循环结构。
if语句
if
if语句表达式成立(为真),则语句执行,表达式不成立,则语句不执行。
在C语言钟,0为假,非0为真,也就是说,如果表达式的结果是0,则语句不执行,如果不是0,则语句执行。如下面例子:输入一个整数,判断是否为奇数
如果我们此时输入的偶数,则程序将不进行:
else
基于上面的例子,如果当我们输入的数字不是奇数时,那就是偶数了,如果任意一个整数,我们要想清楚地判断是奇数还是偶数,那该怎么表示呢?
此时,就需要用到if....else...语句了,如:
但是,if跟else语句都只能同时控制一种语句,也就是说,if跟else后面只能跟一个printf()
如果需要输出两个printf()多个语句,则需要加上大括号{}:
嵌套if
在if else语句中,else可以与另一个If语句连用,构成多重判断。
如下图:输入一个成绩,判断是优秀,良好还是不及格:
嵌套if还有另外一种写法(加上大括号):
这只是三重判断,如果将判断上升到五重甚至六重:
可见,多重判断就是大括号包着大括号,跟套娃一样,这样的写法很清楚地表现了“嵌套”。
但是大括号太多很容易眼花,所以我们可以用过else if来简化我们的代码:
悬空else问题
如果有多个if和else,可以记住这样一条规则,else总是跟最接近的if匹配。
关系操作符
C语言用于比较的表达式被称为“关系表达式”,里面使用的运算符就被称为“关系运算符”。
主要有六个:
> 大于运算符、< 小于运算符、>= 大于等于运算符、<= 小于等于运算符、== 相等运算符、
!= 不相等运算符。
关系表达式通常返回0或1,表示真假。C语言中,0表示假,所有非零值表示真。
比如:12>20,返回0。表示表达式常用于If或while结构。
逻辑操作符
逻辑操作符提供逻辑判断功能,用于构建更复杂的表达式,主要有三种运算符:
!:逻辑取反运算符(改变单个表达式的真假)
&&:与运算符,就是并且的意思(两侧的表达式都为真,则为真,否则则为假)
|| :或运算符,就是或者的意思(两侧至少有一个表达式为真,则为真,否则为假)
我们可以举个例子,将上面的两种操作符都关联起来,得到:
switch语句
除了if语句外,C语言还提供了switch语句来实现分支结构。switch语句是一种特殊形式的if...else结构,用于判断条件有多个结果的情况。它把多重的else if改成更易用、可读性更好的形式。
基本语法
上面代码中,根据表达式expression不同的值,执行相应的case分支。如果找不到对应的值,就执行default分支。
switch后的expression必须是整型表达式
cass后的值,必须是整型常量表达式
if语句和switch语句的对比
例子:输入任意一个整数值,计算除3之后的余数。
if语句为:
switch语句为:
PS:要想让switch语句成为分支语句必须加入break。
switch语句中的default
在使用switch语句中,我们常常遇到一种情况:当switch后的值无法匹配case语句的时候。这个时候,要不就不对其进行处理,要不就在后面执行default字句(可写可不写)。如:
如果不加default,如果遇到无法匹配的值,程序将不处理。如:
当然,default的位置可以任意,不强调前后,只要能保证正常的逻辑。
while循环
C语言提供了3种循环语句,while就是其中一种。while语句的语法结构和if语句非常相似。
if和while的对比
直接上图:
上图为while的死循环,当条件为真时,while语句打印hello,因为1为真,且没有其他条件,while陷入死循环,右框将无限打印“hello”下去。
但if语句,就只会进行一次,只打印一次hello。
while循环的执行流程
while后面的括号内为判断表达式,首先上来就执行判断表达式,表达式的值为0(假),循环就直接结束;表达式的值不为0(真),则执行循环语句,语句执行完后再继续判断,是否要进行下一次判断。
while循环的实践
上代码:在屏幕上打印1-10的值
while循环和for循环的对比
for和while在实现循环的过程中都有初始化、判断、调整这三个部分,但是for循环的三个部分非常集中,便于代码的维护。而如果代码较多的时候while循环的三个部分就会比较分散,所以从形式来看,for循环要更优一些。如下图例子:
do while循环语句
语法形式
在循环语句中,do while语句使用的最少。while和for都先判断 ,如果满足条件再进入循环,执行循环语句,如果不满足则跳出循环。
而do while循环则是先进入循环体,执行循环语句,然后在while判断表达式后,如果表达式为真,进入下一个循环,如果为假,循环结束。
do while循环示例
输入一个正整数,判断它的位数:
break和continue语句
在循环执行的过程中,如果某些状况发生的时候,需要提前终止循环,这是非常常见的现象。C语言中提供了break和continue两个关键字,就是应该到循环中的。
break
break的作用时用于永久地终止循环,只要break被执行,直接就会跳出循环,继续往后执行。
continue
continue的作用是跳过本次循环continue后边的代码,在for循环和while循环中是有所差异的
如上图,此时光标闪烁,陷入死循环。 这是因为continue跳过了本次循环。
如果我们将a++提前,我们将得到:
如果将以上代码从while换成for语句:
显而易见,在for循环语句中,使用continue比while少了一个结果11。
而break语句中,for跟while没有区别。
goto语句
C语言提供了一种非常特别的语法,就是goto语句和跳转标号,goto语句可以实现在同一个函数内跳转到设置好的标号处
例如:
goto语句特别适合用于多重循环的语句。
x