当前位置: 首页 > news >正文

【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语句压缩成一行。

下期讲循环结构。

http://www.cnnetsun.cn/news/5503.html

相关文章:

  • IP防水等级分为几个等级
  • 2025年国内网络准入系统排行榜,六款超好用的网络准入系统推荐
  • Statuspage开源状态页面终极部署指南:30分钟搭建专业服务监控平台
  • GoldenDict-ng终极配置指南:打造你的专属词典库
  • 5步轻松掌握MinerU:智能文档转换工具完全指南
  • 自动化测试的「千里眼」:当RTSM远程控制遇上自动化,测试效率直接拉满
  • Spring AI 核心架构总览(资深架构师深度解析)
  • 改进YOLOv8结合跨尺度多头自注意力机制实现野火烟雾检测
  • 致进食障碍者
  • 深度合成算法备案超全解析!从定义到落地的4步合规法则
  • 我如何设计一个不会“发疯”的多智能体系统?
  • day122—二分查找—完成旅途的最少时间(LeetCode-2187)
  • 2025实测7款AI写小说神器!从卡文到日更,新手老手都适配
  • 8、Web漏洞扫描与利用技术详解
  • 42、企业备份与恢复综合指南
  • 终极网页设计助手:RulersGuides.js - 你的Photoshop式布局神器
  • OkDownload下载框架快速入门指南:5分钟掌握高效文件下载
  • V-HACD终极指南:快速掌握三维模型分割技术
  • OpenSCA-cli开源组件安全检测实战指南
  • 如何在React Three Fiber项目中快速集成5种高级视觉效果
  • 手写体OCR项目交付倒计时:Dify集成Tesseract 5.3的9个生产环境部署要点,错过即延误
  • 智能悬浮计时器:PPT演讲时间管理的专业解决方案
  • 终极WeMod解锁教程:5步免费获取Pro高级功能
  • Wan2.2-T2V-A14B在AI健身教练中的示范动作生成
  • 在浏览器中运行Windows 12:零安装的完整桌面体验指南
  • 当文献综述陷入僵局:PaperXie如何成为我突破写作瓶颈的“破壁”利器?
  • GenomeScope 终极指南:如何快速分析未知基因组特征
  • 如何选择商业美食街区活动设计公司?成都贵阳重庆策划设计制作公司解析
  • Chart.js 终极指南:从零开始构建惊艳的数据可视化图表
  • 如何快速掌握Tab-Session-Manager:浏览器标签管理的完整指南