【C语言】if语句的使用与注意事项

一、if基本用法

语法结构:

if(条件表达式){
    //条件为真时执行的代码块
}
//大括号可省略,但省略时if语句只覆盖最近的一条语句

示例:判断整数5是否为0

int num = 5;
if(num != 0){
    printf("该数不是0\n");//条件为真时执行
}

注意事项:

  • 条件表达式结果非0时为真,0时为假
  • 简写技巧: if(num) 等效于 if(num != 0),if(!num) 等效于 if(num == 0)。 

二、if-else if-else多分支结构

语法结构:

if (条件表达式) {
    // 条件为真时执行
} else {
    // 条件为假时执行
}
if(条件1){
    //条件1为真时执行
}else if{
    //条件2为真时执行
}else{
    //前述所有条件均不满足时执行
}

注意:else必须紧跟if的右括号,不能单独使用

示例:成绩等级判断

int score = 85;
if (score >= 90) {
    printf("A\n");       // 90分及以上执行 
} else if (score >= 80) {
   printf("B\n");       // 80-89分执行
} else if (score >= 60) {
    printf("C\n");       // 60-79分执行 
} else {
    printf("D\n");       // 60分以下执行 
}

关键特性解析:

1.执行顺序

  • 从上到下依次判断条件,当某个条件满足时,执行对应代码块并跳过后续判断。
  • 若所有条件均不满足且存在else块,则执行else块。

2.适用场景

  • 需要处理多个互斥条件时(如等级划分、菜单选择等)
  • 比单独使用多个if语句更高效,避免重复判断。

注意事项:

1.条件顺序影响结果

if (score > 60) { ... }
   else if (score > 80) { ... } // 此分支永远不会执行

2.else的可选性

if (x > 0) { ... }
   else if (x < 0) { ... }
   // 此处无else块,x=0时不执行任何操作

3.代码块包裹

  • 即使分支只有一条语句,也建议用{}包裹,避免后续代码误判:
if (cond1) 
       funcA();  // 仅此语句属于if分支 
   else if (cond2) 
       funcB();  // 易被误认为属于else分支

三、分支中包含多条语句

语法要求:

多条语句必须用{}包裹,否则仅第一条语句属于分支。

int a = 10, b = 20;
if (a > b) 
    printf("a更大\n");  // 此语句属于if分支
    printf("比较结束\n"); // 此语句不属于if分支,始终执行!

正确写法:

if (a > b) {
    printf("a更大\n");
    printf("比较结束\n");  // 两条语句均属于if分支
}

四、嵌套if语句

语法结构:

if (条件1) {
    if (条件2) {
        // 条件1和条件2均为真时执行
    }
}

示例:多层条件判断

int score = 85;
if (score >= 60) {
    printf("及格\n");
    if (score >= 90) {  // 嵌套if
        printf("优秀\n");
    }
} else {
    printf("不及格\n");
}

注意事项:

  • 嵌套层级不宜过深,建议不超过3层,否则降低可读性

五、悬空else问题

问题描述:

当多个if嵌套时,else会匹配最近的未配对的if。

错误示例:

if (条件1)
    if (条件2)
        printf("条件1和2均满足\n");
else 
    printf("条件1不满足?\n");  // 实际匹配最近的if(条件2)

修正方法:使用{}明确归属

if (条件1) {
    if (条件2) {
        printf("条件1和2均满足\n");
    }
} else {
    printf("条件1不满足\n");  // 正确匹配外层的if(条件1)
}

六、其他注意事项

1.避免误用赋值运算符

if (a = 5) { ... }  // 错误!应为 if (a == 5)

2.条件表达式简化

int *ptr = malloc(10);
   if (ptr) { ... }    // 等效于 if (ptr != NULL)

3.代码风格建议

  • 即使分支只有一条语句,也建议使用{},增强可读性。
  • 复杂条件可用括号明确优先级,例如

if((a > b) && (c < d))

七、if语句完整复习代码示例

#include <stdio.h>
 
int main() {
    // ================= 基础结构示例 ================= 
    // 1. 基础if结构 
    int num = -5;
    if (num < 0) {
        printf("[基础判断] %d是负数\n", num);
    }
 
    // 2. if-else结构 
    int hour = 14;
    if (hour < 12) {
        printf("[上下午判断] 上午好\n");
    } else {
        printf("[上下午判断] 下午好\n");
    }
 
    // ================ 多分支结构示例 ================
    // 3. if-else if-else结构(成绩等级)
    int score = 85;
    if (score >= 90) {
        printf("[成绩等级] A\n");
    } else if (score >= 80) {  // 注意条件顺序从高到低 
        printf("[成绩等级] B\n");
    } else if (score >= 60) {
        printf("[成绩等级] C\n");
    } else {
        printf("[成绩等级] D\n");
    }
 
    // ================ 嵌套结构示例 ================
    // 4. 嵌套if(年龄+性别组合判断)
    int age = 25;
    char gender = 'F';
    if (age >= 18) {
        printf("[成人判断] ");
        if (gender == 'M') {
            printf("成年男性\n");
        } else if (gender == 'F') {
            printf("成年女性\n");
        }
    }
 
    // ================ 复合条件示例 ================
    // 5. 逻辑运算符组合判断 
    int temperature = 28, humidity = 65;
    if (temperature > 30 && humidity > 70) {
        printf("[天气预警] 高温高湿警报\n");
    } else if (temperature < 0 || humidity < 30) {
        printf("[天气预警] 极端气候警告\n");
    }
 
    // ================ 常见问题演示 ================
    // 6. 悬空else问题修正 
    int x = 10, y = 5;
    if (x > 5) {
        if (y > 10) {           // 内层if 
            printf("y大于10\n");
        }
    } else {                    // 明确匹配外层if 
        printf("x不大于5\n");
    }
 
    // 7. 赋值运算符误用演示 
    int a = 0;
    if (a == 5) {               // 正确写法(比较运算)
        // if (a = 5) { ... }   // 错误写法(赋值运算)
    }
 
    return 0;
}

运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值