新手c语言讲解及题目分享(十七)--运算符与表达式专项练习

news2024/12/23 16:14:32

本文主要讲解c语言的基础部分,运算符与表达式的学习,在这一部分中,往往有许多细节的东西需要去记住。当各种运算符一起用时,就会存在优先级的关系,本文末尾有各种运算符的优先级顺序表。

参考书目和推荐学习书目:通过网盘分享的文件:C语言程序设计电子教材 (1).pdf
链接: https://pan.baidu.com/s/1JFqSaCKZ0A2Lr944e72NUA?pwd=p648 提取码: p648

目录

前言

一.算术运算符与算术表达式

1.常见的算数运算符

2.算数表达式

二.赋值运算符与赋值表达式

1.常见赋值运算符

2.赋值语句

3.数据类型转换

Ⅰ.自动转换

Ⅱ.强制转换

三.关系运算符与关系表达式

1.常见关系运算符

四.逻辑运算符与逻辑表达式

1.常见逻辑运算符

五.位运算符与位运算表达式

六.逗号运算符与逗号表达式(最容易被忽略)

七.条件运算符与条件表达式

八.运算符的优先级和结合方向


前言

在程序中对数据进行处理时需要使用到运算符,对数据进行算术运算、赋值、比较等操 作。在 C 语言中,运算符可分为算术运算符、赋值运算符、比较运算符、逻辑运算符和位运 算符。

一.算术运算符与算术表达式

1.常见的算数运算符

运算符

运算

范例

正号

+3

3

负号

b=4;-b

4

5+5

10

63

3

*

2*3

6

/

4/4

1

%

取模(即算术中的求余数)

7%4

3

++

自增(前)

a=2b=++a

a=3b=3

++

自增(后)

a=2b=a++

a=3b=2

- -

自减(前)

a=2b=--a

a=1b=1

- -

自减(后)

a=2b=a--;

a=1b=2

(1)在进行自增++和自减——运算时,如果运算符++或——放在操作数的前面则是 先自增或自减运算,再进行其他运算。反之,如果运算符放到操作数后面则是先进行其他运 算再进行自增或自减运算。自增和自减运算符只能用于变量,不能用于常量和表达式,如 4++和++(a+b)都是错误的。

(2)在进行除法运算时,当除数和被除数都是整数时,结果也是整数,如 35/10 结果为 3,小数部分被忽略。 思考:2500/1000*1000 结果为 2000。由于表达式执行顺序是从左至右,所以先执行除法再执行乘法 2500/1000,得到结果 2,再乘以 1000,自然得到结果 2000。

(3)取模(%)运算时,运算结果的正负取决于%左面数的符号,与%右面数的符号无 关,如(-5)%3 结果为-2,而 5%(-3)结果为 2。

2.算数表达式

用算术运算符和括号将操作数连接起来的式子称为算术表达式

1+2;
4-3;
a%b;
a×b+2; 
b-2/5;

二.赋值运算符与赋值表达式

1.常见赋值运算符

运算符

运算

范例

=

赋值

a=3b=2

a=3b=2

+=

加等于

a=3b=2a+=b

a=5b=2

=

减等于

a=3b=2a-=b

a=1b=2

*=

乘等于

a=3b=2a*=b

a=6b=2

/=

除等于

a=3b=2a/=b

a=1b=2

%=

模等于

a=3b=2a%=b

a=1b=2

2.赋值语句

在赋值过程中,从右往左运算,将右边表达式的结果赋值给左边的变量

3.数据类型转换

数据类型转换是把数据从一种类型转成另一种类型,可分为自动类型转换和强制转换

Ⅰ.自动转换

自动类型转换指在赋值时自动完成类型转换,程序不需要做任何显示声明。

在多种数据类型参与的混合运算中,编译器会自动转换数据类型,将参与运算的所 有数据转换为同一种类型后再进行计算。

按数据表示范围从小到大进行,以保证数值的精度。

例如,int 和 long 参与运算时,将 int 类型的数据转换成 long 类型后再进行运算。

所有的浮点运算都以 double 类型进行的,即使运算中只有 f loat 类型,也要先转换为 double 类型,才能进行运算。

char 和 short 参与运算时,自动转换成 int 类型。

注:自动类型转换一般是将数据范围小的可以转换成数据范围大的;但如果反着来就有可能出现数据丢失,从而报错。

Ⅱ.强制转换

强制类型转换也称显示类型转换,指的是两种类型之间通过显示声明进行转换。当两种 类型不兼容,或者目标类型取值范围小于源类型时,需要进行强制转换。

强制类型转换的格式为:

(类型名)表达式

