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

C控制语句:循环(1)

本篇摘要:

c语言中用关系运算符和表达式比较大小

新的_Bool类型

优先级和关系运算符

---------------------------------------------------------------------------------------------------------------------------------

在C语言中,可以使用关系运算符(也称为比较运算符)来比较两个值的大小。这些运算符会返回一个布尔值,表示比较结果是真(1)还是假(0)。常用的关系运算符有:

  1. ==:等于
  2. !=:不等于
  3. >:大于
  4. <:小于
  5. >=:大于等于
  6. <=:小于等于

 

#include <stdio.h>int main() {int a = 5;int b = 10;// 使用关系运算符比较 a 和 bif (a > b) {printf("a 大于 b\n");} else {printf("a 不大于 b\n");}if (a < b) {printf("a 小于 b\n");} else {printf("a 不小于 b\n");}if (a == b) {printf("a 等于 b\n");} else {printf("a 不等于 b\n");}if (a != b) {printf("a 不等于 b\n");} else {printf("a 等于 b\n");}if (a >= b) {printf("a 大于或等于 b\n");} else {printf("a 不大于或等于 b\n");}if (a <= b) {printf("a 小于或等于 b\n");} else {printf("a 不小于或等于 b\n");}return 0;
}

在上面的代码中,程序会对 ab 进行比较,并根据比较结果输出相应的信息。运行结果如下:

 a 不大于 b
a 小于 b
a 不等于 b
a 不等于 b
a 不大于或等于 b
a 小于或等于 b

----------------------------------------------------- 

在C语言中,_Bool是C99标准引入的一种新类型,用于表示布尔值(布尔类型)。在C99标准之前,C语言没有专门的布尔类型,通常使用整数类型(如int)来表示布尔值,其中0表示假(false),非0值表示真(true)。

使用_Bool类型可以提高代码的可读性和可维护性,明确表示变量是布尔类型。标准库<stdbool.h>提供了布尔类型的宏定义,可以使代码更具可读性。引入<stdbool.h>头文件后,可以使用bool关键字替代_Bool,使用truefalse代替0和1。

以下是一些使用_Bool类型和<stdbool.h>头文件的示例:

使用_Bool

#include <stdio.h>int main() {_Bool a = 1;  // 表示真_Bool b = 0;  // 表示假if (a) {printf("a is true\n");} else {printf("a is false\n");}if (b) {printf("b is true\n");} else {printf("b is false\n");}return 0;
}

使用<stdbool.h>

#include <stdio.h>
#include <stdbool.h>int main() {bool a = true;  // 表示真bool b = false; // 表示假if (a) {printf("a is true\n");} else {printf("a is false\n");}if (b) {printf("b is true\n");} else {printf("b is false\n");}return 0;
}

使用_Bool进行关系运算符比较

#include <stdio.h>
#include <stdbool.h>int main() {int x = 5;int y = 10;// 使用关系运算符比较 x 和 y,并将结果存储在布尔变量中bool isGreater = x > y;bool isLess = x < y;bool isEqual = x == y;printf("x > y: %s\n", isGreater ? "true" : "false");printf("x < y: %s\n", isLess ? "true" : "false");printf("x == y: %s\n", isEqual ? "true" : "false");return 0;
}

在这个示例中,关系运算符的比较结果存储在布尔变量中,并且使用条件运算符?来打印比较结果。

使用_Bool类型和布尔宏定义可以使代码更简洁、易读,同时明确表达变量的布尔含义。

-------------------------------------------

优先级和关系运算符

在C语言中,运算符有明确的优先级和结合性(associativity),这决定了在一个表达式中多个运算符如何组合和计算。关系运算符和其他运算符的优先级影响表达式的求值顺序。

关系运算符的优先级

关系运算符的优先级较低,但高于赋值运算符。具体的优先级顺序(从高到低)如下:

  1. 算术运算符 (+, -, *, /, %)
  2. 关系运算符 (<, <=, >, >=)
  3. 相等运算符 (==, !=)
  4. 逻辑运算符 (&&, ||)
  5. 赋值运算符 (=, +=, -=, 等)

结合性

  • 大多数关系运算符的结合性是从左到右(左结合性)。
  • 赋值运算符的结合性是从右到左(右结合性)。

示例和优先级说明

考虑以下示例:

