运算符和表达式

2023-05-28 0 861

基本上上每两个流程都须要展开演算,对统计数据展开研磨处置,不然流程就没象征意义了。要展开演算,就需明确规定能采用的操作符。C词汇的操作符覆盖范围很宽,把除掌控句子和输入输入之外的基本上上大部份的INS13ZD都做为操作符处置,比如将表达式符“=”做为表达式操作符、圆括弧做为负号操作符等。

1、基本上的微积分操作符

最常用的微积分操作符见下表

运算符和表达式

2、自增、自减操作符促进作用是使表达式的值加1或减1,比如:++i,–i(在采用i以后,先使i的值加(减)1)

i++,i–(在采用i后,先使i的值加(减)1)

粗略看,++i和i++的促进作用相等同于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的值3赋给j,j的值为3,接着i转变为4)

又比如:i=3;printf(“%d”,++i);输入4.

若改成printf(“%d\n”,i++);则输入3.

3、微积分表达式和操作符的错误率与紧密结合性

用微积分操作符和括弧将演算第一类(也称数组)相连接的,合乎C句法准则的等式,称作C微积分表达式。演算第一类主要包括自变量、表达式、表达式等。比如上面是两个不合法的C微积分表达式:a*b/c-1.5+a.

C词汇除明确规定了操作符的错误率外,还明确规定了操作符的紧密结合性。在表达式解释器时,先按操作符的优先级次序继续执行,比如先算数后以此类推。如表达式a-b*c,b的右侧为破折号,右侧为特殊字符,而特殊字符错误率低于破折号,因而相等同于a-(b*c).

假如在两个演算第一类两边的操作符的错误率完全相同,如a-b+c,则按明确规定的“紧密结合路径”处置。C词汇明确规定了各式各样操作符的紧密结合路径(紧密结合性),微积分操作符的紧密结合路径都是“自从左到右”,狸尾豆右后右,因而b先与破折号紧密结合,继续执行a-b的演算,接着再继续执行加c的演算。

“自左至右的紧密结合路径”又称“左紧密结合性”,即演算第一类先与左面的操作符紧密结合。以后能看到有些操作符的紧密结合路径为“自右至左”,即右紧密结合性。

4、不同类型统计数据间的混合演算

在流程中经常会遇到不同类型的统计数据展开演算,假如两个操作符的两边的统计数据类型不同,则先自动展开类型转换,使二者具有同一种类型,接着展开演算。因而整型、实型、字符型统计数据间能展开混合演算。规律为:

(1) +、-、*、/演算的两个数中有两个数为float或double型,结果是double型,因为系统将大部份float型统计数据都先转换为double型,接着展开演算。

(2) 假如int型与float或double型统计数据展开演算,先把int型和float型统计数据转换为double型,接着展开演算,结果是double型。

(3) 字符(char)型统计数据与整型统计数据展开演算,就是把字符的ASCII代码与整型统计数据展开演算。如:12+A,由于字符A的ASCII代码是65,相等同于12+65,等同于77.字符统计数据能直接与整型统计数据展开演算。假如字符型统计数据与实型统计数据展开演算,则将字符的ASCII代码转换为double型统计数据,接着展开演算。

以上的转换是编译系统自动完成的,用户不必过问。

例:给定两个大写字母,要求用小写字母输入。

解题思路:前面已介绍,字符统计数据以ASCII码存储在内存的,形式与整数的存储形式完全相同。所以字符型统计数据和其他微积分型统计数据之间能互相表达式和演算。

要展开大小写字母之间的转换,就要找到两个字母的大写形式和小写形式之间有什么内在联系。实际上我们通过查找资料发现其内在规律,即同两个字母,用小写表示的字符的ASCII代码比用大写表示的字符的ASCII代码大32。比如字符a的ASCII代码为97,而A的ASCII代码为65.将A的ASCII代码加32,就能得到a的ASCII代码。有此思路就能编写流程了。

编写流程:

#include<stdio.h>int main() { char c1,c2; c1=A; c2=c1+32; printf(“%c\n,c2); printf(“%d\n,c2); return 0; }

运行结果:

a

97

流程预测:流程第6行“c2=c1+32”,把字符表达式c1的值与整数32相加。c1+32就是A+32,就是65+32,其值为97.将97赋给字符表达式c2,在c2的存储单元中存放了97(以二进制形式存储)。

两个字符统计数据既能以字符形式输入,也能以整数形式输入。第7行的目的是以字符形式输入c2,在printf表达式中指定用“%c”格式,系统会将c2表达式的值97转换成相应字符a,接着输入。最后一行的目的是以ASCII码形式输入c2的值,故指定用“%d”输入格式,得到97。

5、强制类型转换操作符能利用强制类型转换操作符将两个表达式转换成所需类型。比如:(double)a (将a转换成double类型)(int)(x+y) (将x+y的值转换成int型)(float)(5%3) (将5%3的值转转成float型)其一般形式为:(类型名)(表达式)注意,表达式应该用括弧括起来。假如写成(int)x+y,则只将x转换成整型,接着与y相加。

须要说明的是,在强制类型转换时,得到两个所需类型的中间统计数据,而原来表达式的类型未发生变化。比如:a=(int)x

假如已定义x为float型表达式,a为整型表达式,展开强制类型演算(int)x后得到两个int类型的临时值,它的值等同于x的整数部分,把它赋给a,注意x的值和类型都未变化,仍为float型。该临时值在表达式后就不再存在了。

从上可知,有2种类型转换,一种是在演算时不必用户干预,系统自动展开的类型转换,如3+6.5.第2种是强制类型转换。当自动类型转换不能实现目的时,能用强制类型转换。如%操作符要求其两边均为整型量,若x为float型,则x%3不不合法,必须用(int)x%3,强制类型转换演算优先于%操作符,因而先展开(int)x的演算,得到两个整型的中间表达式,接着再对3求余,此外在表达式调用时,有时为了使实参与形参类型一致,能用强制类型转换操作符得到两个所需类型的参数。

6、C操作符

除微积分操作符外,C还提供其他操作符,共有以下几类:

运算符和表达式
运算符和表达式
运算符和表达式

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务