Skip to content

控制流

在编程中,程序默认是从上到下一行行执行的。但有时候我们需要:

  • 重复做某件事(比如打印10次"Hello")
  • 根据条件决定做不做某件事(比如只有成绩及格才打印"通过")

这就是**控制流(Control Flow)**要解决的问题。

for循环

💡 概念说明

for循环用于重复执行某段代码指定的次数。它的结构是:

c
for (初始化; 条件; 更新) {
    // 要重复执行的代码
}
  • 初始化:设置起始值(只执行一次)
  • 条件:每次循环前检查,为真就继续,为假就停止
  • 更新:每次循环后执行(通常是计数器加1)

📝 代码示例

c
#include <stdio.h>

int main() {
    printf("开始倒计时:\n");
    
    for (int i = 5; i >= 1; i--) {
        printf("%d\n", i);
    }
    
    printf("发射!\n");
    return 0;
}

运行结果

开始倒计时:
5
4
3
2
1
发射!

这段代码做了什么?

  • int i = 5:从5开始
  • i >= 1:只要i大于等于1就继续循环
  • i--:每次循环后i减1
  • 总共循环5次,打印5、4、3、2、1

💪 练习题

练习1:打印1到10的所有数字

点击查看答案
c
#include <stdio.h>

int main() {
    for (int i = 1; i <= 10; i++) {
        printf("%d\n", i);
    }
    return 0;
}

练习2:计算1到100的总和

点击查看答案
c
#include <stdio.h>

int main() {
    int sum = 0;  // 用于存储总和
    
    for (int i = 1; i <= 100; i++) {
        sum = sum + i;  // 每次把i加到sum上
    }
    
    printf("1到100的总和是: %d\n", sum);
    return 0;
}

输出:1到100的总和是: 5050

while循环

💡 概念说明

while循环用于在条件为真时持续执行代码。它比for循环更灵活,适合不知道要循环多少次的情况。

c
while (条件) {
    // 要重复执行的代码
}

只要条件为真,就一直执行大括号里的代码。

📝 代码示例

c
#include <stdio.h>

int main() {
    int number = 1;
    
    while (number <= 5) {
        printf("第%d次循环\n", number);
        number++;  // 每次加1
    }
    
    printf("循环结束\n");
    return 0;
}

运行结果

第1次循环
第2次循环
第3次循环
第4次循环
第5次循环
循环结束

注意

如果忘记写number++number永远是1,条件永远为真,程序会无限循环下去!

📝 实用示例:猜数字游戏

c
#include <stdio.h>

int main() {
    int secret = 42;  // 秘密数字
    int guess = 0;    // 用户猜的数字
    
    while (guess != secret) {
        printf("请猜一个数字: ");
        scanf("%d", &guess);
        
        if (guess > secret) {
            printf("太大了!\n");
        } else if (guess < secret) {
            printf("太小了!\n");
        }
    }
    
    printf("恭喜你猜对了!\n");
    return 0;
}

这个程序会一直让你猜数字,直到猜对为止。

💪 练习题

练习:写一个程序,输入正整数,计算它有多少位数字(比如123是3位数)

点击查看答案
c
#include <stdio.h>

int main() {
    int number, count = 0;
    
    printf("请输入一个正整数: ");
    scanf("%d", &number);
    
    while (number > 0) {
        number = number / 10;  // 去掉最后一位
        count++;               // 计数加1
    }
    
    printf("这个数字有%d\n", count);
    return 0;
}

if条件判断

💡 概念说明

if语句用于根据条件决定是否执行某段代码。有三种形式:

  1. 单独的if:条件为真才执行
c
if (条件) {
    // 代码
}
  1. if-else:二选一
c
if (条件) {
    // 条件为真时执行
} else {
    // 条件为假时执行
}
  1. if-else if-else:多选一
c
if (条件1) {
    // 条件1为真
} else if (条件2) {
    // 条件2为真
} else {
    // 以上都不满足
}

📝 代码示例

c
#include <stdio.h>

int main() {
    int score;
    
    printf("请输入考试分数: ");
    scanf("%d", &score);
    
    if (score >= 90) {
        printf("优秀!\n");
    } else if (score >= 60) {
        printf("及格\n");
    } else {
        printf("不及格\n");
    }
    
    return 0;
}

运行示例

  • 输入95,输出:优秀!
  • 输入75,输出:及格
  • 输入45,输出:不及格

📝 常用比较运算符

c
==  // 等于
!=  // 不等于
>   // 大于
<   // 小于
>=  // 大于等于
<=  // 小于等于

提示

=是赋值,==是比较。写条件判断时要用==

c
if (x == 5)  // 正确:判断x是否等于5
if (x = 5)   // 错误:这是把5赋值给x

📝 组合条件示例

c
#include <stdio.h>

int main() {
    int age, has_ticket;
    
    printf("请输入年龄: ");
    scanf("%d", &age);
    printf("有票吗? (1=有, 0=没有): ");
    scanf("%d", &has_ticket);
    
    if (age >= 18 && has_ticket == 1) {
        printf("可以入场\n");
    } else {
        printf("不能入场\n");
    }
    
    return 0;
}
  • &&表示"并且"(两个条件都要满足)
  • ||表示"或者"(满足其中一个即可)

💪 练习题

练习1:判断一个数是奇数还是偶数

点击查看答案
c
#include <stdio.h>

int main() {
    int number;
    
    printf("请输入一个整数: ");
    scanf("%d", &number);
    
    if (number % 2 == 0) {
        printf("%d是偶数\n", number);
    } else {
        printf("%d是奇数\n", number);
    }
    
    return 0;
}

提示:%是取余运算符,偶数除以2余数为0

练习2:输入三个数,找出最大的那个

点击查看答案
c
#include <stdio.h>

int main() {
    int a, b, c, max;
    
    printf("请输入三个整数: ");
    scanf("%d %d %d", &a, &b, &c);
    
    max = a;  // 假设a最大
    
    if (b > max) {
        max = b;
    }
    
    if (c > max) {
        max = c;
    }
    
    printf("最大的数是: %d\n", max);
    return 0;
}

📌 小结

  • for循环:知道要重复多少次时使用,适合计数场景
  • while循环:不确定重复次数,只要条件满足就继续,记得更新条件避免死循环
  • if条件判断:根据条件执行不同代码,注意===的区别