C语言入门-选择结构

在编程中,我们经常需要根据不同的条件执行不同的操作。C语言为此提供了几种非常实用的选择结构:条件运算符、逻辑运算、if语句和switch语句。接下来,让我们深入探讨这些重要的知识点,帮助你更好地理解和掌握C语言的选择结构。

1. 条件运算符

条件运算符,又称三元运算符,是C语言中唯一的三目运算符,形式为:

condition ? expression1 : expression2;

它的意思是:如果条件condition为真,则执行expression1,否则执行expression2

示例

int a = 5, b = 10;
int max = (a > b) ? a : b;
printf("The maximum value is %d\n", max);

在这个例子中,如果a大于bmax的值将是a,否则是b。因此,程序会输出b的值,即10

2. 条件和逻辑运算符

在C语言中,我们经常使用条件运算符来比较两个值,这些运算符包括:

  • >:大于

  • <:小于

  • >=:大于等于

  • <=:小于等于

  • ==:等于

  • !=:不等于

逻辑运算符用于将多个条件组合在一起,主要包括:

  • &&(逻辑与):只有当两个条件都为真时,结果才为真。

  • ||(逻辑或):只要有一个条件为真,结果就为真。

  • !(逻辑非):将条件的真假取反。

示例

int a = 5, b = 10;
if (a < b && b > 0) {printf("b is greater than a and positive.\n");
}

在这个例子中,条件a < b && b > 0同时满足,程序会输出b is greater than a and positive.

3. 混合运算示例

在编写代码时,条件运算、逻辑运算、算术运算和赋值运算常常会结合在一起使用。例如:

int x = 5, y = 10, z;
z = (x < y && y != 0) ? (x + y) : (x - y);
printf("The value of z is %d\n", z);

在这个例子中,x < y && y != 0的条件为真,因此z的值为x + y,即15

更复杂的混合运算示例

在实际编程中,不同运算符的优先级会影响运算结果,因此理解优先级非常重要。以下是一些混合运算的例子:

示例 1:逻辑运算与算术运算的结合

int a = 4, b = 3, c = 2;
int result = a + b * c > 10 || b - c < 1;
printf("The result is %d\n", result);

在这个例子中,优先级的顺序是:

  1. 先进行乘法 b * c,得到 3 * 2 = 6

  2. 然后进行加法 a + 6,得到 4 + 6 = 10

  3. 判断 10 > 10,结果为假。

  4. 接下来计算 b - c,得到 3 - 2 = 1

  5. 判断 1 < 1,结果为假。

  6. 最后使用逻辑或 || 进行判断,两个条件均为假,结果为 0

因此,程序会输出 The result is 0

示例 2:赋值运算与条件运算结合

int x = 5, y = 10;
int result = (x > y) ? (x = y + 2) : (y = x + 3);
printf("x = %d, y = %d, result = %d\n", x, y, result);

在这个例子中,x > y 为假,因此执行 y = x + 3,得到 y = 8,并将 8赋值给 result。程序会输出 x = 5, y = 8, result = 8

示例 3:混合算术、逻辑和条件运算

int a = 3, b = 4, c = 5;
int result = (a + b > c) && (b - c < a) ? (a * b) : (c / a);
printf("The value of result is %d\n", result);

在这个例子中:

  1. 先计算 a + b,得到 3 + 4 = 7

  2. 判断 7 > c,即 7 > 5,结果为真。

  3. 然后计算 b - c,得到 4 - 5 = -1

  4. 判断 -1 < a,即 -1 < 3,结果也为真。

  5. 逻辑与 &&的结果为真,因此执行 (a * b),得到 3 * 4 = 12

最终,程序输出 The value of result is 12

运算符优先级的影响

在C语言中,不同运算符有不同的优先级,这些优先级会直接影响表达式的计算顺序。下表列出了常见运算符的优先级,按照从高到低的顺序:

优先级运算符描述
1()括号,明确运算顺序
2!逻辑非
3*, /, %乘、除、取余
4+, -加、减
5<, <=, >, >=关系运算符
6==, !=等于、不等于
7&&逻辑与
8||逻辑或
9? :条件运算符(三目运算)
10=, +=, -=, *=赋值运算符

