C语言学习第三天-循环结构和选择结构

本文详细介绍了C语言中的三种基本控制结构:顺序结构、选择结构(包括if-else语句和switch-case语句)和循环结构(包括while、do-while和for循环)。通过实例解释了如何使用这些结构来实现程序的逻辑控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C语言三大结构,分别是顺序结构、选择结构(分支结构)和循环结构

C语言顺序结构:让程序按照从头到尾的顺序依次执行每一条C语言代码,不重复执行任何代码,也不跳过任何代码。

C语言选择结构:也称分支结构,就是让程序“拐弯”,有选择性地执行代码;换句话说,可以跳过没用的代码,只执行有用的代码。

C语言循环结构:就是让程序“杀个回马枪”,不断地重复执行同一段代码。

if else语句

if和else是两个新的关键字,if意为“如果”,else意为“否则”,用来对条件进行判断,并根据判断结果执行不同的语句。总结起来,if else的结构为

if (判断条件) { 语句块1 } else { 语句块2 }

语句块(Statement Block),就是由{}包围的一个或多个语句的集合。如果语句块中只有一个语句,也可以省略{}。

由于if else语句可以根据不同的情况执行不同的代码,所以也叫分支结构或选择结构。

只使用if语句

有的时候,我们需要在满足某种条件时进行一些操作,而不满足条件时就不进行任何操作,这个时候我们可以只使用 if 语句。也就是说,if else 不必同时出现。

单独使用 if 语句的形式为:

if (判断条件) {语句块}

如果判断条件成立就执行语句块,否则直接跳过。

多个if else语句

if else 语句也可以多个同时使用,构成多个分支,形式如下:

if (判断条件1) { 语句块1 } else if (判断条件2) { 语句块2 } else if (判断条件3) { 语句块3 } else if (判断条件m) { 语句块m } else { 语句块n }

从上到下依次检测判断条件,当某个判断条件成立时,则执行其对应的语句块,然后跳到整个 if else 语句之外继续执行其他代码。如果所有判断条件都不成立,则执行语句块n,然后继续执行后续代码。

一旦遇到能够成立的判断条件,则不再执行其他的语句块,所以最终只能有一个语句块被执行。

if语句的嵌套

if 语句嵌套时,要注意 if 和 else 的配对问题。C语言规定,else 总是与它前面最近的 if 配对。

if (判断条件1) { if (判断条件2) { 语句块1 } else { 语句块2 } } else { 语句块3 }

关系运算符

关系运算符在使用时,它的的两边都会有一个表达式,比如变量、数值、加减乘除运算等,关系运算符的作用就是判明这两个表达式的大小关系。注意,是判明大小关系,不是其他关系。
 

关系运算符含义数学上的表示
<小于<
<=小于或等于
>大于>
>=大于或等于
==等于=
!=不等于

关系运算符都是双目运算符,其结合性均为左结合。关系运算符的优先级低于算术运算符,高于赋值运算符。在六个关系运算符中,<、<=、>、>=的优先级相同,高于==和!=,==和!=的优先级相同。

在C语言中,有的运算符有两个操作数,例如 10+20,10和20都是操作数,+ 是运算符。我们将这样的运算符称为双目运算符。同理,将有一个操作数的运算符称为单目运算符,将有三个操作数的运算符称为三目运算符。

运算结果1为“真”,表示条件成立,运算结果为0为“假”,表示条件不成立。

逻辑运算符

运算符说明结合性举例
&&与运算,双目,对应数学中的“且”左结合1&&0
||或运算,双目,对应数学中的“或”左结合1||0
!非运算,单目,对应数学中的“非”右结合!a

逻辑运算的结果

在编程中,我们一般将零值称为“假”,将非零值称为“真”。逻辑运算的结果也只有“真”和“假”,“真”对应的值为 1,“假”对应的值为 0。

1. 与运算(&&)

参与运算的两个表达式都为真时,结果才为真,否则为假。

2. 或运算(||)

参与运算的两个表达式只要有一个为真,结果就为真;两个表达式都为假时结果才为假。

3. 非运算(!)

参与运算的表达式为真时,结果为假;参与运算的表达式为假时,结果为真。

优先级

逻辑运算符和其它运算符优先级从低到高依次为:

赋值运算符(=) < &&和|| < 关系运算符 < 算术运算符 < 非(!)

&& 和 || 低于关系运算符,! 高于算术运算符。

switch case语句

C语言虽然没有限制if else能够处理的分支数量,但当分支过多时,用if else处理会不太方便,而且容易出现if else配对出错的情况。

switch 是另外一种选择结构的语句,用来代替简单的、拥有多个分支的if else语句,基本格式如下:

switch (表达式) { case 整型数值1:语句1;  case 整型数值2:语句2; ...; case 整型数值n:语句n; default: 语句n+1; }

执行过程:
1. 首先计算“表达式”的值,假设为 m。

2. 从第一个 case 开始,比较“整型数值1”和 m,如果它们相等,就执行冒号后面的所有语句,也就是从“语句1”一直执行到“语句n+1”,而不管后面的 case 是否匹配成功。

