C语言程序的三种基本结构(附带示例)

 
按照代码的执行顺序,或者执行流程,我们可以将C语言程序分成三种基本结构,分别是顺序结构、选择结构和循环结构:
  • 顺序结构就是按照从头到尾的顺序依次执行每一条C语言代码,不重复执行任何代码,也不跳过任何代码。
  • 选择结构也称分支结构,就是程序出现了“岔路口”,会有选择性的执行部分代码,而忽略其它代码;换句话说,程序可以跳过没用的代码,只执行有用的代码。
  • 循环结构就是让程序“杀个回马枪”,不断地重复执行同一段代码。

除了这三种基本结构,C语言其实还有第四种结构,就是跳转结构(通过 goto 语句实现),它允许程序跳转到任意一条代码,然后从此处开始执行。不过,频繁使用跳转结构会使得程序的逻辑变得复杂难懂,调试费劲,所以现在已经不推荐使用跳转结构了。

在大学教材,或者考试题目中,通常只会提到“三种基本结构”,很少涉及第四种结构。

1. 顺序结构

顺序结构是最简单的程序结构,也是代码默认的执行顺序。在程序结构中,程序会按照代码的书写顺序从上到下、从左到右依次执行每一条语句。顺序结构的代码就是傻瓜式执行,没有任何拐弯抹角。

本教程前面的代码都是顺序结构,这是初学者最先接触的程序结构。

下面是一个顺序结构的示例,展示了如何计算长方形的面积:
#include <stdio.h>

int main() {
    float length, width, area;
    
    length = 5.0;
    width = 3.0;
    area = length * width;
    
    printf("长方形的面积是:%.2f\n", area);
    
    return 0;
}

输出结果:

长方形的面积是:15.00

在这个例子中,程序按照顺序执行以下步骤:声明变量、赋值、计算面积、打印结果。每一步都依次执行,不忽略任何代码,也不重复任何代码。

2. 分支结构

在C语言中,我们可以设置一个条件,让程序根据不同的条件执行不同的代码块,这就是分支结构。分支结构就像岔路口,你可以往左走,也可以往右走;具体要怎么走,得根据给出的条件来判断。

C语言有三种方式来实现分支结构,分别是 if else 语句、switch case 语句、三目运算符? :

下面的例子使用了 if else 分支结构,用来判断一个数是否是偶数:
#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;
}

输出结果(假设输入为 7):

请输入一个整数:7↙
7 是奇数。
在这个例子中,程序根据「输入的数字是否能被 2 整除」来决定执行哪个代码块,也即{ }中的代码。if 语句检查条件number % 2 == 0,如果它的结果为真,则执行第一个代码块,否则执行 else 后的代码块。

3. 循环结构

C语言循环结构允许程序重复地执行某个代码块,直到满足特定的条件才会终止。循环结构非常适合处理需要重复执行的任务,比如遍历数组、计算累加的和、分析每一条日志等。

C语言提供了三种主要的循环结构,分别是 for 循环、while 循环和 do while 循环。

下面的例子使用 for 循环来计算从 1 加到 100 的和:
#include <stdio.h>

int main() {
    int sum = 0;
    
    for (int i = 1; i <= 100; i++) {
        //这是重复执行的代码块
        sum += i;
    }
    
    printf("1 到 100 的和是:%d\n", sum);
    
    return 0;
}

输出结果:

1 到 100 的和是:5050
在这个例子中,for 循环初始化变量 i 为 1,每次循环 i 增加 1,直到 i 大于 100 时停止。循环体内将每次的 i 值加到 sum 中,最终得到 1 到 100 的和。

4. 跳转结构

跳转结构通过 goto 语句实现,它允许程序无条件地跳转到代码中的任意位置,然后从此处开始执行。虽然 goto 语句用起来非常灵活,但是它往往使得程序的逻辑变得混乱难懂,所以现在已经不推荐使用了。

下面的例子中,我们使用 goto 语句跳出嵌套循环:
#include <stdio.h>

int main() {
    int i, j;
    
    for (i = 1; i < 5; i++) {
        for (j = 1; j < 5; j++) {
            if (i == 2 && j == 2) {
                goto end_loop;
            }
            printf("i = %d, j = %d\n", i, j);
        }
    }
    
end_loop:
    printf("跳出循环\n");
    
    return 0;
}

输出结果:

i = 1, j = 1
i = 1, j = 2
i = 1, j = 3
i = 1, j = 4
i = 2, j = 1
跳出循环

在这个例子中,当 i 和 j 都等于 2 时,会执行 goto 语句,直接跳到 end_loop 标签处,然后执行它后面的代码。这意味着,整个循环被跳过了,不再执行了。

总结

本文介绍了C语言程序的三种基本结构(顺序结构、选择结构和循环结构),以及一种不常用、不推荐的结构(跳转结构);对于每种结构,笔者还提供了示例,让大家有一个更加直观的认识。

对于初学者来说,本文中的示例大概率看不懂,不过别着急,接下来的章节我会详细介绍它们的用法,let's go。