首页 > 其他分享 >P2-3与P2-4.【基本数据类型、运算符和表达式】第三节与第四节

P2-3与P2-4.【基本数据类型、运算符和表达式】第三节与第四节

时间:2024-10-19 16:49:17浏览次数:3  
标签:P2 运算 ++ 数据类型 运算符 变量 表达式 赋值

讲解视频:

<iframe allowfullscreen="true" data-mediaembed="bilibili" frameborder="0" id="TciKKnpP-1729327033329" src="https://player.bilibili.com/player.html?aid=113333013388845"></iframe>

P2-3.【基本数据类型、运算符和表达式】第三节

<iframe allowfullscreen="true" data-mediaembed="bilibili" frameborder="0" id="jpPraemD-1729327053477" src="https://player.bilibili.com/player.html?aid=113333013385314"></iframe>

P2-4.【基本数据类型、运算符和表达式】第四节

目录

必备知识与理论

任务实施


必备知识与理论

C语言中把除了控制语句和输入输出以外的几乎所有的基本操作都作为运算符处理。 其运算符和表达式数量之多,在高级语言中是少见的。正是丰富的运算符和表达式使C语言功能十分完善,这也是C语言的主要特点之一。

本任务只介绍最常用的算术运算符、赋值运算符、关系运算符、逻辑运算符、逗号运算符及其相应的表达式。其它运算符将在后续任务中介绍。

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

(1)算术运算符

用于各类数值运算。包括加(+)、减(-)、乘(*)、除 (/)、求余(%,或称模运算)、自增(++)、自减(--)共7种。

双目运算符是有两个运算量参与运算的运算符。如a+b,4 -8,c/5等都是有两个量参加运算。

双目运算符中的加(+)、减(-)、乘(*)运算与普通的算术运算中的加法、减法、乘法相同,具有左结合性,这里不在再解释。使用算术运算符应注意以下几点:

“+”、“-”也可分别作正值、负值运算符,此时为单目运算,具有右结合性, 如+X,-5等。

除法运算符“/”是双目运算,具有左结合性。当参与运算量均为整型时,结果也为整型,舍去小数,如5/2的值为2,而不是2.5;如果运算量中有一个是实型,则结果为双精度实型,如5.0/2的值为2.5。

求余运算符(模运算符)“%”是双目运算,具有左结合性。要求参与运算的量必须为整型。求余运算的结果等于两数相除后的余数,一般情况下,所得余数与被除数符号相同。如5%2=1,10%5=0,8%-5=3。

自增运算符(++)的功能是使变量的值自增1,自减运算符 (--)的功能是使变量值自减1。它们均为单目运算,都具有右结合性。自增、自减运算符只能用于变量,而不能用于常量或表达式,如6++或(a+b)++都是不合法的。自增、自减运算符可有以下几种形式。

++i  /*  i值自增1后再参与其他运算 */

--i  /*  i值自减1后再参与其他运算 */

i++  /*  i参与运算后再将值自增1  * /

i--  /*  i参与运算后再将值自减1  * /

对于一个变量i实行前置运算(++i)和后置运算(i++),其运算结果是一样的,即都使变量i的值加1(i=i+1)。但++i和i++的不同之处在于++i是先执行i=i+1后,再使用i的值;而i++是先使用i的值后,再执行i=i+1。

例如,假设i的初值为3,则:

j=++i;  /* i的值先变成4再赋给j,j的值为4 */

j=i++;  /* 先将i的值赋给j,j的值为3,然后i变为4 */

(2)算术表达式

用算术运算符和圆括弧将操作数(即常量、变量和函数)组合起来的符合C语言语法规则的式子,称为C算术表达式。

C表达式不允许使用方括号和花括号,只能使用圆括号帮助限定运算顺序。可以使用多层圆括号,但左右括号必须配对,运算时从内层圆括号开始,由内向外依次计算表达式的值。

2.赋值运算符与赋值术表达式

赋值运算符用于赋值运算,分为简单赋值(=)、复合算术运算赋值 (+=,-=, *=,/=,%=)和复合位运算赋值(&=,|=,^ =, >>=, <<= ) 共3 类。

(1)简单赋值运算

简单赋值的一般格式为:

变量名=表达式

含义是将赋值运算符右边表达式的值存放到以左边变量名为标识的存储单元中。

例如:语句i=3中的赋值运算符“=”的功能是将整型常量3赋给整型变量i,这样i的值就是3。

(2)复合赋值运算符

