一、顺序结构:程序执行的基础

顺序结构是 C 语言程序最基本的执行模式,程序从main函数开始,按照代码书写顺序依次执行,直到遇到return 0main函数结束标志)。

这种结构无需额外关键字控制,代码自上而下自然执行,是所有复杂逻辑的基础。例如:

c

运行

#include <stdio.h>
int main() {
    int a = 10;
    int b = 20;
    int sum = a + b;
    printf("sum = %d\n", sum); // 按顺序执行赋值、计算、打印
    return 0;
}

上述代码会依次完成变量定义、求和、打印操作,无跳转或分支,属于典型的顺序结构。


二、分支结构:根据条件选择执行路径

分支结构允许程序根据特定条件判断,选择不同的代码块执行。要使用分支结构,需先掌握关系运算符、逻辑运算符,再结合ifswitch关键字实现。

2.1 核心基础:关系运算符与逻辑运算符

关系运算符(双目运算符)

用于比较两个值的关系,结果为逻辑值(真 / 假),在 C 语言中用整数表示:0 代表假(false),非 0 代表真(true)。

  • 常用关系运算符:>(大于)、>=(大于等于)、<(小于)、<=(小于等于)、==(等于)、!=(不等于)
  • 注意:==是判断相等的关系运算符,与赋值运算符=完全不同,误用会导致逻辑错误。
逻辑运算符

用于组合多个关系表达式,实现更复杂的条件判断:

  • &&(逻辑与):左右表达式同时为真,整体才为真(“既要又要”)
  • ||(逻辑或):左右表达式至少一个为真,整体就为真(“要么要么”)
  • !(逻辑非,单目运算符):取反逻辑值,真变假、假变真
逻辑运算真值表

| 左表达式 | 右表达式 | && 结果 | || 结果 ||----------|----------|-----------|-----------|| 真(非 0) | 真(非 0) | 真(1) | 真(1) || 真(非 0) | 假(0) | 假(0) | 真(1) || 假(0) | 真(非 0) | 假(0) | 真(1) || 假(0) | 假(0) | 假(0) | 假(0) |

关键特性:短路截断

逻辑运算符存在 “短路” 现象,可优化程序执行效率:

  • &&:左表达式为假时,直接判定整体为假,右表达式不再执行
  • ||:左表达式为真时,直接判定整体为真,右表达式不再执行

示例:

c

运行

int a = 0, b = 0;
a++ && b++; // 左表达式a++后为0(假),b++不执行,最终a=1,b=0
++a || b++; // 左表达式++a后为1(真),b++不执行,最终a=1,b=0

2.2 输入数据:分支判断的前提

分支结构常依赖用户输入的数据作为判断条件,scanf是 C 语言常用输入函数,推荐以下使用方式:

不推荐方式(易出错)
  • 格式化字符串中包含非控制字符(如scanf("plsnum %d", &num)),需严格匹配输入格式(如必须输入 “plsnum 123”),否则接收失败。
  • 无接收变量的输入(如scanf("hello")),仅读取内容不存储,实际用途极少。
推荐方式(通用稳定)

格式化字符串中仅保留控制字符(%d整型、%s字符串、%c字符),输入时直接传入对应数据即可:

c

运行

#include <stdio.h>
int main() {
    int num1 = 0, num2 = 0;
    printf("请输入两个整数:");
    scanf("%d %d", &num1, &num2); // 直接输入“10 20”即可,空格分隔
    printf("你输入的数是:%d 和 %d\n", num1, num2);
    return 0;
}

2.3 三目运算符:简化分支判断

三目运算符(? :)是分支结构的简化形式,用于二选一的简单判断,语法如下:

c

运行

表达式1 ? 表达式2 : 表达式3;
  • 逻辑:若表达式 1 为真,整体结果为表达式 2 的值;否则为表达式 3 的值。
  • 示例:求两个数的最大值

c

运行

int a = 15, b = 25;
int max = (a > b) ? a : b; // a>b为假,max = 25

2.4 if 分支:灵活的条件判断

if分支适用于各种条件判断,支持单分支、双分支、多分支和嵌套结构,灵活性极高。

1. 简单 if(单分支)

c

运行

if (表达式) {
    // 表达式为真时执行的代码块
}
  • 注意:if后面不要加多余分号,否则会导致代码块与if脱离(编译器不报错,但逻辑错误)。
2. if-else(双分支)

c

运行

if (表达式) {
    // 表达式为真时执行
} else {
    // 表达式为假时执行
}

示例:判断奇偶数

c

运行

