C语言控制结构

Update history
Date Version Author Update content
2024-12-07 1.0.0 老怪鸽 更新了基本文档

顺序结构

顺序结构是最基本的程序结构,它按照代码的书写顺序依次执行。

语句与表达式

语句

  • 语句是程序执行的基本单元,每个语句以分号 ; 结尾。
  • C语言中的语句包括声明语句、赋值语句、控制语句等。

表达式

  • 表达式是由运算符和操作数组成的计算序列,它能够被计算出一个值。
  • 表达式可以分为简单表达式和复杂表达式。

输入与输出函数

在C语言中,标准输入输出库 <stdio.h> 提供了输入输出函数,用于与用户进行交互。

输出函数

printf():用于格式化输出数据到标准输出(通常是屏幕)。

输入函数

scanf():用于从标准输入(通常是键盘)读取格式化的数据。

格式化输入输出

格式化输出

使用 printf() 函数,可以按照指定的格式输出数据。
格式化字符串包含普通字符和格式说明符,格式说明符用于指定数据的类型和输出格式。

示例

printf("整数:%d,浮点数:%f\n", 10, 3.14); // 输出整数和浮点数

格式说明符:

  • %d:整数
  • %ld:长整数
  • %f:浮点数
  • %s:字符串
  • %c:字符
  • %x:以十六进制显示的数
  • %e:根据数据格式与类型自动显示

等等…

格式化输入

使用 scanf() 函数,可以按照指定的格式读取用户输入的数据。
需要提供格式字符串和对应变量的地址。

示例

int number;
scanf("%d", &number); // 读取一个整数到变量number中

分支结构

分支结构用于根据条件执行不同的代码路径。

if语句

  • 基本语法:
if (条件表达式) {
    // 条件为真时执行的代码
}
  • if-else语法:
if (条件表达式) {
    // 条件为真时执行的代码
} else {
    // 条件为假时执行的代码
}
  • if-else if-else链:
if (条件表达式1) {
    // 条件1为真时执行的代码
} else if (条件表达式2) {
    // 条件2为真时执行的代码
} else {
    // 以上条件都不为真时执行的代码
}

switch语句

  • 基本语法:
switch (表达式) {
    case 常量表达式1:
        // 执行代码块1
        break;
    case 常量表达式2:
        // 执行代码块2
        break;
    ...
    default:
        // 以上case都不匹配时执行的代码
        break;
}

循环结构

循环结构用于重复执行一段代码。

for循环

  • 基本语法:
for (初始化表达式; 循环条件; 步进表达式) {
    // 循环体
}

while循环

  • 基本语法:
while (循环条件) {
    // 循环体
}

do-while循环

  • 基本语法:
do {
    // 循环体
} while (循环条件);

break与continue语句

在C语言中,关键字 breakcontinue 语句用于控制循环的流程。它们可以用于 forwhiledo-while 循环中。

break 语句

break 语句用于立即退出当前循环,不再执行循环中剩余的代码,也不管循环的条件是否满足。当 break 语句执行后,程序将继续执行循环之后的代码。

以下是一个使用 break 语句的例子:

#include <stdio.h>

int main() {
    for (int i = 1; i <= 10; i++) {
        if (i == 5) {
            break; // 当 i 等于 5 时,退出循环
        }
        printf("%d ", i); // 打印 1 到 4
    }
    printf("\n循环结束\n");
    return 0;
}

在这个例子中,循环会在 i 等于 5 时中断,所以输出结果将是 1 2 3 4,然后打印 “循环结束”。

continue 语句

continue 语句用于跳过当前循环迭代中剩余的代码,并立即开始下一次循环迭代。与 break 不同,continue 不会退出循环,而是继续执行下一次循环。

以下是一个使用 continue 语句的例子:

#include <stdio.h>

int main() {
    for (int i = 1; i <= 10; i++) {
        if (i == 5) {
            continue; // 当 i 等于 5 时,跳过当前迭代
        }
        printf("%d ", i); // 打印 1 到 10,但不包括 5
    }
    printf("\n循环结束\n");
    return 0;
}

在这个例子中,当 i 等于 5 时,continue 语句会跳过当前的迭代,不打印 5,输出结果将是 1 2 3 4 6 7 8 9 10,然后打印 “循环结束”。

注意事项

  1. breakcontinue 语句通常与 if 语句一起使用,以便在满足特定条件时改变循环的行为。
  2. 在多层循环嵌套中,breakcontinue 只影响它们所在的最内层循环。
  3. 如果要在多层嵌套循环中跳出所有循环,可能需要使用额外的标记或条件变量,或者使用 goto 语句(但这通常不推荐,因为它可能导致代码难以理解和维护)。

循环嵌套

循环嵌套是指在循环语句内部再嵌套一个或多个循环语句。以下是一些常见的循环嵌套示例:

for 循环嵌套

//代码将输出一个 5x5 的星号矩阵。
#include <stdio.h>

int main() {
    int i, j;
    for (i = 0; i < 5; i++) { // 外层循环
        for (j = 0; j < 5; j++) { // 内层循环
            printf("* "); // 输出星号和空格
        }
        printf("\n"); // 每完成内层循环一次,换行
    }
    return 0;
}

while 循环嵌套

//代码将输出一个 5x5 的星号矩阵。
#include <stdio.h>

int main() {
    int i = 0, j;
    while (i < 5) { // 外层循环
        j = 0;
        while (j < 5) { // 内层循环
            printf("* ");
            j++;
        }
        printf("\n");
        i++;
    }
    return 0;
}

循环嵌套在处理矩阵、多维数组或需要重复执行的操作时非常有用。通过改变循环的条件和循环体内部的代码,可以实现各种复杂的逻辑和数据处理任务。

作业

编写一个C语言程序,实现以下功能:

  1. 程序开始时,提示用户输入一个整数。
  2. 使用if-else结构判断该整数是正数、负数还是零,并输出相应的信息。
  3. 如果输入的整数是正数,使用for循环计算从1到该整数的所有整数的和,并输出结果。
  4. 如果输入的整数是负数,使用while循环计算从该整数到-1的所有整数的和,并输出结果。
  5. 如果输入的整数是零,输出“输入的数是零”。
答案代码
#include <stdio.h>

int main() {
    int number;
    int sum = 0;

    // 获取用户输入
    printf("请输入一个整数:");
    scanf("%d", &number);

    // 使用if-else结构判断并输出信息
    if (number > 0) {
        // 使用for循环计算正数和
        for (int i = 1; i <= number; i++) {
            sum += i;
        }
        printf("从1到%d的所有整数的和是:%d\n", number, sum);
    } else if (number < 0) {
        // 使用while循环计算负数和
        while (number < 0) {
            sum += number;
            number++;
        }
        printf("从%d到-1的所有整数的和是:%d\n", number, sum);
    } else {
        // 输出零的信息
        printf("输入的数是零。\n");
    }

    return 0;
}