逍遥自在学C语言 | 条件控制的正确使用姿势

news2024/11/14 22:06:27

前言

在C语言中,有三种条件判断结构:if语句、if-else语句和switch语句。

一、人物简介

  • 第一位闪亮登场,有请今后会一直教我们C语言的老师 —— 自在。

img

  • 第二位上场的是和我们一起学习的小白程序猿 —— 逍遥。

img

二、if语句

  • 基本语法
if (条件) {
    // 代码块1
}
  • 代码示例
#include <stdio.h>

int main() 
{
  int num = 5;
  if (num > 0) {
    printf("这个数为正数.\n");
  }
  return 0;
}
  • 运行结果

三、if-else语句

  • 基本语法
if (条件) {
    // 代码块1
} else {
    // 代码块2
}
  • 代码示例
#include <stdio.h>

int main() 
{
  int num = -2;
  if (num > 0) {
    printf("这个数为正数.\n");
  } else {
    printf("这个数为负数.\n");
  }
  return 0;
}
  • 运行结果

if语句嵌套使用

  • 代码示例
#include <stdio.h>

int main() {
    int num = 3;
    if (num > 0) {
        if (num < 5) {
            printf("num在1到4之间\n");
        } else {
            printf("num大于等于5\n");
        }
    } else {
        printf("num小于等于0\n");
    }
    return 0;
}

在这个示例中,外层的if语句判断num是否大于0,如果成立,进入内层的if语句继续判断num是否小于5;

如果不成立,执行else语句块,输出"num小于等于0"。

num的值是3,它既符合外层if语句的条件,也符合内层if语句的条件,所以程序输出"num在1到4之间"。

  • 运行结果

if else语句的链式使用

  • 代码示例
#include <stdio.h>

int main() {
    int score = 85;
    if (score >= 90) {
        printf("优秀\n");
    } else if (score >= 80) {
        printf("良好\n");
    } else if (score >= 70) {
        printf("中等\n");
    } else if (score >= 60) {
        printf("及格\n");
    } else {
        printf("不及格\n");
    }
    return 0;
}

在这个示例中,if else语句被链式使用,程序从上到下依次判断score的值是否大于等于90、是否大于等于80、是否大于等于70、是否大于等于60,最终输出对应的成绩等级。

score的值是85,它大于等于80,但小于90,所以程序输出"良好"。

  • 运行结果

四、switch语句

  • 基本语法
switch (expression) {
    case constant1:
        statement1;
        break;
    case constant2:
        statement2;
        break;
    ...
    default:
        statementN;
        break;
}

  • switch语句的执行过程如下:
  1. 表达式的值被计算。
  2. 表达式的值被依次与各个case后的常量进行比较,直到找到与之匹配的常量。
  3. 如果找到匹配的常量,执行该常量对应的代码块,并跳出switch语句。
  4. 如果没有找到匹配的常量,执行default对应的代码块(如果有),并跳出switch语句。

switch语句中的case标签可以是整数、字符或枚举常量。

每个case标签必须是唯一的,且必须以冒号(:)结尾。

case后面的代码块中可以包含任意数量的语句,用花括号({})来组成代码块。

switch语句的default标签是可选的,它通常放在case标签的最后面。如果没有匹配到任何case标签,那么default标签下的代码块将被执行。

default标签只能出现一次,且必须放在最后一个case标签之后,否则会引发编译错误。

switch基础用法

  • 下面是一个简单的switch语句示例,用于根据输入的数字输出对应的星期几:
#include <stdio.h>

int main() 
{
    int day;
    printf("请输入数字(1-7):");
    scanf("%d", &day);
    switch (day) {
        case 1:
            printf("星期一\n");
            break;
        case 2:
            printf("星期二\n");
            break;
        case 3:
            printf("星期三\n");
            break;
        case 4:
            printf("星期四\n");
            break;
        case 5:
            printf("星期五\n");
            break;
        case 6:
            printf("星期六\n");
            break;
        case 7:
            printf("星期日\n");
            break;
        default:
            printf("输入错误!\n");
            break;
    }
    return 0;
}
  • 运行结果

switch高级用法

除了基本用法外,switch语句还有一些高级用法,可以更灵活地使用。

1、case标签穿透

在switch语句中,如果没有在一个case语句块中使用break语句,那么程序会从这个case开始,一直执行到switch语句的结尾,这种现象被称为case标签穿透。

  • 下面是一个case标签穿透的示例:
#include <stdio.h>