int num = 0;
scanf("%d", &num);
if (num % 2 == 0) {
    printf("%d 是偶数\n", num);
} else {
    printf("%d 是奇数\n", num);
}
3. 阶梯 if(多分支)

适用于多个互斥条件的判断,语法如下:

c

运行

if (表达式1) {
    语句1;
} else if (表达式2) {
    语句2;
} else if (表达式3) {
    语句3;
} else {
    // 所有条件都不满足时执行
    语句4;
}

示例:成绩等级判断

c

运行

int score = 0;
scanf("%d", &score);
if (score >= 90) {
    printf("优秀\n");
} else if (score >= 80) {
    printf("良好\n");
} else if (score >= 60) {
    printf("及格\n");
} else {
    printf("不及格\n");
}
4. 嵌套 if(多层条件)

ifelse代码块中嵌套另一个if结构,用于复杂的多层判断:

c

运行

if (表达式1) {
    if (表达式2) {
        语句1; // 表达式1和2都为真
    } else {
        语句2; // 表达式1真、2假
    }
} else {
    语句3; // 表达式1假
}
  • 注意:嵌套层数建议控制在 5 层以下,否则代码可读性极差。

2.5 switch 分支:多常量匹配

switch适用于多个常量值匹配的场景(如菜单选择、状态判断),当分支数大于 3 时,比阶梯if更简洁。

语法结构

c

运行

switch (整型表达式) {
    case 常量1:
        语句1;
        break; // 跳出switch,避免穿透
    case 常量2:
        语句2;
        break;
    case 常量3:
        语句3;
        break;
    default:
        // 所有case都不匹配时执行
        语句4;
}
  • 关键:case后必须是常量(不能是变量),且每个case执行完后需加break,否则会发生 “穿透”(继续执行下一个case的语句)。
  • 示例:菜单选择

c

运行

int choice = 0;
printf("1. 登录  2. 注册  3. 退出\n");
scanf("%d", &choice);
switch (choice) {
    case 1:
        printf("执行登录逻辑\n");
        break;
    case 2:
        printf("执行注册逻辑\n");
        break;
    case 3:
        printf("退出程序\n");
        break;
    default:
        printf("输入错误\n");
}

三、循环结构:重复执行代码块

循环结构用于让一段代码重复执行,C 语言中主要通过forwhiledo-while实现,核心是 “循环条件” 和 “循环体” 的设计。

3.1 while 循环:先判断后执行

语法:

c

运行

while (循环条件) {
    循环体; // 条件为真时重复执行
}
  • 逻辑:先判断循环条件,若为真则执行循环体,执行完后再次判断条件,直到条件为假退出循环。
  • 注意:循环体中必须有改变循环条件的语句,否则会导致无限循环。
  • 示例:计算 1~100 的和

c

运行

int i = 1, sum = 0;
while (i <= 100) {
    sum += i;
    i++; // 改变循环条件,避免无限循环
}
printf("1~100的和:%d\n", sum);

3.2 do-while 循环:先执行后判断

语法:

c

运行

do {
    循环体; // 先执行一次
} while (循环条件); // 再判断条件,真则继续循环
  • 特点:循环体至少执行一次,适用于 “必须先执行一次” 的场景(如密码输入验证)。
  • 示例:密码验证

c

运行

int password = 0;
do {
    printf("请输入密码:");
    scanf("%d", &password);
} while (password != 123456); // 密码错误则重新输入
printf("密码正确,登录成功\n");

3.3 for 循环:结构化更强

语法:

c

运行

for (初始化表达式; 循环条件; 更新表达式) {
    循环体;
}
  • 执行顺序:初始化表达式(仅执行一次)→ 判断循环条件(真则执行循环体)→ 执行更新表达式 → 再次判断条件,直到条件为假。
  • 优势:初始化、条件判断、更新表达式集中在一行,结构清晰,是最常用的循环方式。
  • 示例:打印 1~10 的数字

c

运行

for (int i = 1; i <= 10; i++) {
    printf("%d ", i);
}

3.4 循环控制:break 与 continue

  • break:直接跳出当前循环,不再执行后续循环体和判断。
  • continue:跳过本次循环的剩余部分,直接进入下一次循环条件判断。

示例:

c

运行

// break示例:找到第一个能被3整除的数后退出
for (int i = 1; i <= 10; i++) {
    if (i % 3 == 0) {
        printf("找到:%d\n", i);
        break; // 跳出循环
    }
}

// continue示例:只打印奇数
for (int i = 1; i <= 10; i++) {
    if (i % 2 == 0) {
        continue; // 跳过偶数,直接进入下一次循环
    }
    printf("%d ", i); // 只打印1、3、5、7、9
}
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