C语言典型例题41

news2024/9/23 19:28:29

《C程序设计教程(第四版)——谭浩强》


习题3.1 写出下列各个表达式的值。设a=3,b=4,c=5。
    (1)        a+b>c && b==c
    (2)        a||b+c && b-c
    (3)        !(a>b) && !c || 1
    (4)        !(x=a) && (y+b) && 0
    (5)        !(a+b)+c-1 && b+2/2


相关知识点:

(1)逻辑表达式的判断

在C语言中,逻辑表达式的判断主要是通过逻辑运算符来实现的,逻辑运算符主要有三种:&&(逻辑与)、||(逻辑或)和(逻辑非)。

  1. 逻辑与运算符(&&):当两个操作数都为真时,结果才为

  2. 逻辑或运算符(||):只要有一个操作数为真,结果就为

  3. 逻辑非运算符():用来反转操作数的逻辑状态,如果操作数为,则逻辑非运算符将产生

超详细判断过程:(当a=3,b=4,c=5时)
(1)a+b>c && b==c

a+b>c(3+4>5)        为真

b==c (4==5)       为假——“==”表示判断,4等于5吗?

&&全为真才为。有一个为假都为

一真一假为

(2)a||b+c && b-c

a||b+c                为真(非0为真)

真&& b-c            为真

该逻辑表达式为真

(3)!(a>b) && !c || 1

a>b                        为假

!(a>b)                     为真

c                             为真

!c                         为假

真&&假                   为假

假||真                      为真

该逻辑表达式为真

(4)!(x=a) && (y=b) && 0

x=a                                为真

!(x=a)                             为假

y=b                                为真

假&&真                          为假

假&&0                            为假

该逻辑表达式到时为假

 (5)!(a+b)+c-1 && b+2/2

a+b                                为真

!(a+b)                             为假(即为0)

0+c-1                              为真

b+2/2                              为真

真&&真                           为真

该逻辑表达式到时为真

(2)操作符的优先级

在‌C语言中,操作符的优先级决定了表达式中操作的执行顺序。理解这些优先级对于编写正确且高效的代码至关重要。以下是C语言中操作符的优先级顺序:

  1. 括号:圆括号()和方括号[]具有最高优先级,用于改变运算顺序。
  2. ‌单目运算符:包括正负号+-、逻辑非!、按位取反\~、取地址&、解引用*、类型转换(type)等,这些运算符的优先级次之
  3. ‌算术运算符:乘除法*/、求余%的优先级高于加法和减法+-,而加法和减法的优先级相同但低于乘除法。
  4. ‌移位运算符:左移和右移的优先级低于算术运算符。
  5. ‌关系运算符:大于>、小于<、大于等于>=和小于等于<=的优先级低于移位运算符。
  6. ‌相等和不等运算符:等于==和不等!=的优先级低于关系运算符。
  7. ‌位运算符:按位与&、按位异或^和按位或|的优先级继续降低。
  8. ‌逻辑运算符:逻辑与&&和逻辑或||的优先级最低。

此外,‌赋值运算符如=及其复合赋值运算符如+=-=等具有最低的优先级,并且是从右到左结合的。‌逗号运算符,也具有最低的优先级,用于分隔表达式中的多个操作。

当表达式中包含多个操作符时,首先根据优先级从高到低执行操作。如果两个操作符的优先级相同,则按照它们的结合性(从左到右或从右到左)来确定操作的顺序。理解这些规则对于避免编程错误和提高代码效率至关重要。‌


代码:

//《C程序设计教程(第四版)——谭浩强》
//习题3.1 写出下列各个表达式的值。设a=3,b=4,c=5。
//	(1)		a+b>c && b==c
//	(2)		a||b+c && b-c
//	(3)		!(a>b) && !c || 1
//	(4)		!(x=a) && (y+b) && 0
//	(5)		!(a+b)+c-1 && b+2/2