int main() {
    int num = 3;
    switch (num) {
        case 1:
        case 2:
            printf("num是1或2\n");
            break;
        case 3:
        case 4:
            printf("num是3或4\n");
            break;
        default:
            printf("num不是1、2、3、4\n");
            break;
    }
    return 0;
}

在这个示例中,num的值是3,它既符合case 3的条件,也符合case 4的条件,但是由于case 3的语句块中使用了break语句,所以程序执行完case 3之后就跳出了switch语句,不会继续执行case 4的语句块。

  • 运行结果

2、switch语句嵌套

  • 在C语言中,switch语句可以嵌套使用,例如:
#include <stdio.h>

int main() 
{
    int num = 1;
    switch (num) {
        case 1:
            printf("num是1\n");
            switch (num) {
                case 2:
                    printf("num是2\n");
                    break;
                default:
                    printf("num不是2\n");
                    break;
            }
            break;
        case 3:
            printf("num是3\n");
            break;
        default:
            printf("num既不是1也不是3\n");
            break;
    }
    return 0;
}

在这个示例中,switch语句被嵌套使用,内层的switch语句只有在外层的case 1被匹配时才会执行。

  • 运行结果

小结

通过这篇文章,我们学会了

1、if语句

2、if-else语句

3、switch语句

📢欢迎各位 👍点赞 ⭐收藏 📝评论,如有错误请留言指正,非常感谢!

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

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

相关文章

大厂过来人忠告:学java有没有前途?想转行应该准备什么?

对于想转行学习java来人说&#xff0c;最可怕的问题就是信息闭塞。很多人开始的时候都是因为没能了解清楚情况&#xff0c;找不到学习思路&#xff0c;胡乱下手学习一通其实效果并不好&#xff0c;只是感动了自己&#xff0c;没有太大成效。毕竟时间这么宝贵&#xff0c;你也不…

ThingsBoard教程(四十):规则节点解析 计算增量节点 Calculate delta

本篇文章介绍一个ThingsBoard 规则引擎中的一个节点,Calculate delta Calculate delta 计算增量 该节点可以在规则中获取上一次遥测的值,以此可以实现二次遥测的差。比如一个设备,一天上传一次数据,如果你要对比今天和昨天的数据,并将两者数据差保存到数据库,就能够使用…

三子棋游戏的实现(C语言)

三子棋游戏的实现&#xff0c;在这里我们要求满足&#xff1a; 游戏不退出&#xff0c;继续下一把&#xff08;循环&#xff09;用多文件的形式实现&#xff0c;如下&#xff1a; 用game.h文件存放函数的声明并包含需要的头文件用game.c文件存放各个函数的具体实现用test.c文件…

【Linux】Keepalived+Haproxy实现数据库集群负载均衡

1、简介&#xff1a; 本文章的负载均衡和高可用是体现在两个从服务器上的。一般来说高可用是用在主服务器中的&#xff0c;例如双主多从的结构&#xff0c;双主做keepalived的高可用&#xff08;当然也可以加上haproxy做负载均衡&#xff09;&#xff0c;多从做haproxy的负载均…

微盟餐饮SaaS蜕变时刻:战略投资奥琦玮,领军之势已成

从火爆了整个春天的淄博烧烤&#xff0c;到“五一”人山人海的全国各地核心商圈&#xff0c;餐饮业热度狂飙不止。餐饮SaaS领域&#xff0c;大事件也在发生。 5月8日&#xff0c;微盟集团&#xff08;2013.HK&#xff09;宣布以“资产现金”方式&#xff0c;向餐饮行业数字化服…

前端get请求参数包含数组的情况

前端get请求参数包含数组的情况 问题描述解决办法文章参考 问题描述 当我们使用post传数组参数的时候&#xff0c;是没有问题的&#xff0c;可以不经过参数处理即可正常传参&#xff0c;但是当我们使用get请求传数组参数的时候&#xff0c;会出现下图这样的情况&#xff1a; a…

如何通过云平台加快Blender渲染?

Blender是一款专业自由及开放源代码的三维计算机图形软件&#xff0c;也是免费的开源3D创作套件&#xff0c;支持整个3D流程——建模、UV、贴图、材质、骨骼、动画、渲染、后期、合成、剪辑、跟踪和抠像等等&#xff0c;CG行业内也有不少大佬们通过Blender制作出了许多优秀作品…

代码随想录 LeetCode数组篇 螺旋矩阵II Java实现

文章目录 &#xff08;中等&#xff09;59. 螺旋矩阵II&#xff08;中等&#xff09;54. 螺旋矩阵&#xff08;简单&#xff09;JZ29 顺时针打印矩阵 &#xff08;中等&#xff09;59. 螺旋矩阵II 因为我是先做的JZ29&#xff0c;所以看到这题的时候&#xff0c;几乎就是一样的…