#include <stdio.h> 
int main() 
{ 
//定义 2 个整型变量 Sum、count 赋初值
int sum=148; //总数
int count=7; //数量
double average; //定义 1 个双字节变量 average,用于存放平均数
average=(double)sum /count; //计算平均数后进行强制类型转换存入 average 中
printf("平均数为:%lf\n",average); //输出平均数
return 0; 
} 

注:类型转换是临时性的。无论是自动类型转换还是强制类型转换,都只是为了本次运算而 进行的临时性转换,转换结果保存到临时的内存空间,不会改变数据本来的类型或者值

三.关系运算符与关系表达式

关系运算符用于对两个数值或变量进行比较,判断结果是否符合给定条件,结果为 “真”或“假”。

1.常见关系运算符

运算符

运算

范例

==

等于

5==4

!=

不等于

5!=4

小于

5<4

大于

5>4

<=

小于等于

5<=4

>=

大于等于

5>=4

使用关系运算符时需要注意,不能将运算符“==”误写成赋值运算符“=”。

关系表达式的值是一个布尔类型的逻辑值,即“真”或“假”,真用1代替,假则用0代替

四.逻辑运算符与逻辑表达式

逻辑运算符对布尔型的数据进行操作,其结果仍然布尔型数据。

1.常见逻辑运算符

运算符

运算

范例

&&

真&&真

真&&假

假&&真

假&&假

||

||

||

||

||

!

!

!

注:C 语言中的与操作又称短路与,如果使用&&进行运算,当左边为假时,右边的表 达式不会进行运算,因此得名短路与。同理,如果使用||进行运算,当左边为真时,右边 的表达式不会进行运算,因此得名短路或。

五.位运算符与位运算表达式

位运算符是针对二进制数的每一位进行运算的符号,专门针对数字 0 和 1 进行操作的。

1.常见位运算符

运算符

运算

范例

按位与

00

0

01

0

11

1

10

0

按位或

00

0

01

1

11

1

10

1

按位取反

0

1

1

0

按位异或

00

0

01

1

11

0

10

1

<<

左移

>>

右移

位运算符<<将将操作数的各个二进制位全部左移若干位,左边移出的位丢失,右边 补 0。

11<<2 表示将 11 的各二进制位左移 2 位,计算过程如下:

解: (<<) 0000000000001011

                       0000000000101100

 运算结果为 0000000000101100,对应数值为 44。

六.逗号运算符与逗号表达式(最容易被忽略)

在 C 语言中逗号“,”也作为运算符使用,它的功能为连接多个表达式构成一个表达 式,含有“,”的表达式称为逗号表达式。

逗号表达式的一般形式如下: 表达式 1,表达式 2,表达式 3,……,

表达式 n 逗号表达式的值为依次求解所有表达式,即上式中先求表达式 1,再求表达式 2,……,最后求解到表达式 n。整个表达式的值为表达式 n 的值。

注意:逗号运算符在所有运算符中优先级最低。在 C 语言代码中出现的逗号,不一定就是逗号运算符。函数参数间的逗号和在定义 变量时的逗号都不是,而是分隔符。使用逗号表达式一般不是要求最后表达式的值,而 是想分别得到各个表达式的值。

七.条件运算符与条件表达式

条件运算符是 C 语言中唯一的三目运算符,它的一般形式如下:

表达式 1?表达式 2:表达式 3

具体过程为:先计算表达式 1 的值,若为真(非 0),则计算表达式 2,整个表达式的值 为表达式 2 的值;若表达式 1 的值为假(0),则计算表达式 3 的值,整个表达式的值为表达 式 3 的值。

八.运算符的优先级结合方向

优先级

运算符

结合方向

含义

使用形式

说明

1

(最高)

( )

自左至右

圆括号运算符

(表达式) 或 函数名(参数表)

[ ]

数组下标运算符

数组名[达式]

·

结构体成员运算符

结构体变量.员名

->

指向结构体成员运算符

结构体指针变量->成员名

2

!

自右至左

逻辑非运算符

!表达式

单目

运算

按位取反运算符

~表达式

+

求正运算符

+达式

-

负号运算符

-表达式

++

自增运算符

++变量 或 变量++

--

自减运算符

--变量 或 变量--

(类型)

强制类型转换运算符

(数据类型)

*

间接(取值)运算符

*指针变量

&

取地址运算符

&变量

sizeof

求所占字节数运算符

sizeof(表达式)sizeof(类型)

3

*

自左至右

乘法运算符

表达式1*表达式2

双目

运算

/

除法运算符

表达式1/表达式2

%

求余运算符

整型表达式1%型表达式2

4

+

加法运算符

表达式1+表达式2

减法运算符

表达式1表达式2

5

<<

左移位运算符