示例 4:优先级问题的详细分析

int x = 2, y = 3, z = 4;
int result = x + y > z && y * z < 20 || x - y > 0;
printf("The value of result is %d\n", result);

在这个例子中,计算顺序如下:

  1. 先计算 x + y,得到 2 + 3 = 5

  2. 判断 5 > z,即 5 > 4,结果为真。

  3. 计算 y * z,得到 3 * 4 = 12

  4. 判断 12 < 20,结果为真。

  5. 使用逻辑与 &&,两个条件都为真,因此结果为真。

  6. 接下来计算 x - y,得到 2 - 3 = -1

  7. 判断 -1 > 0,结果为假。

  8. 最后使用逻辑或 ||,由于前面的逻辑与结果为真,因此整个表达式的结果为真,result1

程序会输出 The value of result is 1

4. if 语句

if语句是最基本的选择结构,用于根据条件是否成立来执行不同的代码块。其基本形式如下:

if (condition) {// 当条件为真时执行的代码
} else {// 当条件为假时执行的代码
}
if 语句的多种变形
  • 简单 if 语句

    int num = 5;
    if (num > 0) {printf("Positive number\n");
    }

    如果num大于0,程序将输出Positive number

  • if-else 语句

    int score = 85;
    if (score >= 90) {printf("Excellent\n");
    } else {printf("Not excellent\n");
    }

    在这个例子中,如果score大于等于90,输出Excellent,否则输出Not excellent

  • if-else if-else 语句

    int score = 85;
    if (score >= 90) {printf("Excellent\n");
    } else if (score >= 60) {printf("Pass\n");
    } else {printf("Fail\n");
    }

    根据score的值,程序会输出相应的结果。

  • 嵌套 if 语句

    int a = 5, b = 10;
    if (a > 0) {if (b > a) {printf("b is greater than a, and a is positive\n");}
    }

    在这个例子中,if语句是嵌套的,只有当a > 0b > a时,程序才会输出结果。

5. switch 语句

switch语句通常用于多个可能值的情况选择,尤其是当你有很多if-else分支时,switch语句会使代码看起来更简洁。switch语句的基本结构如下:

switch (variable) {case value1:// 当 variable 等于 value1 时执行的代码break;case value2:// 当 variable 等于 value2 时执行的代码break;default:// 当没有匹配的值时执行的代码break;
}

详细分析

  • switch 语句中,variable必须是一个整数类型或字符类型。

  • 每个 case 分支后需要使用break语句来防止程序继续执行后续的case

  • default部分是可选的,用于处理所有不符合已定义情况的输入。

示例

char grade = 'B';
switch (grade) {case 'A':printf("Excellent\n");break;case 'B':printf("Good\n");break;case 'C':printf("Average\n");break;case 'D':printf("Below Average\n");break;case 'F':printf("Fail\n");break;default:printf("Invalid grade\n");break;
}

在这个例子中,程序会根据grade的值执行相应的分支。如果grade的值是B,程序将输出Gooddefault部分用于处理所有不符合已定义情况的输入。

6. 易错点总结

  • 条件运算符和逻辑运算符的混淆:要注意条件运算符(如><==等)与逻辑运算符(如&&||)的区别和使用场景。

  • 缺少break语句:在switch语句中,忘记写break会导致程序继续执行后续的case,即“贯穿效应”。

  • if语句中的赋值错误:在if条件中,使用=而不是==可能会导致逻辑错误。

    int a = 5;
    if (a = 10) {  // 错误:这里应该使用 ==printf("a is equal to 10\n");
    }

    这段代码会将a赋值为10,然后判断条件是否为真,容易导致意想不到的行为。

  • 逻辑运算的短路效应:当使用&&||时,要注意短路效应。例如,在a != 0 && b / a > 2中,如果a为0,第二个条件将不会被执行,这样可以避免除以零的错误。

小结

在C语言中,选择结构让程序具有更大的灵活性,使其能够根据不同的条件执行不同的操作。通过学习条件运算符、逻辑运算、if语句和switch语句,你可以编写出更加智能和复杂的程序。

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

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

相关文章

MongoDB安装配置及配置和启动服务

