news 2026/6/22 22:32:17

【C语言】分支语句(简略版)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【C语言】分支语句(简略版)

由于本人有一定的编程基础,因此会简略基础的语法的介绍,主要整理的是与python语法有所不同的部分。

分支语句

主要分为两部分:if语句和switch语句,也会介绍条件操作符(三目运算符)

1.if语句

基本格式:

if (expression) statement else if(expression)//if条件不成立 statement else//上面两个条件表达式都不成立 statement

例如如下代码

#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> /* Read A and print whether A is negative, positive or zero. >>>1 a is positive >>>-1 a is negative >>>0 a is zero */ int main() { int a; scanf("%d", &a); if (a < 0) printf("a is negative\n"); else if (a > 0) printf("a is positive\n"); else printf("a is zero\n"); return 0; }

如果if语句之后需要执行多句语句,则需要用大括号把语句都括起来,否则就始终会执行。

#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int main() { int a; scanf("%d", &a); if (a < 0) printf("a is negative\n"); printf("This line is always printed\n"); else if (a > 0) { printf("a is positive\n"); printf("This line is not always printed\n"); } else printf("a is zero\n"); return 0; }

if语句可以嵌套:

#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> /* Read A's age and print whether A is a child or an adult. >>>18 a is an adult >>>5 a is a child >>>0 a is a child >>>-3 Error: Age cannot be negative. */ int main() { int a; scanf("%d", &a); if (a >= 0) { if (a < 18) { printf("a is a child\n"); } else { printf("a is an adult\n"); } } else printf("Error: Age cannot be negative.\n"); return 0; }

悬空else的匹配原则:

由于C语言对缩进没有硬性要求,所以else会和上文最近的if语句匹配而不是同一缩进的语句。

#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int main() { int a; scanf("%d", &a); if (a >= 0) if (a < 18) printf("a is a child\n"); else printf("Error: Age cannot be negative.\n"); return 0; } /* >>>18 Error: Age cannot be negative. */

因为此时else匹配的if是if (a < 18)。

如果有大括号就不用考虑这个问题了,else不会冲进大括号里匹配if的。

2.switch语句(多条分支)

相当于把多个else if简略了。

基本用法:

switch (expression) { case value1: statement case value2: statement ... default: statement }

会根据expression的值执行不同的case分支,如果输入的值都不符合case的条件,可以按照需求选择是否使用default语句。但和else语句不同的是,default语句的位置并没有要求,放在switch语句最前面也是可以的。

需要注意的是,expression语句必须是整型表达式。

case和后面的数字之间要有空格。即case 0:而不是case0 :

例:

#include <stdio.h> int main() { int n = 0; scanf("%d", &n); switch(n % 3) { case 0: printf("整除,余数为0\n"); break; case 1: printf("余数是1\n"); break; case 2: printf("余数是2\n"); break; default: printf("Error"); } return 0; } /* >>>3 整除,余数为0 >>>4 余数是1 >>>5 余数是2 */

但是如果删掉break的话,代码会继续往下执行,可能会执行其他case语句的代码,比如我删掉break之后,输入1结果如下:

利用这个性质我们还可以对不同分支的相同输出作简化。比如如果要判断今天是不是周末,可以这么写

#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> int main() { int day = 0; scanf("%d", &day); switch (day) { case 1: case 2: case 3: case 4: case 5: printf("工作日\n"); break; case 6: case 7: printf("周末\n"); break; } return 0; } /* >>>3 工作日 >>>6 周末 */

这是因为case 3条件满足之后,会一路往下执行,然后就会把case 5的语句执行了,因此1到5都有共同的输出值。

3.条件操作符

也叫三目表达式,形式为

expression1?expression2:expression3

例如

#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> int main() { int a = 0; int b = 0; b = (a ? 3 : 5); printf("%d %d", a, b); return 0; } /* >>> 0 5 */

三目操作符也可以嵌套:

#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> int main() { int a, b, c, max; scanf("%d %d %d", &a, &b, &c); max = (a > b) ? ((a > c) ? a : c) : ((b > c) ? b : c); printf("max = %d", max); return 0; } /* >>>3 2 1 max = 3 >>>1 2 3 max = 3 */

虽然很简洁,但是会降低代码的可读性,慎重使用。

在输出的时候也可以用,例如:

printf("The string \"%s\" is %s\n", str, (strcmp(str, "Hello") == 0) ? "a greeting" : "not a greeting");

三目运算符给我一种lambda函数的感觉,把几行的def语句压缩成一行。

下期讲循环结构。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/22 23:15:30

IP防水等级分为几个等级

IP 防水等级&#xff08;依据 GB/T 4208-2017 或 IEC 60529 标准&#xff09;共分为 9 个等级&#xff0c;编号为 IPX1~IPX9&#xff0c;数字越大代表防水能力越强&#xff0c;不同等级对应不同的防水场景和测试要求。各等级的核心定义如下&#xff1a;IPX1&#xff1a;防垂直滴…

作者头像 李华
网站建设 2026/6/23 20:42:03

2025年国内网络准入系统排行榜,六款超好用的网络准入系统推荐

在网络安全形势日益严峻的当下&#xff0c;网络准入控制系统作为保障企业内网安全的第一道防线&#xff0c;越来越受到重视。本文将推荐2025年广受好评的6款网络准入控制系统&#xff0c;每款产品均采用英文虚拟名称&#xff0c;适用于不同规模和场景的企业用户。1. 固信网络准…

作者头像 李华
网站建设 2026/6/21 14:33:05

GoldenDict-ng终极配置指南:打造你的专属词典库

GoldenDict-ng作为新一代的跨平台词典查询工具&#xff0c;为词典爱好者提供了前所未有的使用体验。无论你是语言学习者、翻译工作者&#xff0c;还是单纯的词典收藏者&#xff0c;这款工具都能帮助你高效管理各类词典资源&#xff0c;实现快速准确的词汇查询。 【免费下载链接…

作者头像 李华
网站建设 2026/6/19 5:10:33

5步轻松掌握MinerU:智能文档转换工具完全指南

5步轻松掌握MinerU&#xff1a;智能文档转换工具完全指南 【免费下载链接】MinerU A high-quality tool for convert PDF to Markdown and JSON.一站式开源高质量数据提取工具&#xff0c;将PDF转换成Markdown和JSON格式。 项目地址: https://gitcode.com/OpenDataLab/MinerU…

作者头像 李华