变量<<

>>

右移位运算符

变量>>

6

>

大于运算符

表达式1>表达式2

>=

大于等于运算符

表达式1>=表达式2

<

小于运算符

表达式1<表达式2

<=

小于等于运算符

表达式1<=表达式2

7

==

等于运算符

表达式1==表达式2

!=

不等于运算符

表达式1!=表达式2

8

&

自左至右

按位与运算符

表达式1&表达式2

9

^

按位异或运算符

表达式1^表达式2

10

|

按位或运算符

表达式1|表达式2

11

&&

逻辑与运算符

表达式1&&表达式2

12

||

逻辑或运算符

表达式1||表达式2

13

?:

自右至左

条件运算符

表达式1?表达式2:表达式3

14

=

自右至左

赋值运算符

变量=达式

双目

运算

+=

加后赋值运算符

变量+=

-=

减后赋值运算符

变量-=达式

*=

乘后赋值运算符

变量*=表达式

/=

除后赋值运算符

变量/=表达式

%=

求余后赋值运算符

变量%=达式

&=

按位与后赋值运算符

变量&=表达式

^=

按位异或后赋值运算符

变量^=表达式

|=

按位或后赋值运算符

变量|=表达式

<<=

左移后赋值运算符

变量<<=表达式

>>=

右移后赋值运算符

变量>>=表达式

15

(最低)

,

自左至右

逗号运算符(右顺序计算

各表达式的值)

表达式1,表达2,,表达n

————由于博主还是大三的在读生,时间有限,每天会不定时更新一些学习经验和一些32的项目,如果喜欢就点点关注吧,大佬们!!!!————

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

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

相关文章

开放式耳机哪个牌子好?长文传授6招秘籍,彻底远离坑货!

​大家好&#xff0c;作为一位专注于评测各类数码产品的博主&#xff0c;今天我特别推荐开放式耳机作为我们日常的首选。这种耳机以其独特的设计&#xff0c;避免了传统耳机长时间佩戴可能带来的不适和感染风险。开放式耳机佩戴简便且稳固&#xff0c;尤其适合热爱跑步和运动的…

解决TMP_InputField 在WebGL(抖音)上不能唤起虚拟键盘,不能使用手机内置输入法的问题

整整花费了一天时间测试和解决。试验了多个方法&#xff0c;花了不少美刀&#xff0c;最终才发现抖音这个官方文档&#xff0c;哭了&#xff1a; https://partner.open-douyin.com/docs/resource/zh-CN/mini-game/develop/guide/game-engine/rd-to-SCgame/open-capacity/capabi…

[Python] 从0到1实现一个简单的数字图像识别大模型

目录 前言介绍 神经网络 简单的神经网络 使用均方误差与正规方程实现神经网络 随机梯度下降与批量梯度下降实现神经网络 用更复杂的梯度下降实现一个神经网络 利用Sigmoid激活函数实现神经网络 使用 PyTorch 框架快速构建一个神经网络、 案例实战 前言介绍 大模型的本…

python-网页自动化(二)

获取元素属性 1. 获取属性 以百度首页的logo为例&#xff0c;获取logo相关属性 <img hidefocus"true" id"s_lg_img" class"index-logo-src" src"//www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png" width"270…

微服务-nacos

nacos-注册中心 启动 服务注册到nacos

【MIT 6.5840/6.824】In Search of an Understandable Consensus Algorithm 学习笔记

In Search of an Understandable Consensus Algorithm 1 Introduction2 Replicated state machines3 What’s wrong with Paxos?4 Designing for understandability5 The Raft consensus algorithm5.1 Raft basics5.2 Leader election5.3 Log replication5.4 Safety5.4.1 Elec…

知识付费最新版知识付费做的最好的平台,网创资源知识付费 知识付费网站搭建,搭建知识付费APP平台教学:在线教育系统源码。

目录 前言&#xff1a; 一、知识付费平台特点 二、知识付费平台功能 三、 知识付费小程序 前言&#xff1a; 知识付费小程序是一种在线学习平台&#xff0c;用户可以通过该小程序以一定的费用获取专业知识和技能。这些知识和技能可以来自行业专家、教育机构或个人创作者。知…

Docker 容器技术:简化 MySQL 主从复制部署与优化

文章目录 前言一、为什么基于Docker搭建&#xff1f;二、利用Docker搭建主从服务器2.1 配置Master&#xff08;主&#xff09;2.2 配置Slave&#xff08;从&#xff09;2.3 链接Master&#xff08;主&#xff09;和Slave&#xff08;从&#xff09;2.4 测试主从复制 三、常见问…

面试官:你有写过自定义指令吗?自定义指令的应用场景有哪些?