MongoDB 安装配置 附&#xff1a;MongoDB官网下载地址&#xff1a; https://www.mongodb.com/download-center/community 注&#xff1a; 官网可以下载最新版的MongoDB安装包&#xff0c;有MSI安装版和ZIP安装版。我们课堂上使用4.4.4的ZIP安装版。安装版参考博客&#xff1…

k8s 使用 containerd 作为容器运行时拉取 http 的 harbor 私有仓库镜像

文章目录 [toc]版本介绍报错内容解决方法主配置文件修改创建镜像仓库配置 备注 版本介绍 k8s&#xff1a;v1.28.2containerd&#xff1a;1.6.33 报错内容 我的 harbor 用的是 http 的&#xff0c;因为是内网自己用&#xff0c;就没有配置 https 了&#xff0c;于是配置好镜像拉…

JavaScript 在网页设计中的四大精彩案例:画布时钟、自动轮播图、表单验证与可拖动元素

在网页开发中&#xff0c;JavaScript 发挥着至关重要的作用&#xff0c;为网页带来丰富的交互性和动态效果&#xff0c;极大地提升了用户体验。本文将通过几个具体案例展示 JavaScript 的强大魅力。 一、美丽的画布时钟 这是一个使用 JavaScript 在网页上创建美丽画布时钟的案…

Pytorch Note

cat函数: cat函数不会增加维度&#xff0c;默认按照dim0连接张量 stack函数: stack函数会增加一个维度 nn.Linear的默认输入: torch中默认输入一定要为tensor&#xff0c;并且默认是tensor.float32&#xff0c;此外device如果没有model.to(device)放到gpu上面默认会在cpu上运…

RabbitMQ系列学习笔记(十)--通配符模式

文章目录 一、通配符模式原理二、通配符模式实战1、消费者代码2、生产者代码3、查看运行结果 本文参考&#xff1a; 尚硅谷RabbitMQ教程丨快速掌握MQ消息中间件rabbitmq RabbitMQ 详解 Centos7环境安装Erlang、RabbitMQ详细过程(配图) 一、通配符模式原理 通配符模式&#xff…

2024 睿抗机器人开发者大赛(RAICOM)-【网络安全】CTF 部分WP

文章目录 一、前言二、MICS你是黑客么循环的压缩包Goodtime 三、WEBpy 四、Crypto变异凯撒RSAcrypto3 一、前言 WP不完整&#xff0c;仅供参考&#xff01; 除WEB&#xff0c;RE&#xff0c;PWN外&#xff0c;其余附件均已打包完毕 也是一个对MISC比较友好的一个比赛~ 123网…

写了一个SpringBoot的后端管理系统(仅后端)pine-manage-system

文章目录 前言正文&#x1f680; 技术栈&#x1f6e0;️ 功能模块&#x1f4c1; 项目结构&#x1f308; 接口文档&#x1f680; 项目启动 附录项目功能代码示例1、数据库拦截器-打印sql执行时间2、数据记录变更拦截器3、用户角色数据权限拦截器4、实体转换器接口5、触发器模版6…

自动驾驶合集2

我自己的原文哦~ https://blog.51cto.com/whaosoft/12304421 #NeRF与自动驾驶 神经辐射场&#xff08;Neural Radiance Fields&#xff09;自2020年被提出以来&#xff0c;相关论文数量呈指数增长&#xff0c;不但成为了三维重建的重要分支方向&#xff0c;也逐渐作为自动驾驶…

C++学习笔记----9、发现继承的技巧(五)---- 多重继承(1)

我们前面提到过&#xff0c;多重继承常被认为是面向对象编程中复杂且没有必要的部分。这就仁者见仁&#xff0c;智者见智了&#xff0c;留给大家去评判。本节解释c中的多重继承。 1、多个类继承 从语法角度来说&#xff0c;定义一个有多个父类的类是很简单的。需要做的就是当声…

vue前端接包(axios)+ 前端导出excel(xlsx-js-style)

// 先在请求处加上&#xff1a; responseType: arraybuffer, // 指定响应类型为ArrayBufferconst data new Uint8Array(response.data); // 将ArrayBuffer转换为Uint8Arrayconst val { columns: [], data: [] }let offset 0; // 用于跟踪当前解析到的位置while (offset …

