【谭浩强C程序设计精讲 5】运算符和表达式

文章目录

    • 3.3 运算符和表达式
      • 3.3.1 C运算符
      • 3.3.2 基本的算术运算符
      • 3.3.3 自增(++)、自减(--)运算符
      • 3.3.4 算术表达式和运算符的优先级与结合性
      • 3.3.5 不同类型数据间的混合运算
      • 3.3.6 强制类型转换运算符

3.3 运算符和表达式

3.3.1 C运算符

在这里插入图片描述

3.3.2 基本的算术运算符

运算符含义举例结果说明
+正号运算符+ aa 的值单目运算符
-负号运算符- aa 的算术负值单目运算符
*乘法运算a * ba 和 b 的乘积由于键盘无 × 号,所以用 * 代替
/除法运算符a / ba 除以 b 的商由于键盘无 ÷ 号,所以用 / 代替。
两个实数相除的结果是双精度实数;
两个整数相除的结果为整数,如 5/3=1,舍去小数部分。
但是,除数或者被除数有一个为负值,舍入的方向不确定。
%求余运算符a % ba 除以 b 的余数要求参加运算的运算对象为整数,结果也是整数。如 8%3=2
+加法运算符a + ba 和 b 的和
-减法运算符a - ba 和 b 的差

示例1:

#include <stdio.h>
int main(void)
{int a,b,d;double c;a = 5/3;b = -5/3;  c = 5.0/3.0;d = 5%3;printf("5/3=%d\n-5/3=%d\n5.0/3.0=%lf\n5%%3=%d\n",a,b,c,d);return 1;
}

运行结果(你的运行结果可贴在评论区):
在这里插入图片描述

3.3.3 自增(++)、自减(–)运算符

  • 自增(++)、自减(–)运算符的作用是使变量的值加 1 或减 1。
运算说明
++i,–i在使用 i 之前,先使 i 的值加(减)1
i++,i–在使用 i 之后,使 i 的值加(减)1

示例2:

#include <stdio.h>
int main(void)
{int i,j1,j2;i=3;j1 = ++i;    //i的值先变成4,再赋值给j1printf("i=%d,j1=%d\n",i,j1);i=3;//思考一下这里为什么要重新设置为3,如果去掉这一句之后,对下面的计算结果有什么影响?j2 = i++;    //先将i的值赋给j2,i的值再变成4printf("i=%d,j2=%d",i,j2);return 1;
}

运行结果:
在这里插入图片描述

