Skip to content

第四课:条件语句与逻辑控制

本章将学习如何使用条件语句(如 if、else 和 switch)和逻辑操作符(如 &&、|| 和 !)来控制程序的执行路径。这是编写灵活程序的核心能力。

条件语句:if 和 else

条件语句通过布尔条件的真假来决定程序的执行路径。

语法结构:

c
if (条件) {
    // 条件为真时执行的代码
} else if (另一个条件) {
    // 另一个条件为真时执行的代码
} else {
    // 所有条件均为假时执行的代码
}

示例:

c
#include <stdio.h>

int main(void) {
    int age;

    printf("请输入你的年龄:");
    scanf("%d", &age);

    if (age < 18) {
        printf("你是未成年人。\n");
    } else if (age < 60) {
        printf("你是成年人。\n");
    } else {
        printf("你是老年人。\n");
    }

    return 0;
}

逻辑操作符

逻辑操作符用于组合或反转条件,形成更复杂的判断逻辑:

  • &&(与):所有条件都为真时,结果为真。
  • ||(或):只要一个条件为真,结果为真。
  • !(非):将条件的真假反转。

示例:

c
#include <stdio.h>

int main(void) {
    int num;

    printf("请输入一个整数:");
    scanf("%d", &num);

    if (num > 0 && num % 2 == 0) {
        printf("这个数是正偶数。\n");
    } else if (num > 0 && num % 2 != 0) {
        printf("这个数是正奇数。\n");
    } else if (num < 0) {
        printf("这个数是负数。\n");
    } else {
        printf("这个数是零。\n");
    }

    return 0;
}

条件语句:switch

switch 是另一种条件分支控制方法,适合处理多个可能值的情况。

语法结构:

c
switch (表达式) {
    case 值1:
        // 当表达式等于值1时执行的代码
        break;
    case 值2:
        // 当表达式等于值2时执行的代码
        break;
    default:
        // 当所有 case 都不匹配时执行的代码
}

示例:

c
#include <stdio.h>

int main(void) {
    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;
}

综合示例:猜数字游戏

ifswitch 结合在一个示例中。

c
#include <stdio.h>
#include <stdlib.h> // rand() 和 srand() 函数都定义在 <stdlib.h> 中
#include <time.h>

int main(void) {
    int target, guess;

    // 初始化随机数种子
    srand((unsigned)time(NULL)); // 用当前时间初始化随机数种子,确保每次运行生成不同的随机数序列
    target = rand() % 100 + 1; // 生成一个 1 到 100 的随机整数

    printf("欢迎来到猜数字游戏!\n");
    printf("系统已生成一个 1~100 的数字,请猜测:\n");

    while (1) { // 创建一个无限循环,通常配合 break 控制语句结束
        printf("请输入你的猜测:");
        scanf("%d", &guess);

        if (guess < target) {
            printf("太小了,请再试一次!\n");
        } else if (guess > target) {
            printf("太大了,请再试一次!\n");
        } else {
            printf("恭喜你,猜对了!\n");
            break;
        }
    }

    return 0;
}

练习

  1. 编写程序,判断一个输入的年份是否是闰年。
  2. 修改猜数字游戏:
    • 限制玩家最多猜 10 次。
    • 如果猜错 10 次,显示游戏失败。

代码