一、分支语句
1. if语句
if语句是C语言中最基础的分支结构,用于根据条件执行不同的代码块。
基本语法:
if (条件表达式) { // 条件为真(表达式成立)时执行的代码 }
在C语言中,0为假,非0为真。
示例:
int score = 85; if (score >= 60) { printf("及格\n"); }
2. if-else语句
当需要处理条件不成立的情况时,使用if-else结构。
语法:
if (条件表达式) { // 条件为真时执行的代码 } else { // 条件为假时执行的代码 }
不管if语句的条件的真 假,都会被执⾏。如果我们要if语句同时控制2条语句,使⽤ {} 将代码括起来, else 后也可以跟上⼤括号。
示例:
int age = 17; if (age >= 18) { printf("成年人\n"); } else { printf("未成年人\n"); }
3.嵌套if
用于处理多个条件判断的情况。
语法:
if (条件1) { // 条件1为真时执行 } else if (条件2) { // 条件2为真时执行 } else { // 以上条件都不满足时执行 }
示例:
int score = 78; if (score >= 90) { printf("优秀\n"); } else if (score >= 80) { printf("良好\n"); } else if (score >= 60) { printf("及格\n"); } else { printf("不及格\n"); }
else 总是跟最接近的 if 匹配
4. switch语句
用于多路分支选择,来实现分⽀结构,比多个if-else更清晰。
语法:
switch (表达式) { case 常量1: // 代码块1 break; case 常量2: // 代码块2 break; default: // 默认代码块 }
根据表达式
不同的值,执⾏相应的
case
分⽀。
如果找不到对应的值就执⾏ default
分⽀。
注:
1.switch 后的表达式必须是
整型表达式。
2.case 后的值必须是
整形常量表达式。
3.case
和后边的数字之间必须有空格。
4.每⼀个
case
语句中的代码执⾏完成后,需要加上
break
,才能跳出这个
switch
语句。
5.在
switch
语句中
case
语句和
default
语句是没有顺序要求的,只要你的顺序是满⾜实
际需求的就可以。 不过我们通常是把 default
⼦句放在最后处理的。
示例:
char grade = 'B'; switch (grade) { case 'A': printf("优秀\n"); break; case 'B': printf("良好\n"); break; case 'C': printf("及格\n"); break; default: printf("无效等级\n"); }
5. 关系操作符
C 语⾔⽤于⽐较的表达式,称为 “关系表达式”,⾥⾯使⽤的运算符就称 为“关系运算符”。
>
⼤于运算符
<
⼩于运算符
>=
⼤于等于运算符
<=
⼩于等于运算符
== 相等运算符(
相等运算符 == 与赋值运算符 = 是两个不⼀样的运算符
)
!=
不相等运算符
注:多个关系运算符不宜连⽤
6. 条件操作符
条件操作符也叫三⽬操作符,需要接受三个操作数的,形式如下:
exp1 ? exp2 : exp3
如果
exp1
为真,
exp2
计算,计算的结果是整个表达式的结果;
如果 exp1 为假,
exp3
计算,计算的结果是整个表达式的结果。
7. 逻辑操作符
逻辑运算符提供逻辑判断功能,主要有下⾯三个运算符:
!
:逻辑取反运算符(改变单个表达式的真假)。
如果 a 为真, !a 就是假,如果 a 为假, !a就是真
&&
:逻辑与运算符,就是并且的意思(两侧的表达式都为真,则为真,否则为假)。
&& 是⼀个双⽬操作符,使⽤的⽅式是 a&&b , && 两边的表达 式都是真的时候,整个表达式才为真,只要有⼀个是假,则整个表达式为假。
||
:逻辑或运算符,就是或者的意思(两侧⾄少有⼀个表达式为真,则为真,否则为假)
|| 也是⼀个双⽬操作符,使⽤的⽅式是 a || b , || 两边的表达式只要有⼀个是真,整个表达式就是真,两边的表达式都为假的时候,才为假。
7.1. 短路
C语⾔逻辑运算符有⼀个特点,它总是先对左侧的表达式求值,再对右边的表达式求值,这个顺序是 保证的。
如果左边的表达式满⾜逻辑运算符的条件,就不再对右边的表达式求值。这种情况称为“短路”。
二、循环语句
1. while循环
语法:
while (条件表达式) { // 循环体 }
特点:
-
先判断条件,再执行循环体
-
循环次数可能为0
示例:
int i = 1; while (i <= 5) { printf("%d ", i); i++; } // 输出:1 2 3 4 5
2. do-while循环
语法:
do { // 循环体 } while (条件表达式);
特点:
-
先执行循环体,再判断条件
-
循环体至少执行一次
示例:
int i = 1; do { printf("%d ", i); i++; } while (i <= 5); // 输出:1 2 3 4 5
3. for循环
for 循环是三种循环中使⽤最多的
语法:
for (初始化(表达式1); 条件判断(表达式2); 调整(表达式3)) { // 循环体 }
特点:
-
结构紧凑,适合已知循环次数的情况
-
初始化、条件判断和变量调整都在一行
示例:
for (int i = 1; i <= 5; i++) { printf("%d ", i); } // 输出:1 2 3 4 5
3.1 for 循环和 while 循环对比
for
和
while
在实现循环的过程中都有初始化、判断、调整这三个部分,但是
for
循环的三个部
分⾮常集中,便于代码的维护,⽽如果代码较多的时候
while
循环的三个部分就⽐较分散,所以从形 式上 for
循环要更优⼀些。
4. 循环控制语句
break语句:
-
立即终止当前循环
-
常用于switch或循环中提前退出
continue语句:
-
跳过当前循环的剩余部分
-
直接进入下一次循环
示例:
for (int i = 1; i <= 10; i++) { if (i == 5) break; // 当i等于5时退出循环 if (i % 2 == 0) continue; // 跳过偶数 printf("%d ", i); } // 输出:1 3
三、循环的嵌套
1.分支和循环语句可以相互嵌套,形成更复杂的逻辑。
示例:
for (int i = 1; i <= 3; i++) { printf("外层循环 %d: ", i); for (int j = 1; j <= 2; j++) { if (j == 1) { printf("内层循环-A "); } else { printf("内层循环-B "); } } printf("\n"); } /* 输出: 外层循环 1: 内层循环-A 内层循环-B 外层循环 2: 内层循环-A 内层循环-B 外层循环 3: 内层循环-A 内层循环-B */
四、goto语句
C语⾔提供了⼀种⾮常特别的语法,就是
goto
语句和跳转标号,
goto
语句可以实现在同⼀个函数
内跳转到设置好的标号处。
#
include
<stdio.h>
int
main
()
{
printf
(
"hehe\n"
);
goto
next;
printf
(
"haha\n"
);
next:
printf
(
"
跳过了
haha
的打印
\n"
);
return
0
;
}
goto
语句如果使⽤的不当,就会导致在函数内部随意乱跳转,打乱程序的执⾏流程,所以我们的建 议是能不⽤尽量不去使⽤;但是 goto
语句也不是⼀⽆是处,在多层循环的代码中,如果想快速跳 出,使⽤ goto
就⾮常的⽅便了。
五、最佳实践建议
-
保持条件表达式简单:复杂的条件应该分解或使用临时变量
-
避免深层嵌套:超过3层的嵌套会使代码难以理解
-
循环边界检查:特别注意循环的初始值和终止条件
-
使用适当的循环:
-
已知次数用for循环
-
未知次数但至少执行一次用do-while
-
其他情况用while
-
-
添加注释:对复杂的条件或循环逻辑添加说明
掌握这些分支和循环结构是C语言编程的基础,合理使用它们可以构建出各种复杂的程序逻辑。