一、什么是指令 开始之前我们先学习一下指令系统这个词 指令系统是计算机硬件的语言系统&#xff0c;也叫机器语言&#xff0c;它是系统程序员看到的计算机的主要属性。因此指令系统表征了计算机的基本功能决定了机器所要求的能力 在vue中提供了一套为数据驱动视图更为方便的…

VMWARE VCENTER6.7 VCSA通过Web5480进行版本升级

VCENTER当前版本如下图 操作前先给VCENTER打一个快照&#xff0c;出问题可以立即回退 1、先下载VCSA镜像&#xff0c;并将VCSA镜像上传至DataStore中&#xff1b; 2、选中VCSA虚拟机&#xff0c;编辑配置 3、挂载新上传的VCSA镜像&#xff0c;一定要勾选“已连接”和“打开电源…

自定义string类

#include <iostream> #include <string> int main() { std::string str "Hello, World!"; // 使用 c_str() 将 std::string 转换为 C 风格字符串&#xff0c;并传递给 printf printf("The string is: %s\n", str.c_str()); // 尝试修改…

网络层 V(IPv6)【★★★★★★】

一、IPv6 的特点 IP 是互联网的核心协议。现在使用的 IP&#xff08;即 IPv4 ) 是在 20 世纪 70 年代末期设计的。互联网经过几十年的飞速发展&#xff0c;到 2011 年 2 月&#xff0c;IPv4 的地址已经耗尽&#xff0c; ISP 已经不能再申请到新的 IP 地址块了。我国在 2014 年…

全能与专精:探索未来AI模型的发展趋势与市场潜力

文章目录 每日一句正能量前言AI模型的全面评估和比较AI模型的专精化和可扩展性AI模型的合理使用和道德规范后记 每日一句正能量 一个人&#xff0c;如果没有经受过投资失败的痛楚&#xff0c;又怎么会看到绝望之后的海阔天空。很多时候&#xff0c;经历了人生中最艰难的事&…

告别繁琐切换,可道云teamOS让企业微信和钉钉无缝对接,爽到飞起

在当今快节奏的工作环境中&#xff0c;企业对于高效办公工具的需求日益增强。特别是企业微信和钉钉的普及&#xff0c;已成为许多企业日常沟通协作的基石。然而&#xff0c;传统企业网盘与这些平台的割裂&#xff0c;常常让工作流程变得繁琐。 幸运的是&#xff0c;teamOS的出…

vs2019编译opencv+contribute+gpu

1、提前准备 vs2019、opencv4.4.0、opencv-contribute4.4.0、CUDA Toolkit 11.8&#xff08;不能高于自己电脑的CUDA版本&#xff09;、CUDNN8.9.6 ps&#xff1a;先提前准备环境 1&#xff09;cmd中查看&#xff1a;nvidia-smi查看自己的显卡信息&#xff0c;不存在下述信息…

文本匹配任务(下)

文本匹配任务 1.文本匹配-深度学习1.1表示型1.1.1训练方式一1.1.2训练方式二&#xff08;Triplet Loss&#xff09; 1.2交互型1.3交互型和表示型对比 2.对比学习2.1图像中2.2NLP中 3.真实场景-海量向量查找3.1CD树3.1.1空间切割3.1.2Annoy 1.文本匹配-深度学习 简介&#xff1…

EasyExcel 文件导出 - 合并某些列值相同的行

文章目录 EasyExcel 文件导出 - 合并某些列值相同的行最终效果实现思路创建单元格合并的策略类使用 EasyExcel 文件导出 - 合并某些列值相同的行 在数据处理与文件导出的过程中&#xff0c;我们常常会遇到各种特定的需求。今天&#xff0c;我们就来探讨一下使用 EasyExcel 进行…

VsCode 联想路径配置

问题&#xff1a;举一个例子&#xff0c;引入文件 import store from ‘./store’&#xff0c;在输入 ./st 后会提示store。 配置路径别名后 webpack: {// 配置别名alias: {// 使用 表示 src 文件所在路径: path.resolve(__dirname, src)}}项目配置路径后输入 import store f…

JVM面试真题总结(一)

文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ Java主要是解释执行还是编译执行?请说明理由 Java既是解释执行的…

828华为云征文|部署私有云和文档管理系统 Kodcloud

828华为云征文&#xff5c;部署私有云和文档管理系统 Kodcloud 一、Flexus云服务器X实例介绍1.1 云服务器介绍1.2 产品优势1.3 对比Flexus L实例和ECS 二、Flexus云服务器X实例配置2.1 重置密码2.2 服务器连接2.3 安全组配置 三、部署 Kodcloud3.1 Kodcloud 介绍3.2 Docker 环境…