3. 如果“整型数值1”和 m 不相等,就跳过冒号后面的“语句1”,继续比较第二个 case、第三个 case...一旦发现和某个整型数值相等了,就会执行后面所有的语句。假设 m 和“整型数值5”相等,那么就会从“语句5”一直执行到“语句n+1”。

4. 如果直到最后一个“整型数值n”都没有找到相等的值,那么就执行 default 后的“语句 n+1”。

需要重点强调的是,当和某个整型数值匹配成功后,会执行该分支以及后面所有分支的语句。

break是C语言中的一个关键字,专门用于跳出 switch 语句。所谓“跳出”,是指一旦遇到 break,就不再执行 switch 中的任何语句,包括当前分支中的语句和其他分支中的语句;也就是说,整个 switch 执行结束了,接着会执行整个 switch 后面的代码。

由于 default 是最后一个分支,匹配后不会再执行其他分支,所以也可以不添加break; 语句。

最后需要说明的两点是:

1. case 后面必须是一个整数,或者是结果为整数的表达式,但不能包含任何变量。

2. default 不是必须的。当没有 default 时,如果所有 case 都匹配失败,那么就什么都不执行。

条件运算符

条件运算符是C语言中唯一的一个三目运算符,语法格式为:

表达式1 ? 表达式2 : 表达式3

求值规则为:如果表达式1的值为真,则以表达式2 的值作为整个条件表达式的值,否则以表达式3的值作为整个条件表达式的值。条件表达式通常用于赋值语句之中。

1. 条件运算符的优先级低于关系运算符和算术运算符,但高于赋值符。

2. 条件运算符 ? 和 : 是一对运算符,不能分开单独使用。

3. 条件运算符的结合方向是自右至左。

while循环

循环(Loop),就是重复地执行同一段代码,例如要计算 1+2+3+……+99+100 的值,就要重复进行99次加法运算。

while循环的一般形式为:

while (表达式) { 语句块 }

意思是,先计算“表达式”的值,当值为真(非0)时, 执行“语句块”;执行完“语句块”,再次计算表达式的值,如果为真,继续执行“语句块”...这个过程会一直重复,直到表达式的值为假(0),就退出循环,执行 while 后面的代码。

一般把“表达式”称为循环条件,把“语句块”称为循环体,整个循环的过程就是不停判断循环条件、并执行循环体代码的过程。

1. 循环条件成立时的话,while 循环会一直执行下去,永不结束,成为“死循环”。

运行程序,会不停地执行语句块,直到用户强制关闭。

2. 循环条件不成立的话,while 循环就一次也不会执行。

运行程序,什么也不会输出。

do while循环

do-while循环的一般形式为:

do { 语句块 } while (表达式);

do-while循环与while循环的不同在于:它会先执行“语句块”,然后再判断表达式是否为真,如果为真则继续循环;如果为假,则终止循环。因此,do-while 循环至少要执行一次“语句块”。

for循环

C语言中还有 for 循环,它的使用更加灵活,完全可以取代while循环。

for 循环的一般形式为:

for(表达式1; 表达式2; 表达式3) { 语句块 }

它的运行过程为:

1. 先执行“表达式1”。

2. 再执行“表达式2”,如果它的值为真(非0),则执行循环体,否则结束循环。

3. 执行完循环体后再执行“表达式3”。

4. 重复执行步骤 2. 和 3.,直到“表达式2”的值为假,就结束循环。

上面的步骤中,2. 和 3. 是一次循环,会重复执行,for 语句的主要作用就是不断执行步骤 2. 和 3.。

“表达式1”仅在第一次循环时执行,以后都不会再执行,可以认为这是一个初始化语句。“表达式2”一般是一个关系表达式,决定了是否还要继续下次循环,称为“循环条件”。“表达式3”很多情况下是一个带有自增或自减操作的表达式,以使循环条件逐渐变得“不成立”。

for循环中的三个表达式

for 循环中的“表达式1(初始化条件)”、“表达式2(循环条件)”和“表达式3(自增或自减)”都是可选项,都可以省略(但分号;必须保留)。

所谓死循环,就是循环条件永远成立,循环会一直进行下去,永不结束。死循环对程序的危害很大,一定要避免。

break关键字

当 break 关键字用于 while、for循环时,会终止循环而执行整个循环语句后面的代码。break 关键字通常和 if 语句一起使用,即满足条件时便跳出循环。

continue语句

continue 语句的作用是跳过循环体中剩余的语句而强制进入下一次循环。continue语句只用在 while、for 循环中,常与 if 条件语句一起使用,判断条件是否成立。

break与continue的对比:break 用来结束所有循环,循环语句不再有执行的机会;continue 用来结束本次循环,直接跳到下一次循环,如果循环条件成立,还会继续循环。

循环嵌套

嵌套(Nest),就是一条语句里面还有另一条语句,例如 for 里面还有 for,while 里面还有 while,或者 for 里面有 while,while 里面有 if-else,这都是允许的。

在C语言中,代码是顺序、同步执行的,当前代码必须执行完毕后才能执行后面的代码。这就意味着,外层 for 每次循环时,都必须等待内层 for 循环完毕才能进行下次循环。虽然 i 是变量,但是对于内层 for 来说,每次循环时它的值都是固定的。

内层 for 每循环一次输出一个数据,而外层 for 每循环一次输出一行数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值