SpringCloud入门实战之项目(一)

一、新建父工程 以“下单”需要调“支付”模块为例&#xff0c;从零开始搭建springcloud-001项目&#xff0c;陆续集成相关组件。 新建服务提供者cloud-payment工程&#xff0c;服务调用者cloud-order工程&#xff0c;完成order对payment的调用。 只留下pom文件&#xff0c;其…

基于人工智能AI视频分析的智慧安监解决方案

方案背景 为了保证对园区环境风险进行有效识别&#xff0c;传统视频监控存在视频结构化利用率低的问题&#xff0c;在实际使用过程中&#xff0c;安全管理人员工作效率低下&#xff0c;依靠人工肉眼查看灵活度低&#xff0c;风险漏报概率高&#xff0c;出现异常情况跟踪不及时&…

中文润色神器-中文润色软件

中文写作润色软件 中文写作润色软件是一种基于自然语言处理技术和人工智能算法的工具&#xff0c;旨在提高中文文本的语言风格、表达能力和可读性。它可以自动检测文本中出现的语法、拼写、标点符号等语言问题&#xff0c;并给出相应的修正和修改建议。 中文写作润色软件的主…

paddleLite在Android部署初体验(环境问题)

paddleLite初体验&#xff08;环境问题&#xff09; Android Studio下载Paddle Lite Demo打开项目环境配置下载到手机 Paddle Lite是百度开发的一种方便部署的深度学习推理框架&#xff0c;笔者最近想接触一些模型部署相关项目&#xff0c;就先接触了一下Paddle Lite&#xff0…

手术麻醉信息系统源码 php + mysql + vue2,覆盖患者就诊全过程,体征数据自动采集绘制

手术麻醉信息系统源码 php mysql vue2 B/S网页版 麻醉信息系统是HIS产品的中的一个组成部分&#xff0c;主要应用于医院的麻醉科&#xff0c;属于电子病历类产品。医院麻醉监护的功能覆盖整个手术与麻醉的全过程&#xff0c;包括手术申请与排班、审批、安排、术前、术中和术…

list_for_each_entry()函数分析

在Linux内核源码中&#xff0c;经常要对链表进行操作&#xff0c;其中一个很重要的宏是list_for_each_entry&#xff1a; /*** list_for_each_entry - iterate over list of given type* pos: the type * to use as a loop cursor.* head: the head for your list.* member: t…

9个已开源的GPT4平替分享(附开源代码+论文)

资料整理自网络&#xff0c;有误欢迎指正 对于想要研究大模型的同学来说&#xff0c;目前ChatGPT无疑是最好的学习对象&#xff0c;但等它开源估计是不太可能了&#xff0c;所以学姐今天整理了一些开源的类GPT模型&#xff0c;帮助大家更好的理解大模型背后的机理。 PS&#x…

io,nio,aio区别

文章目录 前言io类型介绍同步阻塞io同步非阻塞ioio多路复用异步io 普通ionioChannelChannel实现基本的 Channel代码 示例 BufferBuffer的基本用法Buffer的capacity,position和limitcapacitypositionlimit Buffer的类型Buffer的分配向Buffer中写数据从Buffer中读取数据 Selector…

CSS 实现任意角度圆环

参考链接&#xff1a; css 制作圆环 - 掘金 主要思路&#xff1a; 利用 CSS 的 clip-path 属性进行裁剪 clip-path 具体信息参考 polygon() - MDN (mozilla.org) 该属性原理是&#xff1a;利用多边形进行对图形的裁剪。 根据具体代码&#xff0c;去分析 clip-path: polyg…

JavaWeb:Servlet、ServletContext、HttpServletResponse、HttpServletRequest 的详细内容

文章目录 JavaWeb - 02一、Servlet1. 简介2. HelloServlet3. Servlet 原理4. Mapping 原理 二、ServletContext1. 共享数据2. 获取初始化参数3. 请求转发4. 读取资源文件 三、HttpServletResponse1. 方法介绍2. 应用&#xff1a;下载文件3. 应用&#xff1a;创建验证码4. 应用&…

office web apps在线office文件预览部署及问题处理

文件下载链接网盘&#xff1a; 链接: https://pan.baidu.com/s/1OmWM5END0jyWESGzFCniEw 提取码: ejpg 基本环境需要两台机&#xff0c;1台为域控&#xff0c;1台为 &#xff08;office web apps &#xff0c;需要加入到域&#xff09; 主机1&#xff1a;添加域控服务 安装完…