解码C语言九条语句

news/2025/9/17 20:49:54/文章来源:https://www.cnblogs.com/YouEmbedded/p/19097518

选择结构

if

一、基本语法

if (条件表达式) {
// 条件为真时执行的代码块
} else {
// 条件为假时执行的代码块(可选)
}

二、条件表达式的本质

  • 条件表达式可以是任何返回整型值的表达式

    • 0 表示假(false)。
    • 非0 表示真(true)。
  • 示例

    if (5) { ... }// 条件为真(非0)
    if (0) { ... }// 条件为假
    

三、常见用法

1. 单分支条件判断

if (score >= 60) {printf("及格\n");
}

2. 双分支条件判断

if (score >= 60) {printf("及格\n");
} else {printf("不及格\n");
}

3. 多分支条件判断(else if

if (score >= 90) {printf("优秀\n");
} else if (score >= 80) {printf("良好\n");
} else if (score >= 60) {printf("及格\n");
} else {printf("不及格\n");
}

switch

一、基本语法

switch (表达式) {case 常量1:// 代码块1break;case 常量2:// 代码块2break;default:// 默认代码块
}

二、关键规则

  1. 表达式类型:必须是 整型枚举类型intcharenum 等)。
  2. case 常量:必须是 编译时常量(如 5'A'),不能是变量或范围或浮点型。
  3. case 穿透:若省略 break,程序会继续执行下一个 case 的代码。
  4. default 分支:可选,当所有 case 不匹配时执行。

三、代码示例

1. 基础示例

#include <stdio.h>int main() {char grade = 'B';switch (grade) {case 'A':printf("优秀\n");break;case 'B':printf("良好\n");break;case 'C':printf("及格\n");break;default:printf("未知等级\n");}return 0;
}

输出良好

循环结构

while

一、基本语法

while (循环条件) {
// 循环体代码
}
  • 执行流程
    1. 检查条件是否为真(非0)。
    2. 若为真,执行循环体,然后重复步骤1;否则退出循环。

二、代码示例

1. 基础用法:打印1~5

#include <stdio.h>int main() {int i = 1;while (i <= 5) {printf("%d ", i);i++;}return 0;
}

输出1 2 3 4 5

2. 输入验证(确保用户输入正数)

int num;
printf("请输入一个正数:");
scanf("%d", &num);
while (num <= 0) {printf("输入无效,请重新输入:");scanf("%d", &num);
}

do {} while

一、基本语法

do {
// 循环体代码(至少执行一次)
} while (循环条件);
  • 执行流程
    1. 先执行循环体代码。
    2. 检查条件是否为真(非0)。
    3. 若条件为真,重复步骤1;否则退出循环。
  • 注意while 后的分号 ; 不可省略。

二、代码示例

1. 基础示例:输入验证(必须输入正数)

#include <stdio.h>int main() {int num;do {printf("请输入一个正数:");scanf("%d", &num);} while (num <= 0);// 若输入非正数,重复循环printf("输入正确:%d\n", num);return 0;
}

2. 计算阶乘

int n = 5, fact = 1, i = 1;
do {fact *= i;i++;
} while (i <= n);
printf("%d! = %d\n", n, fact);// 输出:5! = 120

三、do-while vs while

特性 do-while while
执行顺序 先执行循环体,后检查条件 先检查条件,后执行循环体
最少次数 至少执行1次 可能0次(条件初始为假时不执行)
适用场景 需先执行代码再判断的场景 条件可能初始不满足的场景

for

一、基本语法

for (初始化表达式; 循环条件; 更新表达式) {
// 循环体代码
}
  • 执行顺序
    1. 初始化表达式:仅在循环开始时执行一次。
    2. 检查循环条件:若为真(非0),执行循环体;否则退出。
    3. 执行循环体
    4. 执行更新表达式
    5. 重复步骤2~4。

二、代码示例

1. 打印1~5

#include <stdio.h>int main() {for (int i = 1; i <= 5; i++) {printf("%d ", i);}return 0;
}

输出1 2 3 4 5

2. 遍历数组

int arr[] = {10, 20, 30};
for (int i = 0; i < 3; i++) {printf("%d ", arr[i]);// 输出:10 20 30
}

三、for vs while

特性 for while
适用场景 循环次数已知或需精确控制 循环次数未知或条件复杂
代码紧凑 初始化、条件、更新集中在一行 循环变量需在外部声明和更新
变量作用域 C99起可在初始化部分声明变量(作用域限于循环) 变量需在外部声明

跳转语句

break

一、基本语法与作用

