选择结构if else和switch

一、if-else语句

1. 基本语法
if (条件表达式) {
    // 条件为真时执行的代码
} else {
    // 条件为假时执行的代码
}
  • 条件表达式:结果为非零(真)或零(假)
  • else部分:可选
2. 多分支结构
if (条件1) {
    // 条件1为真时执行
} else if (条件2) {
    // 条件2为真时执行
} else if (条件3) {
    // 条件3为真时执行
} else {
    // 所有条件都为假时执行
}
3. 嵌套if-else
if (条件1) {
    if (条件2) {
        // 条件1和条件2都为真时执行
    } else {
        // 条件1为真,条件2为假时执行
    }
} else {
    // 条件1为假时执行
}
4. 示例:判断奇偶数
#include <stdio.h>

int main() {
    int num;
    printf("请输入一个整数: ");
    scanf("%d", &num);
    
    if (num % 2 == 0) {
        printf("%d 是偶数\n", num);
    } else {
        printf("%d 是奇数\n", num);
    }
    
    return 0;
}
5. 示例:成绩等级判断
#include <stdio.h>

int main() {
    int score;
    printf("请输入成绩(0-100): ");
    scanf("%d", &score);
    
    if (score >= 90) {
        printf("等级: A\n");
    } else if (score >= 80) {
        printf("等级: B\n");
    } else if (score >= 70) {
        printf("等级: C\n");
    } else if (score >= 60) {
        printf("等级: D\n");
    } else {
        printf("等级: F\n");
    }
    
    return 0;
}

二、switch语句

1. 基本语法
switch (表达式) {
    case 常量表达式1:
        // 当表达式等于常量表达式1时执行
        break;
    case 常量表达式2:
        // 当表达式等于常量表达式2时执行
        break;
    // 可以有多个case
    default:
        // 当表达式不匹配任何case时执行
}
  • 表达式:必须是整数类型(包括char
  • 常量表达式:必须是常量或字面量
  • break语句:可选,用于跳出switch结构
2. 示例:星期输出
#include <stdio.h>

int main() {
    int day;
    printf("请输入星期几(1-7): ");
    scanf("%d", &day);
    
    switch (day) {
        case 1:
            printf("星期一\n");
            break;
        case 2:
            printf("星期二\n");
            break;
        case 3:
            printf("星期三\n");
            break;
        case 4:
            printf("星期四\n");
            break;
        case 5:
            printf("星期五\n");
            break;
        case 6:
            printf("星期六\n");
            break;
        case 7:
            printf("星期日\n");
            break;
        default:
            printf("输入错误,请输入1-7之间的数字\n");
    }
    
    return 0;
}
3. case合并

多个case可以共享同一组代码:

char grade;
printf("请输入等级(A/B/C/D/F): ");
scanf(" %c", &grade);  // 注意空格跳过空白字符

switch (grade) {
    case 'A':
    case 'B':
    case 'C':
        printf("成绩合格\n");
        break;
    case 'D':
    case 'F':
        printf("成绩不合格\n");
        break;
    default:
        printf("无效等级\n");
}

三、if-elseswitch的比较

特点if-elseswitch
适用场景复杂条件判断等值判断
条件类型任意布尔表达式整数类型(int, char 等)
执行效率依次判断每个条件通过跳转表直接定位
代码可读性条件复杂时可能降低结构清晰,适合多分支等值判断

四、选择结构的最佳实践

  1. 避免深层嵌套:超过 3 层嵌套时,考虑重构代码

  2. 使用switch替代复杂if-else:当判断多个离散值时

  3. 条件表达式简化

    // 不推荐
    if (a == true) { ... }
    
    // 推荐
    if (a) { ... }
    
  4. 边界条件检查:确保覆盖所有可能的情况

    if (age >= 18) {
        printf("成年人\n");
    } else {
        printf("未成年人\n");
    }
    
  5. 空语句处理:明确空条件的意图

    if (condition)
        ;  // 空语句,明确表示不执行任何操作
    else {
        // ...
    }

 简单计算器的程序设计

#include <stdio.h>

int main() {
    double num1, num2, result;
    char op;

    printf("请输入表达式 (例如: 3 + 5): ");
    scanf("%lf %c %lf", &num1, &op, &num2);

    switch (op) {
        case '+':
            result = num1 + num2;
            printf("%.2lf + %.2lf = %.2lf\n", num1, num2, result);
            break;
        case '-':
            result = num1 - num2;
            printf("%.2lf - %.2lf = %.2lf\n", num1, num2, result);
            break;
        case '*':
            result = num1 * num2;
            printf("%.2lf * %.2lf = %.2lf\n", num1, num2, result);
            break;
        case '/':
            if (num2 == 0) {
                printf("错误: 除数不能为零\n");
            } else {
                result = num1 / num2;
                printf("%.2lf / %.2lf = %.2lf\n", num1, num2, result);
            }
            break;
        default:
            printf("错误: 不支持的运算符 %c\n", op);
    }

    return 0;
}    

 

posted @ 2025-06-27 12:40  RaLi  阅读(0)  评论(0)    收藏  举报  来源