C语言分支和循环语句

一、分支语句

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 就⾮常的⽅便了。

五、最佳实践建议

  1. 保持条件表达式简单:复杂的条件应该分解或使用临时变量

  2. 避免深层嵌套:超过3层的嵌套会使代码难以理解

  3. 循环边界检查:特别注意循环的初始值和终止条件

  4. 使用适当的循环

    • 已知次数用for循环

    • 未知次数但至少执行一次用do-while

    • 其他情况用while

  5. 添加注释:对复杂的条件或循环逻辑添加说明

掌握这些分支和循环结构是C语言编程的基础,合理使用它们可以构建出各种复杂的程序逻辑。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值