C语言规定可以在赋值运算符“=”之前加上其它运算符,以构成复合赋值运算符。其一般格式为:

变量 双目运算符=表达式;

等价于:

变量=变量 双目运算符 表达式;

例如:

n+=1;  /* 等价于n=n+1 */

x*=y+1;/* 等价于x=x*(y+1)  */

C语言规定,所有双目运算符都可以与赋值运算符一起组合成复合赋值运算符。共有10种复合赋值运算符,即+=、-=、*=、/=、%=、<<=、>>=、&=、^=、|=。 其中后5种是有关位运算的,将在后面介绍。复合赋值运算符的优先级与赋值运算符的优先级相同,且结合方向也一致。

(3)赋值表达式

由赋值运算符将一个变量和一个表达式连接起来的式子称为“赋值表达式”。一般格式为:

变量=表达式

赋值表达式的求解过程如下:

①先求解赋值运算符右侧“表达式”的值。

②将赋值运算符右侧“表达式”的值赋给左侧的变量。

③赋值表达式的值就是被赋值变量的值。

(4)变量赋初值

在程序中常常需要对一些变量赋初值,以便使用变量。C语言允许在定义变量的同时为其赋初值。

int a=1;

等价于:

int a;

a=1;

3.逗号运算符与逗号表达式

C语言中逗号“,”也是一种运算符,称为逗号运算符。其功能是把两个或多个表达式连接起来组成一个表达式,称为逗号表达式。其一般形式为:

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

求值过程为:先求出表达式1的值,再求出表达式2的值,……,依次求出各个表达式的值,并以表达式n的值作为整个逗号表达式的值。

逗号运算符是所有运算符中级别最低的,且具有从左至右的结合性。

例如:a=3*4,a*5,a+10;

求解过程为:先计算3*4,将12赋给a,然后计算a*5,值为60,最后计算a+10,值为12+10=22,所以整个表达式的值为22,变量a的值为12。

4.关系运算符和关系表达式

(1) 关系运算符

关系运算符用于比较运算。包括大于(>)、小于(<)、大于等于(>=)、小于等于(<=)、等于(==)和不等于(!=)6种。

关系运算符都是双目运算符,其结合性均为左结合。在6个关系运算符中,前面四个的优先级相同(>,<,>=,<=),后两种(==,!=)的优先级相同,并且前面4种的优先级高于后面两种。

用关系运算符比较的数据有:整型、实型和字符型,字符串则不能用关系运算符做比较。比较整型或实型数据时,按照数值大小进行比较;比较字符型数据时,按照字符的ASCII值进行比较。

关系运算符的优先级低于算术运算符,高于赋值运算符。

(2)关系表达式

用关系运算符将两个比较的对象连接起来的式子称为关系表达式,其格式为:

表达式 关系运算符 表达式

5. 逻辑运算符和逻辑表达式

(1)逻辑运算符

逻辑运算符用于逻辑运算。包括与(&&)、或(||)、非(!)3种运算符。与 (&&)和或(||)运算符均为双目运算符,具有左结合性。非(!)运算符为单目运算符,具有右结合性。

(2)逻辑表达式

用逻辑运算符将运算对象连接起来的有意义的式子称为逻辑表达式,其格式:

表达式 逻辑运算符 表达式

若逻辑表达式成立为真(即true)则返回1;否则,表达式为假(即false)返回0。

6. 运算符的优先级与结合性

C语言规定了运算符的“优先级”和“结合性”。在表达式求解时,先按运算符的“优先级别”高低次序执行。

例如:a-b*c等价于a-(b*c),运算符“*”的优先级高于运算符“-”。

如果在一个运算对象两侧的运算符优先级别相同,则按规定的“结合方向”处理。左结合性(自左向右结合方向)是指运算对象先与左边的运算符结合,右结合性(自右向左结合方向)是指运算对象先与右边的运算符结合。

例如:a-b+c等价于(a-b)+c。

在书写有多个运算符的表达式时,应注意各个运算符的优先级,确保表达式中的运算符能以正确的顺序参与运算。对于复杂的表达式,为了清晰起见可加圆括号“()”强制规定运算顺序。

任务实施

现在来完成本任务:计算数学表达式的值。

(1)先将数学表达式

转换成C语言表达式为:x=(-b+5*a*a)/(2*a)。

(2)确定变量a、b和x的数据类型。为便于计算,将a、b定义为整型,x定义为实型。

