C语言中的分支与循环
C语言可以实现三种结构:顺序结构、选择结构、循环结构
顺序结构:即普通的运行结构,程序的执行按照代码的书写顺序,从上到下逐条执行,没有任何跳转或分支,每条语句依次执行。
选择结构:允许程序根据条件选择不同的执行路径。(if语句,switch语句)
循环结构:允许重复执行一段代码,直到满足特定的条件。(while循环,do-while循环,for循环)
运算符
运算符是构建C语言表达式和语句的基础,通过它们可以执行各种计算和逻辑操作。是后续分支、循环结构中进行判断的重要组成部分
1. 算术运算符
'+', '-', '*', '/', '%', '++', '--'
其中:
'+'\'-' 作为一元运算符时表示某一值或变量的相反数,作为二元运算符时表示加法\减法。
除法运算符'/',得到的数据类型以运算符两边的数据类型决定。两边都是整数型,得到的结果也将会是整数(3/2 == 1 而不是1.5);如有一边或者两边是浮点型,则结果会是浮点型数据。
取模'%'(求余数,只用于整数),得到的结果是整数,其正负号根据符号左边的正负号决定。
自增'++'(增加1)、自减'--'(减少1):用法一样,见下
// ++ 或者 -- 可以放在整数变量的左边或者右边。
// 不涉及赋值到其他变量或判断该变量值时,例如只有 i++ 或 ++i, 就相当于 i = i + 1
// 而当涉及到赋值到其他变量或判断该变量值时,放在左边代表变量先+/-,再调用变量;放在右边表示先调用变量,再+/-。如
#include <stdio.h>
int main()
{
int a = 0, b = 0, c = 0;
b = a++; // 这里先将a=0赋值给b,然后a再加1,所以b=0,a=1
printf("a=%d, b=%d\n",a,b);
c = ++a; // 这里先给a+1,再将a=2赋值给c,所以a=2,c=2
printf("a=%d, c=%d\n",a,c);
}
2. 关系运算符
== :等于
!= :不等于
> :大于
< :小于
>= :大于或等于
<= :小于或等于
注意:程序中不可把判断是否等于 如 if( i == 1) 写成赋值 如 if ( i = 1),否则会出大问题
3. 逻辑运算符
&& :逻辑与
|| :逻辑或
! :逻辑非
4. 位运算符
& :按位与
| :按位或
^ :按位异或
~ :按位取反
<< :左移
>> :右移
5. 赋值运算符
= :基本赋值
+=、-=、*=、/=、%= :复合赋值,例如 a += b 等价于 a = a + b
<<=、>>=、&=、^=、|= :位运算的复合赋值
6. 条件运算符(三元运算符)
?: :三元运算符,形式为 条件 ? 表达式1 : 表达式2。如果条件为真,则结果为表达式1,否则为表达式2。
7. 逗号运算符
,:用于分隔表达式,使它们能在一个语句中依次执行。
8. 类型运算符
sizeof:返回变量或类型的大小(以字节为单位)。
&(当用作一元运算符时):取地址运算符。
*(当用作一元运算符时):指针解引用运算符。
9. 指针运算符
->:用于访问结构体指针所指向的成员。
.:用于访问结构体的成员。
分支
C语言中的分支结构主要通过以下几种语句实现,它们允许程序根据不同的条件执行不同的代码路径:
1. if 语句:
最基本的分支结构。
如果条件为真(非零),执行if块内的语句。
语法:if (condition) { /* 代码块 */ }
2. if-else 语句:
扩展了if语句,允许在条件不满足时执行另一组语句。
语法:if (condition) { /* 代码块1 */ } else { /* 代码块2 */ }
3. if-else if-else 语句:
用于处理多个条件。
如果第一个if条件不满足,程序会检查else if的条件,依此类推。如果所有条件都不满足,则执行else块。
语法:if (condition1) { /* 代码块1 */ } else if (condition2) { /* 代码块2 */ } ... else { /* 默认代码块 */ }
4.switch 语句:
用于基于变量的值选择多个代码块之一来执行。
switch语句内部使用case标签来定义可能的值,如果变量与case标签匹配,则执行该case块。
通常与break语句一起使用,以防止执行连续的case块。
语法:switch (expression) { case value1: /* 代码块1 */ break; case value2: /* 代码块2 */ break; ... default: /* 默认代码块 */ }
循环
C语言提供了几种循环结构,用于重复执行一段代码多次。这些循环结构包括:
1. while 循环:
while 循环在每次迭代开始前检查条件。如果条件为真(非零),则执行循环体。
语法:while (condition) { /* 循环体 */ }
这是最基本的循环结构,适用于在循环开始前不知道迭代次数的情况。
2. do-while 循环:
do-while 循环**至少执行一次**循环体,然后检查条件。如果条件为真,则重复循环。
语法:do { /* 循环体 */ } while (condition);
这种循环结构适用于至少需要执行一次循环体的情况。
3.for 循环:
for 循环提供了一个初始化表达式、条件表达式和迭代表达式的综合结构。
语法:for (initialization; condition; increment) { /* 循环体 */ }
这种循环结构适用于当你知道循环需要执行的确切次数时。
4.嵌套循环:
循环结构可以嵌套使用,即在一个循环内部使用另一个循环。嵌套循环常用于处理多维数据结构,如二维数组。
5.循环控制语句:
break:立即退出当前循环,继续执行循环之后的代码。
continue:跳过当前迭代的剩余部分,立即开始下一次迭代。