DASCTF 2024金秋十月赛RE题wp

目录 RE1&#xff1a;ezRERE2&#xff1a;ezelfRE3&#xff1a;ezAndroid 3题RE&#xff0c;差一点就AK了&#xff0c;可能好久没打比赛了&#xff0c;技能有所下降&#xff0c;还是需要经常摸一摸工具。 RE1&#xff1a;ezRE 执行的时候dump出来&#xff0c;然后静态分析 发…

深入理解Spring Boot的事务注解及其实现原理

深入理解Spring Boot的事务注解及其实现原理 在现代企业级应用开发中&#xff0c;事务管理是一个至关重要的概念。Spring Boot 提供了强大的事务管理功能&#xff0c;使得开发者可以轻松地管理数据库事务。本文将详细介绍Spring Boot中的事务注解及其实现原理。 1. 什么是事务…

Java项目-基于springboot框架的游戏分享系统项目实战(附源码+文档)

作者&#xff1a;计算机学长阿伟 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、ElementUI等&#xff0c;“文末源码”。 开发运行环境 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBoot、Vue、Mybaits Plus、ELementUI工具&#xff1a;IDEA/…

[ACTF2020] 新生赛]Exec1

目录 0x01命令执行 [ACTF2020 新生赛]Exec1 1、解法1 2、解法2 3、总结 3.1php命令注入函数 3.2java命令注入函数 3.3常见管道符 0x02SQL注入 [极客大挑战 2019]EasySQL1 0x01命令执行 [ACTF2020 新生赛]Exec1 1、解法1 ping本地&#xff0c;有回显&#xff0c;TTL…

红队-安全见闻篇(上)

声明 学习视频来自B站UP主 泷羽sec的个人空间-泷羽sec个人主页-哔哩哔哩视频,如涉及侵权马上删除文章 笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负 一.编程与开发 1.后端语言学习 C语⾔&#xff1a;⼀种通⽤的…

Pytest-Bdd-Playwright 系列教程(1):从零开始教你写自动化测试框架「喂饭教程」

Pytest-Bdd-Playwright 系列教程&#xff08;1&#xff09;&#xff1a;从零开始教你写自动化测试框架「喂饭教程」 前言一、项目结构二、安装依赖三、BDD特性文件四、页面对象五、步骤定义六、测试脚本七、Pytest配置八、运行测试 前言 最近收到一些小伙伴在后台的留言&#x…

生成式AI时代的内容安全与系统构建:合合信息文档图像篡改检测创新方案

目录 一、生成式AI时代的内容安全与图像识别1.图像内容安全的重要性2.伪造文档与证件检测的应用场景3.人脸伪造检测技术 二、系统构建加速与文档解析1.TextIn文档解析平台2.TextIn文档解析输出的示例 三、合合信息的行业影响力总结 一、生成式AI时代的内容安全与图像识别 随着…

python-----函数详解(一)

一、概念及作用&#xff1a; 概念&#xff1a;由若干条语句组成语句块&#xff0c;其中包括函数名称、参数列表&#xff0c;它是组织代码的最小单元&#xff0c;完成一定的功能 作用&#xff1a;把一个代码封装成一个函数&#xff0c;一般按功能组织一段代码 目的就是为了重…

autMan奥特曼机器人-安装或更新golang依赖

autMan2.3.4及以上需要更新中间件或安装golang依赖&#xff0c;参照下列步骤&#xff1a; 一、直装版本 ssh下进入autMan文件夹下plugin/scripts下面输入以下指令&#xff1a; go get -u github.com/hdbjlizhe/middleware二、docker版本 从后台进入web终端&#xff0c;依次输入…

速盾:高防cdn的好处体现在什么地方?

随着互联网的迅猛发展&#xff0c;网络安全问题也日益受到关注。为了保护网站免受恶意攻击和DDoS攻击的影响&#xff0c;许多网站选择使用高防CDN&#xff08;Content Delivery Network&#xff09;服务。高防CDN的好处体现在以下几个方面。 首先&#xff0c;高防CDN可以有效防…