#include <stdio.h>
int main()
{
	int a = 3;
	int b = 4;
	int c = 5;
	
	//逻辑表达式的值是一个逻辑量(真或假)——利于if语句来判断逻辑表达式的真假
	printf("下面各逻辑表达式的值如下:\n");
	
	//(1)a+b>c && b==c
	if(a+b>c && b==c)
	{
		printf("逻辑表达式a+b>c && b==c为真\n");
	}
	else
	{
		printf("逻辑表达式a+b>c && b==c为假\n");
	}
	
	//(2)a||b+c && b-c
	if(a||b+c && b-c)
	{
		printf("逻辑表达式a||b+c && b-c为真\n");
	}
	else
	{
		printf("逻辑表达式a||b+c && b-c为假\n");
	}
	
	//(3)!(a>b) && !c || 1
	if(!(a>b) && !c || 1)
	{
		printf("逻辑表达式!(a>b) && !c || 1为真\n");
	}
	else
	{
		printf("逻辑表达式!(a>b) && !c || 1为假\n");
	}
	
	//(4)!(x=a) && (y+b) && 0
	int x = 0;
	int y = 0;
	if(!(x=a) && (y+b) && 0)
	{
		printf("逻辑表达式!(x=a) && (y+b) && 0为真\n");
	}
	else
	{
		printf("逻辑表达式!(x=a) && (y+b) && 0为假\n");
	}
	
	
	//(5)!(a+b)+c-1 && b+2/2
	if(!(a+b)+c-1 && b+2/2)
	{
		printf("逻辑表达式!(a+b)+c-1 && b+2/2为真\n");
	}
	else
	{
		printf("逻辑表达式!(a+b)+c-1 && b+2/2为假\n");
	}
	return 0;
}

运行结果:


编写代码时遇到的问题:

(1)借助if……else语句的特点求解


    if(表达式1)

     {

                表达式1;

     }

    else

     {

                表达式2;

     }

当逻辑表达式为时,执行表达式1;为时,执行表达式2。

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

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

相关文章

遗传算法原理与实战(python、matlab)

遗传算法 1.什么是遗传算法 遗传算法&#xff08;Genetic Algorithm&#xff0c;简称GA&#xff09;是一种基于生物进化论和遗传学原理的全局优化搜索算法。它通过模拟自然界中生物种群的遗传机制和进化过程来解决复杂问题&#xff0c;如函数优化、组合优化、机器学习等。遗传…

CTFHUB-技能树-Web题-RCE(远程代码执行)-远程包含-命令注入-综合过滤练习

CTFHUB-技能树-Web题-RCE&#xff08;远程代码执行&#xff09;-远程包含-命令注入-综合过滤练习 根据题目提示 以及代码 法1&#xff1a; 分隔符可以使用%0a代替 若直接使用文本框上传命令会导致字符被转义&#xff0c;直接访问URL payload&#xff1a; /?ip127.0.0.1%…

docker部署Mongodb后输入命令报错?

&#x1f3c6;本文收录于《CSDN问答解惑-专业版》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收…

vue实现动画

方法一&#xff1a; 先理解事件发生的过程&#xff0c;v-enter,v-enter-to,v-leave,v-leave-to。其中v-enter,v-leave-to代表开始以及结束时的状态。v-enter-active,v-leave-active代表动画的过程。 定义动画第一步把要做动画的语句添加到transition中&#xff0c;其中name可…

使用docxtemplater-image-module-free时支持动态获取图片大小

使用docxtemplater-image-module-free时支持动态获取图片大小 1、问题背景 在使用docxtemplater-image-module-free生成模板图片时&#xff0c;写死了其中一个函数 getSize() {return [150, 150]; },导致图片都是一个大小&#xff0c;且被拉扯的变形了 2、报错信息 在去掉…

C++——入门基础(上)

目录 一、C参考文档 二、C在工作领域的应用 三、C学习书籍 四、C的第一个程序 五、命名空间 &#xff08;1&#xff09;namespace的定义 (2)命名空间的使用 六、C的输入和输出 七、缺省函数 八、函数重载 九、写在最后 一、C参考文档 &#xff08;1&#xff09;虽…

二叉树《数据结构》

二叉树 1. 树概念及结构1.1 树的概念1.2树的概念1.3 树的表示 2. 二叉树概念及结构2.1 二叉树概念2.4 二叉树的性质练习 3. 二叉树顺序结构及实现3.1 二叉树的顺序结构3.2堆的结构及概念练习3.3堆的实现3.3.1堆的向下调整算法3.3.2堆的创建3.3.3 堆的插入3.3.4 堆的删除3.3.5堆…

C2M商业模式分析与运营平台建设解决方案(五)

C2M商业模式通过直接对接消费者需求与制造商&#xff0c;实现了生产与市场需求的精准匹配&#xff0c;本文提出的解决方案重点在于构建一个智能化运营平台&#xff0c;通过集成先进的大数据分析、人工智能技术和灵活的供应链管理系统&#xff0c;全面提升需求预测的准确性、生产…

【若依框架】代码生成详细教程,15分钟搭建Springboot+Vue3前后端分离项目,基于Mysql8数据库和Redis5,管理后台前端基于Vue3和Element Plus,开发小程序数据后台

今天我们来借助若依来快速的搭建一个基于springboot的Java管理后台&#xff0c;后台网页使用vue3和 Element Plus来快速搭建。这里我们可以借助若依自动生成Java和vue3代码&#xff0c;这就是若依的强大之处&#xff0c;即便你不会Java和vue开发&#xff0c;只要跟着石头哥也可…