3.3.4 算术表达式和运算符的优先级与结合性

  • C 算术表达式:用算术运算符括号运算对象(也称操作数)连接起来的、符合 C 语法规则的式子。

    运算对象包括:常量、变量、函数等。如:a*b/c-1.5+‘a’

  • C 语言规定了运算符的优先级结合性

    • 在表达式求值时,先按运算符的优先级别顺序执行

    如表达式 a-b*c,由于乘号优先级高于减号,因此要先计算 b*c,再被 a 减。

    • 如果在一个运算对象两侧的运算符的优先级别相同,则按规定的“结合方向”处理。

    如表达式 a-b+c,由于加号和减号的优先级相同,则按“自左至右”(左结合性)顺序,先计算 a-b,再加 c。
    如赋值运算 a=b=c,则按“自右至左”(右结合性)顺序,先将 c 的值赋给 b,再将 b 的值赋给 a。

  • 下图表是C列出的所有运算符以及它们的优先级和结合性,供读者参阅。(注意:常用的算术运算符记住自左至右,赋值运算符自右至左,特殊的位运算符和逻辑运算符,图中有标红。不用死记硬背,常用的不用背就会,复杂些的用到时查表即可。
    在这里插入图片描述

3.3.5 不同类型数据间的混合运算

如果一个运算符两侧的数据类型不同,则先自动进行类型转换,使二者成为同一种类型,然后进行运算

  • 整型、实型、字符型数据间可以进行混合运算,规律如下:

    • (1)+、-、*、/ 运算的两个数中有一个数为 float 或 double 型,结果是 double 型(因为前面也讲过浮点型数据运算的结果是双精度型)。系统将所有的 float 型数据先转换为 double 型,然后再进行运算。
    • (2)如果 int 型与 float 或 double 型数据进行运算,先把 int 型 和 float 型转换为 double 型,然后进行运算,结果是 double 型。
    • (3)字符(char)型数据与整型数据进行运算,就是把字符的 ASCII 代码与整型数据进行运算。如果字符型数据与实型数据进行运算,则将字符的 ASCII 代码转换成 double 型,再进行运算。
  • 以上规则是编译系统自动完成,无需用户干预

  • 分析以下表达式,i 为整型变量,f 为 float 型变量,d 为double 型变量。
    在这里插入图片描述

示例3:

#include <stdio.h>
/*
功能要求:给定一个大写字母A,要求用小写字母a输出
分析:字符参与运算实则是其ASCII代码参与运算,通过查表可知,A的ASCII是65,a的ASCII代码是97,相差32
*/
int main(void)
{char c1,c2;c1='A';             //将字符'A'的ASCII代码放到c1变量中c2=c1+32;           //得到字符'a'的ASCII代码,放在c2变量中printf("%c\n",c2);  //输出c2的值,是一个字符printf("%d\n",c2);  //输出c2的值,是字符'a'的ASCII代码return 0;
}

运行结果:
在这里插入图片描述

3.3.6 强制类型转换运算符

一般形式:(类型名)(表达式)

例如:

  • (double)a (将 a 转换成 double 型)
  • (float)(5%3) (将 5%3 的值转换成 float)
  • (int)(x+y) (将 x+y 的值转换成 int 型)
  • (int)x+y (将 x 转换成整型,然后与 y 相加)
  • 说明:在强制类型转换时,得到一个所需类型的中间数据,而原来变量的类型未发生变化。

本节完

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

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

相关文章

【Java】一文讲解Java类加载机制

Java 类加载机制是 Java 运行时的核心组成部分&#xff0c;负责在程序运行过程中动态加载和连接类文件&#xff0c;并将其转换为可执行代码。理解类加载机制&#xff0c;能更容易理解你一行行敲下的Java代码是如何在JVM虚拟机上运行起来。并且理解类加载机制之后&#xff0c;我…

DevOps持续交付之容器化CICD流水线

DevOps持续交付 随着DevOps⼤规模化的落地和应⽤&#xff0c;持续集成以及持续交付已经是⼀种常态的。CI指的是持续集成&#xff0c;使⽤的开源⼯具是Jenkins&#xff0c;CD指的是持续交付和持续部署&#xff0c;⼀个完整的软件开发⽣命周期为: 主要流程可以具体为: 构建阶段…

CA和证书

安全机制 墨菲定律 如果有两种选择&#xff0c;其中一种将导致灾难&#xff0c;则必定有人会作出这种选择。即&#xff1a;做事不要有侥幸心理。 常用安全技术 认证、授权、审计、安全通信 加密算法和协议 对称加密算法 加密和解密使用同一个秘钥。 特性 加密、解密使…

Python+OpenCV 零基础学习笔记(1-3):anaconda+vscode+jupyter环境配置

文章目录 前言相关链接环境配置&#xff1a;AnacondaPython配置OpenCVOpencv-contrib:Opencv扩展 Notebook:python代码笔记vscode配置配置AnacondaJupyter文件导出 前言 作为一个C# 上位机&#xff0c;我认为上位机的终点就是机器视觉运动控制。最近学了会Halcon发现机器视觉还…

修改css、html后前端没有刷新的解决方法(图文)

修改css、html后前端没有刷新的解决方法&#xff08;图文&#xff09; 修改css、html后前端没有刷新的原因和图文解决方法 1 原因 网页的缓存机制 2 解决方法 禁用网页缓存&#xff0c;具体操作如下 打开F12网络选项勾选禁用缓存。此时再刷新页面即可实时更新 以上就是全…

元旦档首日票房超4.69亿,“下雪场尴尬”上热搜!

哇塞&#xff0c;元旦假期终于来啦&#xff01;&#x1f389;在这个喜庆的时刻&#xff0c;电影院也热闹非凡&#xff0c;据猫眼专业版数据显示&#xff0c;截至12月30日&#xff0c;2023年元旦档首日票房竟然超过了4.69亿&#xff01;这简直是个天文数字啊&#xff01;&#x…

C++:stack、queue、priority_queue增删查改模拟实现、deque底层原理

C:stack、queue、priority_queue增删查改模拟实现 前言一、Cstack的介绍和使用1.1 引言1.2 satck模拟实现 二、Cqueue的介绍和使用2.1 引言2.2 queue增删查改模拟实现 三、STL标准库中stack和queue的底层结构:deque3.1 deque的简单介绍(了解)3.2 deque的缺陷3.3 为什么选择dequ…

【2023 —— 我和CSDN相遇的第一年】— “技术学习和个人成长的回顾与展望”

​ ​ &#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 &#x1f4ab;个人格言:"没有罗马,那就自己创造罗马~" 目录 &#x1f38a;对2023的总结与回顾&#x1f38a; &#x1f3c5;获奖记录 &#x1f4da;学…

springboot定时执行某个任务

springboot定时执行某个任务 要定时执行的方法加上Schedule注解 括号内跟 cron表达式 “ 30 15 10 * * &#xff1f;” 代表秒 分 时 日 月 周几 启动类上加上EnableScheduling 注释

SpringBoot实用篇

SpringBoot实用篇 1、热部署 什么是热部署&#xff1f; 所谓热部署&#xff0c;就是在应用正在运行的时候升级软件&#xff0c;却不需要重新启动应用。对于Java应用程序来说&#xff0c;热部署就是在运行时更新Java类文件。 热部署有什么用&#xff1f; 节约时间&#xff0c;热…

OpenGL FXAA抗锯齿算法(Qt)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 之前已经提供了使用VCG读取Mesh的方式,接下来就需要针对读取的网格数据进行一些渲染操作了。在绘制Mesh数据时总会遇到图形的抗锯齿问题,OpenGL本身已经为我们提供了一种MSAA技术,但该技术对于一些实时渲染性能有…

【STM32】SPI通信

1 SPI通信 SPI&#xff08;Serial Peripheral Interface&#xff0c;串行外设接口&#xff09;是由Motorola公司开发的一种通用数据总线 四根通信线&#xff1a;SCK&#xff08;Serial Clock&#xff0c;串行时钟&#xff09;、MOSI&#xff08;Master Output Slave Input&am…

模型 KANO卡诺模型

本系列文章 主要是 分享 思维模型&#xff0c;涉及各个领域&#xff0c;重在提升认知。需求分析。 1 卡诺模型的应用 1.1 餐厅需求分析故事 假设你经营一家餐厅&#xff0c;你想了解客户对你的服务质量的满意度。你可以使用卡诺模型来收集客户的反馈&#xff0c;并分析客户的…

微信小程序开发系列-09自定义组件样式特性

微信小程序开发系列目录 《微信小程序开发系列-01创建一个最小的小程序项目》《微信小程序开发系列-02注册小程序》《微信小程序开发系列-03全局配置中的“window”和“tabBar”》《微信小程序开发系列-04获取用户图像和昵称》《微信小程序开发系列-05登录小程序》《微信小程序…

快速找回误删的文件:2024 年顶级数据恢复软件大盘点

你曾经遇到过数据丢失的问题吗&#xff1f;别担心&#xff0c;12个最佳数据恢复软件帮你恢复。 计算机中的数据恢复是从辅助存储、丢失的文件或介质中恢复已删除、不可恢复、损坏、损坏和格式化的数据的过程。存储的数据可以通过正常方式带回到同一个地方&#xff0c;甚至&…

模版匹配历劫之路2-探究空间金字塔对于匹配速度的影响

1 方法一 在合适的金字塔层数上&#xff0c;低步长旋转角度&#xff0c;逐层缩小旋转范围&#xff0c;达到提高匹配速度的效果 金字塔越高&#xff0c;模版越模糊&#xff0c;但是只要模版不会被降级很严重&#xff0c;那么模版的边缘方向不会受到太大的影响。高层级别的金字塔…

简单的springboot项目

传参方式 URL 传参 URL 传参的两种常见方式是通过查询参数和路径参数。 查询参数&#xff1a; 查询参数是通过在 URL 后面使用 ? 字符&#xff0c;然后以 keyvalue 的形式添加到 URL 中。多个查询参数之间使用 & 符号分隔。例如&#xff1a;https://example.com/api?…

【网络安全 | Misc】normal_png

方法一 可以通过stegsolve或winhex看到图片高度被改写&#xff1a; 改为&#xff1a; 再保存图片即可&#xff1a; flag{B8B68DD7007B1E406F3DF624440D31E0}方法二 使用脚本查看宽高是否被修改&#xff1a; import zlib import struct import argparse import itertoolspars…

Java强软弱虚引用

面试&#xff1a; 1.强引用&#xff0c;软引用&#xff0c;弱引用&#xff0c;虚引用分别是什么&#xff1f; 2.软引用和弱引用适用的场景&#xff1f; 3.你知道弱引用的话&#xff0c;能谈谈WeakHashMap吗&#xff1f; 目录 一、Java引用 1、强引用&#xff08;默认支持模式…

【C++】STL 容器 - multiset 容器 ( std::multiset 容器简介 | std::multiset 容器 常用操作 api 简介 )

文章目录 一、mulset 容器1、std::multiset 容器简介2、代码示例 - multiset 容器 二、std::multiset 容器 常用操作 api 简介1、常用 api 简介2、代码示例 - multiset 容器常用操作 一、mulset 容器 1、std::multiset 容器简介 在 C 语言 的 标准模板库 ( STL , Standard Temp…