break 语句用于 立即终止当前所在的循环(for/while/do-while)或 switch 语句,并跳转到其后的代码继续执行。

二、核心应用场景

1. 终止 switch 中的 case 穿透

switch (value) {case 1:printf("Case 1\n");break;// 终止switch,避免执行case 2case 2:printf("Case 2\n");break;default:printf("Default\n");
}

2. 提前退出循环

当满足特定条件时跳出循环:

for (int i = 0; i < 10; i++) {if (i == 5) {break;// 当i=5时终止循环}printf("%d ", i);// 输出:0 1 2 3 4
}

三、代码示例

1. 搜索数组元素

int arr[] = {2, 4, 6, 8, 10};
int target = 6;
int found = 0;for (int i = 0; i < 5; i++) {if (arr[i] == target) {found = 1;break;// 找到后立即退出循环}
}
printf("%s\n", found ? "找到" : "未找到");// 输出:找到

2. 多层循环中的 break

for (int i = 0; i < 3; i++) {for (int j = 0; j < 3; j++) {if (j == 1) {break;// 仅跳出内层循环}printf("(%d,%d) ", i, j);}
}
// 输出:(0,0) (1,0) (2,0)

continue

一、基本语法与作用

continue 语句用于 跳过当前循环迭代的剩余代码,直接进入下一次循环的条件检查(for/while/do-while)。

二、核心应用场景

1. 跳过特定条件的迭代

for (int i = 0; i < 10; i++) {if (i % 2 == 0) {continue;// 跳过偶数}printf("%d ", i);// 输出:1 3 5 7 9
}

2. 处理输入过滤

int num;
for (int i = 0; i < 5; i++) {scanf("%d", &num);if (num < 0) {continue;// 忽略负数}printf("有效输入:%d\n", num);
}

三、continue 的详细规则

  1. 作用范围:仅影响 最内层循环

  2. 执行流程

    • for 循环:跳过循环体剩余代码,执行 更新表达式,然后检查条件。
    • while/do-while 循环:跳过剩余代码,直接检查循环条件。
  3. 与 break 的区别

    语句 作用 循环是否继续
    break 完全终止当前循环
    continue 跳过当前迭代,进入下一次 是(若条件仍满足)

四、代码示例

1. 跳过无效数据

处理数组时忽略非正数:

int arr[] = {3, -2, 5, 0, 7};
for (int i = 0; i < 5; i++) {if (arr[i] <= 0) {continue;}printf("%d ", arr[i]);// 输出:3 5 7
}

2. 结合嵌套循环

for (int i = 0; i < 3; i++) {for (int j = 0; j < 3; j++) {if (j == 1) {continue;// 跳过内层循环的j=1}printf("(%d,%d) ", i, j);}
}
// 输出:(0,0) (0,2) (1,0) (1,2) (2,0) (2,2)

return

一、基本语法与作用

return 语句用于 从函数中返回一个值终止当前函数的执行,将控制权交还给函数调用者。

基本形式:

return;// 用于无返回值的函数(void)
return 表达式;// 用于有返回值的函数

二、核心应用场景

1. 返回值给调用者

int add(int a, int b) {return a + b;// 返回两数之和
}int result = add(3, 5);// result = 8

2. 提前终止函数执行

int find_first_positive(int arr[], int n) {for (int i = 0; i < n; i++) {if (arr[i] > 0) {return i;// 找到正数后立即返回索引}}return -1;// 未找到时返回-1
}

3. 无返回值函数(void)中的 return

void print_hello() {printf("Hello");return;// 可省略,函数执行到末尾自动返回
}

三、return 的详细规则

  1. 返回值类型匹配

    返回值必须与函数声明类型兼容,否则编译器可能警告或自动转换。

    float divide(int a, int b) {return a / b;// 返回int值会被隐式转为float
    }
    
  2. main函数的返回值

    main 函数返回 int 类型,通常用 0 表示成功,非零表示错误。

    int main() {// 程序逻辑return 0;
    }
    
  3. 不可返回局部变量的地址

    局部变量在函数结束后被销毁,返回其地址会导致未定义行为。

    int* bad_example() {int x = 5;return &x;// 错误!x的內存已被释放
    }
    

四、代码示例

1. 返回结构体

typedef struct {int x;int y;
} Point;Point create_point(int a, int b) {Point p = {a, b};return p;// 返回结构体副本
}

2. 多条件返回

int max(int a, int b) {if (a > b) {return a;} else {return b;}
}

3. 提前返回简化逻辑

int is_valid(int value) {if (value < 0) {return 0;// 提前返回无效}if (value > 100) {return 0;// 提前返回无效}return 1;// 有效
}

return

一、基本语法与作用

return 语句用于 从函数中返回一个值终止当前函数的执行,将控制权交还给函数调用者。

基本形式:

return;// 用于无返回值的函数(void)
return 表达式;// 用于有返回值的函数

二、核心应用场景

1. 返回值给调用者

int add(int a, int b) {return a + b;// 返回两数之和
}int result = add(3, 5);// result = 8

2. 提前终止函数执行

int find_first_positive(int arr[], int n) {for (int i = 0; i < n; i++) {if (arr[i] > 0) {return i;// 找到正数后立即返回索引}}return -1;// 未找到时返回-1
}

3. 无返回值函数(void)中的 return

void print_hello() {printf("Hello");return;// 可省略,函数执行到末尾自动返回
}

三、return 的详细规则

  1. 返回值类型匹配

    返回值必须与函数声明类型兼容,否则编译器可能警告或自动转换。

    float divide(int a, int b) {return a / b;// 返回int值会被隐式转为float
    }
    
  2. main函数的返回值

    main 函数返回 int 类型,通常用 0 表示成功,非零表示错误。

    int main() {// 程序逻辑return 0;
    }
    
  3. 不可返回局部变量的地址

    局部变量在函数结束后被销毁,返回其地址会导致未定义行为。

    int* bad_example() {int x = 5;return &x;// 错误!x的內存已被释放
    }
    

四、代码示例

1. 返回结构体

typedef struct {int x;int y;
} Point;Point create_point(int a, int b) {Point p = {a, b};return p;// 返回结构体副本
}

2. 多条件返回

int max(int a, int b) {if (a > b) {return a;} else {return b;}
}

3. 提前返回简化逻辑

int is_valid(int value) {if (value < 0) {return 0;// 提前返回无效}if (value > 100) {return 0;// 提前返回无效}return 1;// 有效
}

1# return

一、基本语法与作用

return 语句用于 从函数中返回一个值终止当前函数的执行,将控制权交还给函数调用者。

基本形式:

return;// 用于无返回值的函数(void)
return 表达式;// 用于有返回值的函数

二、核心应用场景

1. 返回值给调用者

int add(int a, int b) {return a + b;// 返回两数之和
}int result = add(3, 5);// result = 8

2. 提前终止函数执行

int find_first_positive(int arr[], int n) {for (int i = 0; i < n; i++) {if (arr[i] > 0) {return i;// 找到正数后立即返回索引}}return -1;// 未找到时返回-1
}

3. 无返回值函数(void)中的 return

void print_hello() {printf("Hello");return;// 可省略,函数执行到末尾自动返回
}

三、return 的详细规则

  1. 返回值类型匹配

    返回值必须与函数声明类型兼容,否则编译器可能警告或自动转换。

    float divide(int a, int b) {return a / b;// 返回int值会被隐式转为float
    }
    
  2. main函数的返回值

    main 函数返回 int 类型,通常用 0 表示成功,非零表示错误。

    int main() {// 程序逻辑return 0;
    }
    
  3. 不可返回局部变量的地址

    局部变量在函数结束后被销毁,返回其地址会导致未定义行为。

    int* bad_example() {int x = 5;return &x;// 错误!x的內存已被释放
    }
    

四、代码示例

1. 返回结构体

typedef struct {int x;int y;
} Point;Point create_point(int a, int b) {Point p = {a, b};return p;// 返回结构体副本
}

2. 多条件返回

int max(int a, int b) {if (a > b) {return a;} else {return b;}
}

3. 提前返回简化逻辑

int is_valid(int value) {if (value < 0) {return 0;// 提前返回无效}if (value > 100) {return 0;// 提前返回无效}return 1;// 有效
}

1# return

一、基本语法与作用

return 语句用于 从函数中返回一个值终止当前函数的执行,将控制权交还给函数调用者。

基本形式:

return;// 用于无返回值的函数(void)
return 表达式;// 用于有返回值的函数

二、核心应用场景

1. 返回值给调用者

int add(int a, int b) {return a + b;// 返回两数之和
}int result = add(3, 5);// result = 8

2. 提前终止函数执行

int find_first_positive(int arr[], int n) {for (int i = 0; i < n; i++) {if (arr[i] > 0) {return i;// 找到正数后立即返回索引}}return -1;// 未找到时返回-1
}

3. 无返回值函数(void)中的 return

void print_hello() {printf("Hello");return;// 可省略,函数执行到末尾自动返回
}

三、return 的详细规则

  1. 返回值类型匹配

    返回值必须与函数声明类型兼容,否则编译器可能警告或自动转换。

    float divide(int a, int b) {return a / b;// 返回int值会被隐式转为float
    }
    
  2. main函数的返回值

    main 函数返回 int 类型,通常用 0 表示成功,非零表示错误。

    int main() {// 程序逻辑return 0;
    }
    
  3. 不可返回局部变量的地址

    局部变量在函数结束后被销毁,返回其地址会导致未定义行为。

    int* bad_example() {int x = 5;return &x;// 错误!x的內存已被释放
    }
    

四、代码示例

1. 返回结构体

typedef struct {int x;int y;
} Point;Point create_point(int a, int b) {Point p = {a, b};return p;// 返回结构体副本
}

2. 多条件返回

int max(int a, int b) {if (a > b) {return a;} else {return b;}
}

3. 提前返回简化逻辑

int is_valid(int value) {if (value < 0) {return 0;// 提前返回无效}if (value > 100) {return 0;// 提前返回无效}return 1;// 有效
}

return

一、基本语法与作用

return 语句用于 从函数中返回一个值终止当前函数的执行,将控制权交还给函数调用者。

基本形式:

return;// 用于无返回值的函数(void)
return 表达式;// 用于有返回值的函数

二、核心应用场景

1. 返回值给调用者

int add(int a, int b) {return a + b;// 返回两数之和
}int result = add(3, 5);// result = 8

2. 提前终止函数执行

int find_first_positive(int arr[], int n) {for (int i = 0; i < n; i++) {if (arr[i] > 0) {return i;// 找到正数后立即返回索引}}return -1;// 未找到时返回-1
}

3. 无返回值函数(void)中的 return

void print_hello() {printf("Hello");return;// 可省略,函数执行到末尾自动返回
}

三、return 的详细规则

  1. 返回值类型匹配

    返回值必须与函数声明类型兼容,否则编译器可能警告或自动转换。

    float divide(int a, int b) {return a / b;// 返回int值会被隐式转为float
    }
    
  2. main函数的返回值
    main 函数返回 int 类型,通常用 0 表示成功,非零表示错误。

int main() {// 程序逻辑return 0;
}
  1. 不可返回局部变量的地址

    局部变量在函数结束后被销毁,返回其地址会导致未定义行为。

    int* bad_example() {int x = 5;return &x;// 错误!x的內存已被释放
    }
    

四、代码示例

1. 返回结构体

typedef struct {int x;int y;
} Point;Point create_point(int a, int b) {Point p = {a, b};return p;// 返回结构体副本
}

2. 多条件返回

int max(int a, int b) {if (a > b) {return a;} else {return b;}
}

3. 提前返回简化逻辑

int is_valid(int value) {if (value < 0) {return 0;// 提前返回无效}if (value > 100) {return 0;// 提前返回无效}return 1;// 有效
}

goto(非必要不用)

一、基本语法

goto 标签名;// 跳转到标签处
...
标签名:// 标签定义代码;

二、核心用途与争议

1. 合理使用场景

  • 集中错误处理

    在资源分配失败时跳转到清理代码,避免重复逻辑。

    int func() {FILE *f1 = fopen("a.txt", "r");if (!f1) goto ERR;FILE *f2 = fopen("b.txt", "r");if (!f2) goto CLOSE_F1;// 正常流程...fclose(f2);
    CLOSE_F1:fclose(f1);
    ERR:return -1;
    }
    
  • 跳出深层嵌套循环

    替代多层 break 或标志变量。

    for (int i = 0; i < N; i++) {for (int j = 0; j < M; j++) {if (条件) {goto EXIT_LOOP;// 直接跳出所有循环}}
    }
    EXIT_LOOP:
    // 后续代码
    

2. 争议与风险

  • 代码可读性降低:过度使用 goto 会导致程序流程混乱,难以维护。
  • 违反结构化编程原则:可能破坏代码的块状结构,增加调试难度。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/906822.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

django登录注册案例(上) - 详解

django登录注册案例(上) - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco&q…

实用指南:C++ 类型衰变(Type Decay)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

从C++开始的编程生活(10)——string类核心语法和auto自动推导类型

从C++开始的编程生活(10)——string类核心语法和auto自动推导类型pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: &quo…

深入解析:Python的输出缓冲区机制

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

某交互题选讲的补题记录

CF750F New Year and Finding Roots 考虑第一步只能随机找点,找完点之后除非找到叶子或者根,不然完全等于啥都不知道。 于是找叶子节点,从这个点的两个邻边往下一直走一定能走到叶子,那么此时这条链的中点的父亲就…

openwrt ipv6 NAT6配置

在诸如校园网或者其他需要认证的网络条件下,由于实名制上网的要求,通常不支持DHCP6-PD,因此要使用IPV6需要使用NAT6目前最新版本的官方openwrt(23.05)已经自动支持NAT6了(firewall.xxx.masq6),因此,如果需要开启…

奶龙抽象语录

奶龙の无上恩情!!!开坑于 $ 2025-9-15 $ 最后更新于 $ 2025-9-17 $上课 班会 我们为什么要规范普通话,不就跟当年秦始皇车同文,书同轨一样吗? —— 25-9-16 其他 我们班五十几号人,我也不要求别的,声音比\(11\…

解题报告-P11670 [USACO25JAN] Cow Checkups S

P11670 [USACO25JAN] Cow Checkups S 题目描述 Farmer John 的 \(N\)(\(1 \leq N \leq 5 \cdot 10^5\))头奶牛站成一行,奶牛 \(1\) 在队伍的最前面,奶牛 \(N\) 在队伍的最后面。FJ 的奶牛也有许多不同的品种。他用从 \(1\) 到 \(N\) 的整数来表示每一品种。队伍从前到后第 …

word vba 对 带编号格式的PO单 段落下添加对应的图片

Attribute VB_Name = "APO_PathStaging" Option Explicit Configuration Constants Private Const BASE_FOLDER As String = "\\10.0.0.10\部门共享\PO\" Private Const START_PARA As Long = 582 Private Const PATH_TAG As String = "[IMG] " …

解题报告-P11671 [USACO25JAN] Farmer Johns Favorite Operation S

P11671 [USACO25JAN] Farmer Johns Favorite Operation S 题目描述 又是 Farmer John 的农场上寒冷而无聊的一天。为了打发时间,Farmer John 发明了一种关于在整数数组上进行操作的有趣的休闲活动。 Farmer John 有一…

详细介绍:javascript文本长度检测与自动截取,用于标题长度检测

详细介绍:javascript文本长度检测与自动截取,用于标题长度检测2025-09-17 20:27 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !imp…

解码C语言运算符

算术运算符运算符 描述 示例 结果+ 加法 5 + 3 8- 减法 5 - 3 2* 乘法 5 * 3 15/ 除法 5 / 2 2% 取模 5 % 2 1++ 自增 a++ a+1-- 自减 a-- a-1注意:整数除法会截断小数部分 取模运算只能用于整数类型关系运算符运算符…

完整教程:一篇读懂Pormise!!【前端ES6】

完整教程:一篇读懂Pormise!!【前端ES6】2025-09-17 20:13 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: blo…

93. 递归实现组合型枚举

93. 递归实现组合型枚举 if (sum + n - u < m) return; 如果当前记录的数据 加上 后面的所有可以被选的数据 时无法达到要求时终止 state记录了哪些数据被选,哪些没被选的 state | 1 << u 选择当前的数据,比如0101 -> 10101 #include <iostream> using n…

Sort方法学习(伪代码记录)

Sort 方法总结 selectionSort(vector& a) 核心思想:选择最大/小的数移到最前/后 // 1. 计算数组长度// 2. 控制已排序部分的边界 for(i=0; i<n; i++){// 3. 在未排序部分(j到末尾)中寻找真正的maxfor(j=i+1, j<n; j++) find(max);// 3. 将最大的数放至数组头swap(…

深入解析:【每日一问】运算放大器与比较器有什么区别?

深入解析:【每日一问】运算放大器与比较器有什么区别?pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", mon…

9.17支配对问题专题总结

概括 每次查询一定范围内的点组成的点对中的最优值,而通过一些分析去减少有用点对的数量,这样子的有用点对称为 支配对 T1策略是将 \(a_i\) 相同的序列取出来单独考虑 固定 \(b_i<b_j,i<j\) 然后考虑能找出来一个序列 \(i,j1,j2,j3...\) 但是发现选 \(i,j2\) 不如选 \(…

Xじゃないか

並行じゃないか いや 通信じゃないか わかりあえなくて 愛じゃないか ——絡みなんです それがAIなんです。\[\newcommand{\c}{\mathcal} \newcommand{\eps}{\epsilon} \newcommand{\co}[2]{{\color{#1}{#2}}} \]L…

开源收银体系_大型收银系统源码_OctShop

开源收银体系_大型收银系统源码_OctShoppre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Mo…

完整教程:热力图是什么?三分钟学会热力图数据分析怎么做!

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …