新手c语言讲解及题目分享(十七)--运算符与表达式专项练习
本文主要讲解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 |
- | 减 | 6-3 | 3 |
* | 乘 | 2*3 | 6 |
/ | 除 | 4/4 | 1 |
% | 取模(即算术中的求余数) | 7%4 | 3 |
++ | 自增(前) | a=2;b=++a; | a=3;b=3 |
++ | 自增(后) | a=2;b=a++; | a=3;b=2 |
- - | 自减(前) | a=2;b=--a; | a=1;b=1 |
- - | 自减(后) | a=2;b=a--; | a=1;b=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=3;b=2 | a=3;b=2; |
+= | 加等于 | a=3;b=2;a+=b; | a=5;b=2; |
-= | 减等于 | a=3;b=2;a-=b; | a=1;b=2; |
*= | 乘等于 | a=3;b=2;a*=b; | a=6;b=2; |
/= | 除等于 | a=3;b=2;a/=b; | a=1;b=2; |
%= | 模等于 | a=3;b=2;a%=b; | a=1;b=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.常见位运算符
运算符 | 运算 | 范例 | 结果 |
& | 按位与 | 0&0 | 0 |
0&1 | 0 | ||
1&1 | 1 | ||
1&0 | 0 |
| | 按位或 | 0|0 | 0 |
0|1 | 1 | ||
1|1 | 1 | ||
1|0 | 1 | ||
~ | 按位取反 | ~0 | 1 |
~1 | 0 | ||
^ | 按位异或 | 0^0 | 0 |
0^1 | 1 | ||
1^1 | 0 | ||
1^0 | 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的项目,如果喜欢就点点关注吧,大佬们!!!!————
相关文章:

新手c语言讲解及题目分享(十七)--运算符与表达式专项练习
本文主要讲解c语言的基础部分,运算符与表达式的学习,在这一部分中,往往有许多细节的东西需要去记住。当各种运算符一起用时,就会存在优先级的关系,本文末尾有各种运算符的优先级顺序表。 参考书目和推荐学习书目&#…...
香帅的金融学讲义:深入剖析与解读
香帅的金融学讲义:深入剖析与解读 金融学,这个看似高深复杂的学科,实则与我们的生活息息相关。从个人理财到国家宏观经济政策,金融学无处不在。那么,如何更好地理解金融学呢?今天,我们就来借助…...

java基础-IO(6)转换流InputStreamReader、OutputStreamWriter
引入: 从第一节可知,流分为两类:字节流和字符流,转换流就是在两者之间进行转换。 字节流转换为字符流; 字符流转换为字节流。 字符集 字符集:定义了可用字符及其对应的数字编码的集合。常见的字符集有UT…...

使用Azure Devops Pipeline将Docker应用部署到你的Raspberry Pi上
文章目录 1. 添加树莓派到 Agent Pool1.1 添加pool1.2 添加agent 2. 将树莓派添加到 Deployment Pool2.1 添加pool2.2 添加target 3. 添加编译流水线3.1 添加编译命令3.2 配置触发器 4. 添加发布流水线4.1 添加命令行4.2 配置artifact和触发器 5. 完成 1. 添加树莓派到 Agent P…...

91、K8s之ingress上集
一、Ingress service模式: loadbalance NodePort:每个节点都会有一个指定的端口 30000-32767 内网 clusterip:默认模式,只能pod内部访问 externalName:需要dns提供域名 1.1、对外提供服务的ingress service&…...

NISP 一级 | 2.1 密码学
关注这个证书的其他相关笔记:NISP 一级 —— 考证笔记合集-CSDN博客 通过上一章的学习,我们知道了,网络安全的 CIA 模型,而本期学习的“密码学”,则能为 CIA 模型提供很好的技术支持: 面临的攻击威胁所破坏…...
深度学习速通系列:混淆矩阵是什么
混淆矩阵(Confusion Matrix)是一种评估分类模型性能的工具,尤其在监督学习中用于分析分类结果。它通过一个矩阵的形式,将模型的预测结果与实际标签进行比较,从而可以清晰地看到模型在各个类别上的表现。以下是混淆矩阵…...