(3)由于a、b为整型,根据C语言的运算规则,两个整数相除的结果为整型数据,而x定义为实型数据,为了得到正确的结果,可进行强制类型转换。

程序代码如下:

#include <stdio.h>

main()

{ int a,b;

float x;

  scanf("%d%d",&a,&b); /* 通过键盘给a,b赋值,&a表示变量a的地址 */

  x=(float)(-b+5*a*a)/(2*a);  /* 将右边整型数据转换为实型 */

  printf("x=%f\n", x);

}       

程序运行结果:

2 3↙

x=4.250000

标签:P2,运算,++,数据类型,运算符,变量,表达式,赋值
From: https://blog.csdn.net/m0_61712829/article/details/143080485

相关文章

  • 深入理解拓展运算符与剩余运算符:功能、用法与区别
    目录深入理解拓展运算符与剩余运算符:功能、用法与区别一、拓展运算符(SpreadOperator)1、什么是拓展运算符?2、拓展运算符的作用3、拓展运算符的使用示例①数组展开与合并②对象展开与合并③函数调用时传递数组作为参数二、剩余运算符(RestOperator)1、什么是剩余运算符......
  • P1091 [NOIP2004 提高组] 合唱队形
    分析题目知道求一个最长上升子序列和一个最长下降子序列的长度均为同一个起点的最长的长度。于是求点击查看代码#include<iostream>#include<stack>#include<cmath>#include<algorithm>#include<set>#include<vector>#include<climits>#include<string.h>#incl......
  • 我在创建表时,建表语句中不同数据类型字段的排列顺序对性能有影响吗?
    在MySQL或其他数据库管理系统(DBMS)中,字段的排列顺序对表的性能影响并不是非常显著或直接的,但在某些特定情况下,优化字段排列可以带来一些性能或存储效率上的好处。以下是一些需要考虑的因素,尤其是当涉及大量数据和性能优化时。1.数据类型的对齐和存储效率MySQL在存储数据时,试......
  • 我希望gid字段是表的自增主键,数据类型采用8个字节的无符号整形数据,并且我要指定自增的
    Sir,为了将gid字段设置为自增主键并且采用8字节无符号整型数据类型(即BIGINTUNSIGNED),您可以使用MySQL的AUTO_INCREMENT机制,并且可以通过ALTERTABLE来指定自增的初始值。具体实现步骤如下:1.字段定义字段名称:gid数据类型:BIGINTUNSIGNED(8字节无符号整数)自增......
  • P1004 [NOIP2000 提高组] 方格取数
    要走两次因此,考虑一个四维的数组来实现,然后如果i=k&&j==l的话记得减一次即得到答案。点击查看代码#include<iostream>#include<stack>#include<cmath>#include<algorithm>#include<set>#include<vector>#include<climits>#include<string.h&g......
  • P1541 [NOIP2010 提高组] 乌龟棋
    dp[a][b][c][d]表示走了a+b2+c3+d*4步的当前的最大值,状态转移方程就出来了。点击查看代码#include<iostream>#include<stack>#include<cmath>#include<algorithm>#include<set>#include<vector>#include<climits>#include<string.h>#i......
  • 给出每个字段合理的数据类型; 字段描述信息翻译成英文。
    gid---g表示global,此字段是多维领域模型实体的全局唯一ID。code---实体编码,可以由用户输入,以后也可以通过其他方式生成。name---实体的正式名称。alias---实体的别名。display---实体的显示名,等同于第二个别名。created_at---实体被创建的时间。updated_at---......
  • 运算符
    一、赋值运算符/*赋值运算符:=+=-=*=/=%=*/publicclassFuZhiDemo1{publicstaticvoidmain(String[]args){inta=3;//a+=4;//System.out.println(a);a-=5;System.out.println(a);}}......
  • P2487 [SDOI2011] 拦截导弹
    Sol两个限制的导弹拦截。设\(f_i\)表示以\(i\)结尾的最长LIS显然可以得到暴力转移方程\(f_i=\displaystyle\max_{j=1,a_j\gea_i,b_j\geb_i}^{i-1}f_j+1\),考虑到是三维偏序,所以用CDQ分治优化即可。离散化不要忘记排序!Code#include<iostream>#include<iomanip>......
  • 20241018每日一题洛谷P2386
    普及每日一题信息学竞赛1206:放苹果把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1是同一种分法。第一行是测试数据的数目t(0<=t<=20)。以下每行均包含二个整数M和N,以空格分开。1<=M,N<=10。对输入的每组数据M和N,用一行输出相......