#include <stdio.h>int main() {int a = 5;int b = 10;int c = 15;int result;result = a + b > c - 5; // 1printf("result = %d\n", result);result = (a + b) > (c - 5); // 2printf("result = %d\n", result);result = a < b && b < c; // 3printf("result = %d\n", result);result = a < b || b > c; // 4printf("result = %d\n", result);return 0;
}
分析
  1. result = a + b > c - 5;

    • 运算顺序:先计算 a + bc - 5,然后比较它们。
    • 等价于:result = (a + b) > (c - 5);
    • 结果:result1(真)。
  2. result = (a + b) > (c - 5);

    • 运算顺序:括号内的表达式先计算,然后进行比较。
    • 结果与上一个示例相同。
  3. result = a < b && b < c;

    • 运算顺序:先计算 a < b,然后计算 b < c,最后计算逻辑与 &&
    • 等价于:result = (a < b) && (b < c);
    • 结果:result1(真)。
  4. result = a < b || b > c;

    • 运算顺序:先计算 a < b,然后计算 b > c,最后计算逻辑或 ||
    • 等价于:result = (a < b) || (b > c);
    • 结果:result1(真),因为 a < b 为真。

通过这些示例可以看到,运算符的优先级和结合性会影响表达式的求值顺序。使用括号可以明确指定求值顺序,从而避免混淆。

运算符优先级表

以下是常见运算符的优先级表(从高到低):

  1. 括号 ()
  2. 一元运算符 + - ! ~ ++ -- (右结合)
  3. 乘法、除法、取模 * / %
  4. 加法、减法 + -
  5. 关系运算符 < <= > >=
  6. 相等运算符 == !=
  7. 逻辑与 &&
  8. 逻辑或 ||
  9. 条件运算符 ?: (右结合)
  10. 赋值运算符 = += -= *= /= %= <<= >>= &= ^= |= (右结合)

理解这些优先级和结合性对于编写和阅读C语言代码非常重要,尤其是在复杂表达式中。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Please refer to dump files (if any exist) [date].dump, [date]-jvmRun[N]……解决
  • 七夕表白网页效果实现与解析
  • C++的7种设计模式原则
  • kafka下载|安装
  • C#(asp.net)电商后台管理系统-计算机毕业设计源码70015
  • 混合专家模型(MoE)入门
  • 接口中的方法到底能有具体实现吗?
  • c# 排序、强转枚举
  • IS-IS协议
  • 某MDM主数据管理系统与微软Dynamic CRM系统(新加坡节点)集成案例
  • 大模型12:知识图谱 图数据库
  • 深入学习小程序第二天:事件处理与用户交互
  • Android 14 Power键亮灭屏流程
  • 深入理解小程序的渲染机制与性能优化策略
  • 镜像仓库 Registry 介绍及实践-http
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • [笔记] php常见简单功能及函数
  • 【comparator, comparable】小总结
  • angular2开源库收集
  • Apache的80端口被占用以及访问时报错403
  • CODING 缺陷管理功能正式开始公测
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • HTTP--网络协议分层,http历史(二)
  • JavaScript设计模式与开发实践系列之策略模式
  • js操作时间(持续更新)
  • MySQL几个简单SQL的优化
  • PHP变量
  • springMvc学习笔记(2)
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • Yeoman_Bower_Grunt
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 第三十一到第三十三天:我是精明的小卖家(一)
  • 网页视频流m3u8/ts视频下载
  • 小程序测试方案初探
  • 移动端唤起键盘时取消position:fixed定位
  • 关于Android全面屏虚拟导航栏的适配总结
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • ​HTTP与HTTPS:网络通信的安全卫士
  • ​MySQL主从复制一致性检测
  • #Datawhale AI夏令营第4期#AIGC方向 文生图 Task2
  • #laravel 通过手动安装依赖PHPExcel#
  • #vue3 实现前端下载excel文件模板功能
  • $nextTick的使用场景介绍
  • (¥1011)-(一千零一拾一元整)输出
  • (160)时序收敛--->(10)时序收敛十
  • (2024,LoRA,全量微调,低秩,强正则化,缓解遗忘,多样性)LoRA 学习更少,遗忘更少
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~
  • (MATLAB)第五章-矩阵运算
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (附源码)php新闻发布平台 毕业设计 141646
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .htaccess配置常用技巧