目录
C语言中的分支和循环是程序流程控制的重要部分,它们允许程序根据条件执行不同的代码块,或在特定条件下重复执行代码。
一、分支(选择)结构
分支结构又称选择结构,是程序设计中常见的控制流程之一。它可以根据某些条件判断是否执行某个代码块,或者从多个分支中选择执行某个分支。在C语言中,分支结构主要有if和switch两种结构。
1、关系、逻辑操作符
(1)、关系操作符
C语言用于比较的表达式成为“关系表达式”,里面用于比较的运算符称为“关系运算符”。主要有以下6个:
> (大于)
< (小于)
>= (大于等于)
<= (小于等于)
== (相等)
!= (不相等)
当关系表达式成立时返回“0”,不成立时返回“1”,示例如下图。
注意:关系运算符尽量不要连用,例如:i < j < k 。如果连用,则编译器运算顺序为(i < j)<k,即先判断 i 是否小于 j ,如果 i 小于 j 成立则返回1,再将1和 k 比较。
(2)、逻辑操作符
逻辑操作符提供逻辑判断功能,用于构建更复杂的表达式,主要有下面三个运算符。
! :逻辑取反运算符(改变单个表达式的真假)。
&&:逻辑与运算符,就是并且的意思(两侧的表达式都为真时,则为真,都则为假)。
|| :逻辑或运算符,就是或者的意思(两侧只要有1个表达式为真,则为真,否则为假)。
注意:C语言逻辑操作符还有一个特点,它的执行顺序是从左到右,总是先对左侧的表达式求值,再对右边的表达式求值,如果左边的表达式满足逻辑运算符的条件,就不再对右边的表达式求值。这种情况称为“短路”。
对于逻辑与来讲,从左到右只要出现假,则表达式停止判断,整个表达式即为假(例如:(2<1)&&(2<3),因为2<1已经为假,就不会再判断2<3是真还是假,即把2<3这个表达式短路了,直接返回假)。
对于逻辑或来讲从左到右只要出现真,则表达式停止判断,整个表达式即为真。(例如:(1<2)| |(2>3),因为1<2已经为真,就不会再判断2>3是真还是假,即把2>3这个表达式短路了,直接返回真)。
2、if语句
(1)、if
if 语句的语法形式如下:
if ( 表达式 )
语句
当 if 后面的表达式为真时,执行 if 下面的语句,否则不执行。当 if 后面要执行多条语句时,用{ } 将要执行的代码块包括起来即可。if 语句的执行流程如下图:
(2)、else if 与 else
当有多条语句需要判断时可以将 if 与 else if 或 else 连用,用法如下:
if ( 表达式 1)
语句1
else if ( 表达式 2)
语句2
else if ( 表达式 3)
语句3
……
else
语句n
其中,else if 语句和 else 分别都可以省略。
注意:1、如果有多个 if 和 else , else 总是跟最接近的 if 匹配,和缩进无关。
2、如果一系列连用的 if else 语句中有一条语句被执行,则这一系列 if else 语句将不再往下进行。例如:以上的代码块,如果表达式1为假,则往下判断表达式2,如果表达式2为真,则执行语句2,执行完语句2之后将直接结束这一系列 if else 语句,不再判断表达式3以及往后的表达式。
案例:输入一个整数,判断是奇数还是偶数。
3、条件操作符
条件操作符也叫三目操作符,需要接受三个操作数的,形式如下:
exp1 ? exp2 : exp3
条件操作符相当于以下 if else 语句:
if (exp1)
exp2;
else
exp3;
示例如下,可见 n 和 m 输出结果相同,即条件操作符作用和以上 if else 语句相同。
4、switch语句
除了if 语句外,C语言还提供了 switch 语句来实现分支结构。switch 语句是一种特殊形式的 if...else 结构,用于判断条件有多个结果的情况。它把多重的else if 改成更易用、可读性更好的形式。
switch (expression)
{
case value1: 语句1;
break;
case value2: 语句2;
break;
default: 默认语句
break;
}
当 switch 中某个 case 后面的 value 值与 expression 的值相等时,则执行相应的case后面的语句,如果任何一个 value 值都不等于 expression 则执行 default 后面的默认语句。
注意:1、case 和后边的数字之间必须有空格。
2、每一个 case 语句中的代码执行完成后,需要加上 break ,才能跳出这个 switch 语句。否则将继续向下执行,直到遇到 break 或者整个 switch 中的代码块执行完为止。
3、switch 中的 case 语句和 default 语句放置顺序没有要求,可以按任意顺序摆放。
案例1:输入一个1~7的数字,打印对应的星期几。
案例2:输入一个1~7的数字,打印工作日(1~5)或者休息日(6、7)。
灵活运用 switch 语句在 case 中只有遇到 break 语句 switch才会停止的性质。
二、循环结构
C语言中的循环结构是一种重要的程序控制结构,它允许程序重复执行一段特定的代码,直到满足某个结束条件为止。循环结构在处理重复任务,如迭代计算、数据搜索、打印输出等方面非常有用。C语言提供了三种类型的循环结构:while循环、for循环和do-while循环。
1、while循环
while的语法形势如下,它和 if 的语法形式相同。 while 的表达式只要成立,while的代码块就会一直执行,直到 while 中的表达式不成立时,循环停止。
while ( 表达式 )
{
语句;
}
while 语句的执行流程如下图:
案例: 用whlie循环打印1~20中的偶数值。
2、for循环
for循环的语法形式如下,三个表达式的作用分别如下:
表达式1:用于循环变量的初始化。
表达式2:用于循环结束条件的判断。
表达式3:用于循环变量的调整。
for(表达式1; 表达式2; 表达式3)
{
语句;
}
for 循环语句的执行流程如下图:
注意: 1、for语句中三个表达式的分隔符是分号“;”。
2、for语句中三个表达时均可省略,但分号不能省略。例如省略表达式1、3可写为:
for ( ; 表达式2 ; )
{
语句;
}
案例:用for循环打印1~20中的偶数值。
3、while循环与for循环的对比
for 和 while 在实现循环的过程中都有初始化、判断、调整这三个部分,但是 for 循环的三个部
分非常集中,便于代码的维护,而如果代码较多的时候while 循环的三个部分就比较分散,所以从形式上for 循环要更优一些。
4、do-while循环
while 和for 这两种循环都是先判断,条件如果满足就进入循环,执行循环语句,如果不满足就跳出循环;而 do while 循环则是先直接进入循环体,执行循环语句,然后再执行 while 后的判断表达式,表达式为真,就会进行下一次,表达式为假,则不再继续循环。
do-while循环的语法形式如下:
do
语句;
while(表达式);
do-while循环语句的执行流程如下图:
注意:do-while循环语句至少执行1次,其余用法和while相同。
5、break和continue语句
(1)、break
break 除了在switch中的应用之外,还可以用来跳出循环。在循环中,执行到break语句时,跳出循环。示例如下:
(2)、continue
continue 语句的作用是,结束本轮循环,直接进行下一轮循环。示例如下,在 i = 5 时,结束本轮循环,直接进行下一轮循环,结果只是没有打印数字 5 。
注意:continue 在 while 循环和 for 循环中有些许区别,在没有continue语句时,上述代码和如下代码都应该打印1~10,在加入continue语句后,for循环只是没有打印数字 5 ,而 while 循环在打印完 4 之后陷入了死循环。由此可知 for 循环的调整部分在每结束1次循环之后都会执行。
6、goto语句
在C语言中,goto语句是一种无条件控制转移语句,允许程序直接跳转到指定的标签位置。它通常用于跳出多重循环、跳过某些语句或错误处理等场景。goto语句的基本语法如下:
goto label;
...
label:
用法示例:goto语句直接从三层 for 循环的最内层跳出到最外层。
for (...)
{
for (...)
{
for (...)
{
if (disaster)
goto lable;
}
}
}
lable;