loadlibrary failed with error 126:找不到指定模块

买了一张w4300回来装到nas上&#xff0c;核显HD630输出的 打开cad的时候发现图形显卡是hd630&#xff0c;w4300一直没有被驱动&#xff0c;于是去设置里面将cad强行用高性能打开 结果一直报错&#xff1a;loadlibrary failed with error 126:找不到指定模块 网上搜索了半天&am…

招生简章不会设计?这个网站可以供你参考

招生简章是学校与潜在学生之间的第一座桥梁&#xff0c;它的设计直接影响到学校的形象和招生效果。如果你在设计招生简章时感到困惑&#xff0c;不妨参考以下几个要点&#xff0c;让你的招生简章更加吸引人。 1.明确目标受众&#xff1a;在设计招生简章之前&#xff0c;首先要明…

项目实战:Qt+Opencv相机标定工具v1.3.0(支持打开摄像头、视频文件和网络地址,支持标定过程查看、删除和动态评价误差率,支持追加标定等等)

若该文为原创文章&#xff0c;转载请注明出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/141334834 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、Op…

运维小技能:通过调整JVM的默认内存配置来解决内存溢出(‌OutOfMemoryError)‌或栈溢出(‌StackOverflowError)‌等错误

文章目录 引言I 调整JVM的默认堆内存配置1.1 java命令启动jar包时配置JVM 的内存参数1.2 基于Tomcat服务器部署的java应用,配置JVM 的内存参数II 案例: Linux 操作系统设置tomcat的 JVM 的内存参数查找Tomcat位置: 快速定位服务状态和部署位置具体配置步骤扩展: 监测Nginx访…

配置stm32cubemx采集stm32H743IIT6,通过DMA实现多通道和多模块ADC的采集,亲测有效!

之前写到stm32cubemx通过阻塞实现单通道和多通道的ADC的采集。 本文分享通过DMA实现单模块多通道和多模块多通道的ADC采集。 stm32cubemx的版本6.10.0。 一、DMA采集多通道ADC数据 阻塞采集是每次采集adc数据&#xff0c;cpu死等&#xff0c;直到采集完或者在设定时间超时没…

不能使用乘除法、for、while、if、else、switch、case求1+2+3+...+n

求123...n_牛客题霸_牛客网 (nowcoder.com) 描述 求123...n&#xff0c;要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句&#xff08;A?B:C&#xff09;。 数据范围&#xff1a; 0<n≤2000<n≤200 进阶&#xff1a; 空间复杂度 O(1)O(…

PCRNet: Point Cloud Registration Network using PointNet Encoding 论文解读

目录 一、导言 二、先导知识 1、Frobenius范数 三、相关工作 1、点云配准工作 2、PointNet 3、基于深度学习的点云配准 四、PCRNet 1、PCRNet 2、Iterative PCRNet 3、损失函数 五、实验 一、导言 本论文收录于CVPR2019&#xff0c;本论文提出了一种依赖PointNet网…

快排补充(挖坑法,lomuto前后指针,非递归法)

挖坑法 挖坑法动态示意图 挖坑法方法分析 创建左右指针。⾸先从右向左找出⽐基准⼩的数据&#xff0c;找到后⽴即放⼊左边坑中&#xff0c;当前位置变为新 的"坑"&#xff0c;然后从左向右找出⽐基准⼤的数据&#xff0c;找到后⽴即放⼊右边坑中&#xff0c;当前位置…

STM32——CAN通讯基础知识

CAN 协议简介 CAN 是控制器局域网络 (Controller Area Network) 的简称&#xff0c;它是由研发和生产汽车电子产品著称的德国 BOSCH 公司开发的&#xff0c;并最终成为国际标准(ISO11519以及ISO11898),是国际上应用最广泛的现场总线之一。差异点如下&#xff1a; 高速CAN可以达…

关于shortlink项目重构增加了del_time字段自己出现的问题

最近刚做完shortlink项目的重构问题,其中增加del_time作为t_link表的唯一索引要注意几点问题. 1.数据库表中的del_time字段类型为什么,一定要和DO中的类型统一. 2.del_time作为唯一索引不要写死了,不然就无法创建短连接了,这里我是将del_time修改成date类型,然后通过new date…

Python数分实战

学习视频&#xff1a;【课程3.0】Python基础与分析实战_哔哩哔哩_bilibili 由于学习过python进行数据分析&#xff0c;所以就简单记录一下&#xff0c;最主要学习的还是视频最后的两个项目&#xff0c;进行实战 之前想不明白明明有很智能的软件做数据分析&#xff0c;为什么还要…