综合评价 | 基于熵权-变异系数-博弈组合法的综合评价模型(Matlab)
目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 根据信息熵的定义,对于某项指标,可以用熵值来判断某个指标的离散程度,其信息熵值越小,指标的离散程度越大, 该指标对综合评价的影响(即权重&…...
模板与泛型编程笔记(一)
1. 推荐书籍 《C新经典 模板与泛型编程》难得的很容易看得懂的好书,作者讲技术不跳跃,娓娓道来,只要花点时间就能看懂。 2. 笔记 模板为什么要用尖括号?因为便于编译器解析,可以将模板和普通函数声明分开。其实尖括…...

ubuntu 和windows用samba服务器实现数据传输
1,linux安装samba服务器 sudo apt-get install samba samba-common 2,linux 配置权限,修改目录权限,linux下共享的文件权限设置。 sudo chmod 777 /home/lark -R 3. 添加samba用户 sudo smbpasswd -a lark 4,配置共享…...

NISP 一级 | 3.2 网络安全威胁
关注这个证书的其他相关笔记:NISP 一级 —— 考证笔记合集-CSDN博客 网络安全威胁主要来自攻击者对网络及信息系统的攻击,攻击者可以通过网络嗅探、网络钓鱼、拒绝服务、远程控制、社会工程学等网络攻击手段,获得目标计算机的控制权ÿ…...
【技术实践】MySQL分表分库全解析:从理论到实战
文章目录 【技术实践】MySQL分表分库全解析:从理论到实战1. 引言1.1 MySQL数据库面临的挑战1.2 分表分库的概念与优势 2. MySQL分表分库的基本原理2.1 水平分表2.2 垂直分表2.3 水平分库2.4 分表分库的选择标准 3. 实现分表分库的技术方案3.1 中间件解决方案3.2 自定…...

动手学深度学习(一)简介+预备知识+基础知识(上)
一、简介 1、机器学习 机器学习研究如何使用经验改善计算机系统的性能。 2、表征学习 表征学习是机器学习的一类,研究的是,如何自动学习出数据合适的表示方式,更好地由输入得到正确的输出。 3、深度学习 深度学习是具有多级表示的表征学…...

dubbo 服务消费原理分析之应用级服务发现
文章目录 前言一、MigrationRuleListener1、迁移状态模型2、Provider 端升级3、Consumer 端升级4、服务消费选址5、MigrationRuleListener.onRefer6、MigrationRuleHandler.doMigrate6、MigrationRuleHandler.refreshInvoker7、MigrationClusterInvoker.migrateToApplicationFi…...
QT如何在对话框中插入表格
在Qt中,如果你想要在对话框中插入表格,通常会使用QTableWidget或QTableView结合QStandardItemModel(对于QTableView)或直接在QTableWidget中操作。这里,我将介绍如何使用QTableWidget在对话框中插入表格,因…...

如何使用SSHFS通过SSH挂载远程文件系统?
SHFS(SSH 文件系统)是一款功能强大的工具,它允许用户通过 SSH 挂载远程文件系统,从而提供一种安全便捷的方式来访问远程文件,就像访问本地文件一样。本文将引导您完成使用 SSHFS 挂载远程文件系统的过程,为…...
SEELE 框架是
SEELE 框架是一个相对新颖的组织管理和优化框架,旨在帮助团队或企业更好地实现目标。它的核心思想是通过科学的管理方法来提升组织的执行力和决策能力。以下是对 SEELE 框架的详细讲解,包括定义、内容、实施步骤、实施策略以及推荐的实践方法和工具。 一…...
高教社杯数模竞赛特辑论文篇-2013年B题:碎纸复原模型与算法(续)(附MATLAB代码实现)
目录 4.3 三维碎纸复原模型 4.3.1 三维模型的降维 4.3.2 三维碎纸复原算法 4.3.3 模型求解 五、模型改进与推广 5.1 模型优点 5.2 模型缺点 5.3 模型改进 5.3.1 适用彩色图片的改进 5.3.2 最小干预度算法 5.4 模型推广 参考文献 代码实现 模拟退火法代码 GUI 程序代码 层次特征…...
Java操作Miscrosoft Office各类文件格式的开源免费工具库
Aspose.Words库 是一个商业Java库,还封装了常用的word、pdf、防伪码、水印等诸多功能。Apache 库需要注意的前置问题 问题1:Word的两个格式doc和docx,POI并没有提供统一的处理类。分别用 HWPFDocument 处理doc文档,用 XWPFTempl…...
Redis 缓存淘汰算法策略详解
引言 Redis 作为一款高性能的内存数据库,在处理大量数据时,由于内存有限,需要在数据达到设定的内存上限后,使用缓存淘汰策略来决定哪些数据应该被移除,以腾出空间存储新的数据。这一过程被称为缓存淘汰,通…...

利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...

SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...