运算符和表达式

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

运算符和表达式

上课到这一课相隔了好长一段时间,这些日子里收到不少网友的来信支持和鼓励,要求尽快完成余下的部分。出门在外的人不得不先为吃饭而努力,似乎这也成为我的借口,以后每晚抽空打一些吧这样大家也就可以不用隔太久就能看到一些新东西。或许我的笔记并不是很正确,但我尽量的保证每课的实验都会亲自做一次,包括硬件的部分,已求不会误人子弟。

随着访问量不断的增加,网站已启用了https://www.360docs.net/doc/c818383379.html,的国际域名,在这里我感谢各位一直支持磁动力工作室的朋友,更要感激身在远方一直默默支持我的女友。

明浩2003-7-14 晚

呵,费话少说了。上两课说了常量和变量,先来补充一个用以重新定义数据类型的的语句吧。这个语句就是typedef,这是个很好用的语句,但我自己却不常用它,通常我定义变量的数据类型时都是使用标准的关键字,这样别人可以很方便的研读你的程序。如果你是个DELPHI编程爱好者或是程序员,你对变量的定义也许习惯了DELPHI的关键字,如int类型常会用关键字Integer来定义,在用C51时你还想用回这个的话,你可以这样写:

typedef int integer;

integer a,b;

这两句在编译时,其实是先把integer定义为int,在以后的语句中遇到integer就用int置换,integer就等于int,所以a,b也就被定义为int。typedef不能直接用来定义变量,它只是对已有的数据类型作一个名字上的置换,并不是产生一个新的数据类型。下面两句就是一个错误的例子:

typedef int integer;

integer = 100;

使用typedef可以有方便程序的移植和简化较长的数据类型定义。用typedef还可以定义结构类型,这一点在后面详细解说结构类型时再一并说明。typedef的语法是typedef 已有的数据类型新的数据类型名

运算符就是完成某种特定运算的符号。运算符按其表达式中与运算符的关系可分为单目运算符,双目运算符和三目运算符。单目就是指需要有一个运算对象,双目就要求有两个运算对象,三目则要三个运算对象。表达式则是由运算及运算对象所组成的具有特定含义的式子。C是一种表达式语言,表达式后面加";"号就构成了一个表达式语句。

赋值运算符

对于"="这个符号大家不会陌生的,在C中它的功能是给变量赋值,称之为赋值运算符。它的作用不用多说大家也明白,就是但数据赋给变量。如,x=10;由此可见利用赋值运

算符将一个变量与一个表达式连接起来的式子为赋值表达式,在表达式后面加";"便构成了赋值语句。使用"="的赋值语句格式如下:

变量= 表达式;

示例如下

a = 0xFF; //将常数十六进制数FF赋于变量a

b =

c = 33; //同时赋值给变量b,c

d = e; //将变量e的值赋于变量d

f = a+b; //将变量a+b的值赋于变量f

由上面的例子可以知道赋值语句的意义就是先计算出"="右边的表达式的值,然后将得到的值赋给左边的变量。而且右边的表达式可以是一个赋值表达式。

在一些朋友的来信中会出现"=="与"="这两个符号混淆的错误原码,问为何编译报错,往往就是错在if (a=x)之类的语句中,错将"="用为"=="。"=="符号是用来进行相等关系运算。

算术,增减量运算符

对于a+b,a/b这样的表达式大家都很熟悉,用在C语言中,+,/,就是算术运算符。C51中的算术运算符有如下几个,其中只有取正值和取负值运算符是单目运算符,其它则都是双目运算符:

+加或取正值运算符

-减或取负值运算符

*乘运算符

/除运算符

%取余运算符

算术表达式的形式:

表达式1算术运算符表达式2

如:a+b*(10-a), (x+9)/(y-a)

除法运算符和一般的算术运算规则有所不同,如是两浮点数相除,其结果为浮点数,如10.0/20.0所得值为0.5,而两个整数相除时,所得值就是整数,如7/3,值为2。像别的语言一样C的运算符与有优先级和结合性,同样可用用括号"()"来改变优先级。这些和我们小时候学的数学几乎是一样的,我也不必过多的说明了。

:(还有这么多运算符呀!暂时停一停吧,我们先来做一个实验吧。学习运算符和另外一些知识时,我们还是给我们的实验板加个串行接口吧。借助电脑转件直观的看单片机的输出结果,以后我还会用一些简单的实例讲解单片机和PC串口通讯的简单应用和编程。如果你用的是成品实验板或仿真器,那你就可以跳过这一段了。

在制作电路前我们先来看看要用的MAX232,这里我们不去具体讨论它,只要知道它是TTL和RS232电平相互转换的芯片和基本的引脚接线功能就行了。通常我会用

两个小功率晶体管加少量的电路去替换MAX232,可以省一点,效果也不错(如有兴趣可以查看https://www.360docs.net/doc/c818383379.html,网站中的相关资料)。下图就是MAX232的基本接线图。

图7-1MAX232

在上两课的电路的基础上按图7-3加上MAX232就可以了。这大热天的拿烙铁焊焊,还真的是热气迫人来呀:P串口座用DB9的母头,这样就可以用买来的PC串口延长线进行和电脑相连接,也可以直接接到电脑com口上。

图7-2DB9接头

图7-3加上了MAX232的实验电路

做好后我们就先用回第一课的"Hello World!"程序,用它来和你的电脑说声Hello!把程序烧到芯片上,把串口连接好。嘿嘿,这时要打开你的串口调试软件,没有就赶快到网上DOWN一个了。你会用Windows的超级中端也行,不过我从不用它。我用http: //https://www.360docs.net/doc/c818383379.html,的comdebug,它是个不错的软件,我喜欢它是因为它功能好而且还有"线路状态"功能,这对我制作小玩意时很有用。串口号,波特率调好,打开串口,单片机上电,就可以在接收区看到不断出现的"Hello World!"。一定要先打开软件的串口,再把单片机上电,否则可能因字符不对齐而看到乱码哦。

图7-4调试结果

第七课运算符和表达式(2)

关系运算符

对于关系运算符,同样我们也并不陌生。C中有六种关系运算符,这些家伙同样是在小时候学算术时学习过的:

>大于

<小于

>=大于等于

<=小于等于

==等于

!=等于

或者你是个非C程序员,那么对前四个一定是再熟悉不过的了。而"=="在VB或PASC AL等中是用"=","!="则是用"not "。由于工作关系我自己要使用好几种的程序语言,所以有时也会头晕搞错。老了咯:P

小学时的数学课就教授过运算符是有优先级别的,计算机的语言也不过是人类语言的一种扩展,这里的运算符同样有着优先级别。前四个具有相同的优先级,后两个也具有相同的优先级,但是前四个的优先级要高于后2个的。

当两个表达式用关系运算符连接起来时,这时就是关系表达式。关系表达式通常是用来判别某个条件是否满足。要注意的是用关系运算符的运算结果只有0和1两种,也就是逻辑的真与假,当指定的条件满足时结果为1,不满足时结果为0。

表达式1关系运算符表达式2

如:I<J,I==J,(I=4)>(J=3),J+I>J

借助我们在上一课做好的电路和学习了的相关操作。我们来做一个关系运算符相关的实例程序。为了增加学习的趣味性和生动性,不妨我们来假设在做一个会做算术的机器人,当然真正会思考对话的机器,我想我是做不出来的了,这里的程序只是用来学习关系运算符的基本应用。

#include

#include

void main(void)

{

int x,y;

SCON = 0x50; //串口方式1,允许接收

TMOD = 0x20; //定时器1定时方式2

TH1 = 0xE8; //11.0592MHz 1200波特率

TL1 = 0xE8;

TI = 1;

TR1 = 1; //启动定时器

while(1)

{

printf("您好!我叫Robot!我是一个会做算术的机器人!\n"); //显示

printf("请您输入两个int,X 和Y\n"); //显示

scanf("%d%d",&x,&y); //输入

if (x < y)

printf("X

else //当X不小于Y时再作判断

{

if (x == y)

printf("X=Y\n"); //当X等于Y时

else

printf("X>Y\n"); //当X大于Y时

}

}

}

要注意的是,在连接PC串口调试时。发送数字时,发送完一个数字后还要发送一个回车符,以使scanf函数确认有数据输入。Printf,scanf函数的具体用法,将和其它相关函数集中出现在https://www.360docs.net/doc/c818383379.html,的C51函数详解中,敬请大家留意。

逻辑运算符

关系运算符所能反映的是两个表达式之间的大小等于关系,那逻辑运算符则是用于求条件式的逻辑值,用逻辑运算符将关系表达式或逻辑量连接起来就是逻辑表达式了。也许你会对为什?quot;逻辑运算符将关系表达式连接起来就是逻辑表达式了"这一个描述有疑惑的地方。其实之前说过"要注意的是用关系运算符的运算结果只有0和1两种,也就是逻辑的真与假",换句话说也就是逻辑量,而逻辑运算符就用于对逻辑量运算的表达。至于复杂的逻辑量的运算法则我也知之甚少,如要了解的朋友可以参看数字电路的教科书、逻辑学或数学书,而之里只能说说简单常用的几种。逻辑表达式的一般形式为:

逻辑与:条件式1 && 条件式2

逻辑或:条件式1 || 条件式2

逻辑非: ! 条件式2

图7-5演示结果

逻辑与,说白了就是当条件式1"与"条件式2都为真时结果为真(非0值),否则为假(0值)。也就是说运算会先对条件式1进行判断,如果为真(非0值),则继续对条件式2进行判断,当结果为真时,逻辑运算的结果为真(值为1),如果结果不为真时,逻辑运算的结果为假(0值)。如果在判断条件式1时就不为真的话,就不用再判断条

件式2了,而直接给出运算结果为假。

逻辑或,是指只要二个运算条件中有一个为真时,运算结果就为真,只有当条件式都不为真时,逻辑运算结果才为假。

逻辑非则是把逻辑运算结果值取反,也就是说如果两个条件式的运算值为真,进行逻辑非运算后则结果变为假,条件式运算值为假时最后逻辑结果为真。

同样逻辑运算符也有优先级别,!(逻辑非)→&&(逻辑与)→||(逻辑或),逻辑非的优先值最高。

如有!True || False && True

按逻辑运算的优先级别来分析则得到(True代表真,False代表假)

!True || False && True

False || False && True //!Ture先运算得False

False || False //False && True运算得False

False //最终False || False得False

下面我们来用程序语言去有表达,如下:

#include

#include

void main(void)

{

unsigned char True = 1; //定义

unsigned char False = 0;

SCON = 0x50; //串口方式1,允许接收

TMOD = 0x20; //定时器1定时方式2

TH1 = 0xE8; //11.0592MHz 1200波特率

TL1 = 0xE8;

TI = 1;

TR1 = 1; //启动定时器

if (!True || False && True)

printf("True\n"); //当结果为真时

else

printf("False\n"); //结果为假时

}

大家可以使用以往学习的方法用keil或烧到片子上用串口调试。可以更改"!True || Fals e && True"这个条件式,以实验不同算法组合来掌握逻辑运算符的使用方法。

第七课运算符和表达式(3)

位运算符

学过汇编的朋友都知道汇编对位的处理能力是很强的,但是C语言也能对运算对象进行按位操作,从而使C语言也能具有一定的对硬件直接进行操作的能力。位运算符的作用是按位对变量进行运算,但是并不改变参与运算的变量的值。如果要求按位改变变量的值,则要利用相应的赋值运算。还有就是位运算符是不能用来对浮点型数据进行操作的。C51中共有6种位运算符。

位运算一般的表达形式如下:

变量1 位运算符变量2

位运算符也有优先级,从高到低依次是: "~"(按位取反)→"<<"(左移) →">>"(右移) →"&"(按位与)→"^"(按位异或)→"|"(按位或)

表7-1是位逻辑运算符的真值表,X表示变量1,Y表示变量2

X Y ~X ~Y X&Y X|Y X^Y

0 0 1 1 0 0 0

0 1 1 0 0 1 1

1 0 0 1 0 1 1

1 1 0 0 1 1 0

表7-1按位取反,与,或和异或的逻辑真值表

利用以前建立起来的实验板,我们来做个实验验证一下位运算是否真是不改变参与变量的值,同时学习位运算的表达形式。程序很简单,用P1口做运算变量,P1.0-P1.7对应P1变量的最低位到最高位,通过连接在P1口上的LED我们便可以直观看到每个位运算后变量是否有改变或如何改变。程序如下:

#include

void main(void)

{

unsigned int a;

unsigned int b;

unsigned char temp; //临时变量

P1 = 0xAA; //点亮D1,D3,D5,D7 P1口的二进制为10101010,为0时点亮LED

for (a=0;a<1000;a++)

for (b=0;b<1000;b++); //延时

temp = P1 & 0x7; //单纯的写P1|0x7是没有意义的,因为没有变量被影响,不会被编译

//执行P1|0x7后结果存入temp,这时改变的是temp,但P1不会被影响。

//这时LED没有变化,仍然是D1,D3,D5,D7亮

for (a=0;a<1000;a++)

for (b=0;b<1000;b++); //延时

P1 = 0xFF; //熄灭LED

for (a=0;a<1000;a++)

for (b=0;b<1000;b++); //延时

P1 = 0xAA; //点亮D1,D3,D5,D7 P1口的二进制为10101010,为0时点亮LED

for (a=0;a<1000;a++)

for (b=0;b<1000;b++); //延时

P1 = P1 & 0x7; //这时LED会变得只有D2灭

//因为之前P1=0xAA=10101010

//与0x7位与0x7=00000111

//结果存入P1 P1=00000010 //位为O时点亮LED,电路看第三课

for (a=0;a<1000;a++)

for (b=0;b<1000;b++); //延时

P1 = 0xFF; //熄灭LED

while(1);

//大家可以根据上面的程序去做位或,左移,取反等等。

}

复合赋值运算符

复合赋值运算符就是在赋值运算符"="的前面加上其他运算符。以下是C语言中的复合赋值运算符:

+=加法赋值>>=右移位赋值

-=减法赋值&=逻辑与赋值

*=乘法赋值|=逻辑或赋值

/= 除法赋值^=逻辑异或赋值

%=取模赋值-=逻辑非赋值

<<= 左移位赋值

复合运算的一般形式为:

变量复合赋值运算符表达式

其含义就是变量与表达式先进行运算符所要求的运算,再把运算结果赋值给参与运算的变量。其实这是C语言中一种简化程序的一种方法,凡是二目运算都可以用复合赋值运算符去简化表达。例如:

a+=56等价于a=a+56

y/=x+9 等价于y=y/(x+9)

很明显采用复合赋值运算符会降低程序的可读性,但这样却可以使程序代码简单

化,并能提高编译的效率。对于初学C语言的朋友在编程时最好还是根据自己的理解力和习惯去使用程序表达的方式,不要一味追求程序代码的短小。

逗号运算符

如果你有编程的经验,那么对逗号的作用也不会陌生了。如在VB中"Dim a,b,c"的逗号就是把多个变量定义为同一类型的变量,在C也一样,如"int a,b,c",这些例子说明逗号用于分隔表达式用。但在C语言中逗号还是一种特殊的运算符,也就是逗号运算符,可以用它将两个或多个表达式连接起来,形成逗号表达式。逗号表达式的一般形式为:

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

这样用逗号运算符组成的表达式在程序运行时,是从左到右计算出各个表达式的值,而整个用逗号运算符组成的表达式的值等于最右边表达式的值,就是"表达式n"的值。在实际的应用中,大部分情况下,使用逗号表达式的目的只是为了分别得到名个表达式的值,而并不一定要得到和使用整个逗号表达式的值。要注意的还有,并不是在程序的任何位置出现的逗号,都可以认为是逗号运算符。如函数中的参数,同类型变量的定义中的逗号只是用来间隔之用而不是逗号运算符。

条件运算符

上面我们说过C语言中有一个三目运算符,它就是"?:"条件运算符,它要求有三个运算对象。它可以把三个表达式连接构成一个条件表达式。条件表达式的一般形式如下: 逻辑表达式? 表达式1 : 表达式2

条件运算符的作用简单来说就是根据逻辑表达式的值选择使用表达式的值。当逻辑表达式的值为真时(非0值)时,整个表达式的值为表达式1的值;当逻辑表达式的值为假(值为0)时,整个表达式的值为表达式2的值。要注意的是条件表达式中逻辑表达式的类型可以与表达式1和表达式2的类型不一样。下面是一个逻辑表达式的例子。

如有a=1,b=2这时我们要求是取ab两数中的较小的值放入min变量中,也许你会这样写:

if (a

min = a;

else

min = b; //这一段的意思是当a

用条件运算符去构成条件表达式就变得简单明了了:

min = (a

很明显它的结果和含意都和上面的一段程序是一样的,但是代码却比上一段程序少很多,编译的效率也相对要高,但有着和复合赋值表达式一样的缺点就是可读性相对效差。在实际应用时根据自己要习惯使用,就我自己来说我喜欢使用较为好读的方式和加上适当的注解,这样可以有助于程序的调试和编写,也便于日后的修改读写。

指针和地址运算符

在第四课我们学习数据类型时,学习过指针类型,知道它是一种存放指向另一个数据的地址的变量类型。指针是C语言中一个十分重要的概念,也是学习C语言中的一个难点。对于指针将会在第九课中做详细的讲解。在这里我们先来了解一下C语言中提供的两个专门用于指针和地址的运算符:

*取内容

&取地址

取内容和地址的一般形式分别为:

变量= * 指针变量

指针变量= & 目标变量

取内容运算是将指针变量所指向的目标变量的值赋给左边的变量;取地址运算是将目标变量的地址赋给左边的变量。要注意的是:指针变量中只能存放地址(也就是指针型数据),一般情况下不要将非指针类型的数据赋值给一个指针变量。

下面来看一个例子,并用一个图表和实例去简单理解指针的用法和含义。

设有两个unsigned int 变量ABC处CBA 存放在0x0028,0x002A中

另有一个指针变量portA 存放在0x002C中

那么我们写这样一段程序去看看*,&的运算结果

unsigned int data ABC _at_ 0x0028;

unsigned int data CBA _at_ 0x002A;

unsigned int data *Port _at_ 0x002C;

#include

#include

void main(void)

{

SCON = 0x50; //串口方式1,允许接收

TMOD = 0x20; //定时器1定时方式2

TH1 = 0xE8; //11.0592MHz 1200波特率

TL1 = 0xE8;

TI = 1;

TR1 = 1; //启动定时器

ABC = 10; //设初值

CBA = 20;

Port = &CBA; //取CBA的地址放到指针变量Port

*Port = 100; //更改指针变量Port所指向的地址的内容

printf("1: CBA=%d\n",CBA); //显示此时CBA的值

Port = &ABC; //取ABC的地址放到指针变量Port

CBA = *Port; //把当前Port所指的地址的内容赋给变量CBA

printf("2: CBA=%d\n",CBA); //显示此时CBA的值

printf(" ABC=%d\n",ABC); //显示ABC的值

}

程序初始时

值地址说明

0x00 0x002DH

0x00 0x002CH

0x00 0x002BH

0x00 0x002AH

0x0A 0x0029H

0x00 0x0028H

执行ABC = 10;向ABC所指的地址0x28H写入10(0xA),因ABC是int类型要占用0x 28H和0x29H两个字节的内存空间,低位字节会放入高地址中,所以0x28H中放入0x 00,0x29H中放入0x0A

值地址说明

0x00 0x002DH

0x00 0x002CH

0x00 0x002BH

0x00 0x002AH

0x0A 0x0029H ABC为int类型占用两字节

0x00 0x0028H

执行CBA = 20;原理和上一句一样

值地址说明

0x00 0x002DH

0x00 0x002CH

0x14 0x002BH CBA为int类型占用两字节

0x00 0x002AH

0x0A 0x0029H ABC为int类型占用两字节

0x00 0x0028H

执行Port = &CBA; 取CBA的首地址放到指针变量Port 值地址说明

0x00 0x002DH

0x2A 0x002CH CBA的首地址存入Port

0x14 0x002BH

0x00 0x002AH

0x0A 0x0029H

0x00 0x0028H

*Port = 100; 更改指针变量Port所指向的地址的内容

值地址说明

0x00 0x002DH

0x2A 0x002CH

0x64 0x002BH Port指向了CBA所在地址2AH

0x00 0x002AH 并存入100

0x0A 0x0029H

0x00 0x0028H

其它的语句也是一样的道理,大家可以用Keil的单步执行和打开存储器查看器一看,这样就更容易理解了。

图7-6存储器查看窗

图7-7在串行调试窗口的最终结果

sizeof运算符

看上去这确实是个奇怪的运算符,有点像函数,却又不是。大家看到size应该就猜到是和大小有关的吧?是的,sizeof是用来求数据类型、变量或是表达式的字节数的一个运算符,但它并不像"="之类运算符那样在程序执行后才能计算出结果,它是直接在编译时产生结果的。它的语法如下:

sizeof (数据类型)

sizeof (表达式)

下面是两句应用例句,程序大家可以试着编写一下。

printf("char是多少个字节? %bd 字节\n",sizeof(char));

printf("long是多少个字节? %bd 字节\n",sizeof(long));

结果是:

char是多少个字节? 1字节

long是多少个字节? 4字节

强制类型转换运算符

不知你们是否有自己去试着编一些程序,从中是否有遇到一些问题?初学时我就遇到过这样一个问题:两个不同数据类型的数在相互赋值时会出现不对的值。如下面的一段小程序:

void main(void)

{

unsigned char a;

unsigned int b;

b=100*4;

a=b;

while(1);

}

这段小程序并没有什么实际的应用意义,如果你是细心的朋友定会发现a的值是不会等于100*4的。是的a和b一个是char类型一个是int类型,从以前的学习可知char只占一个字节值最大只能是255。但编译时为何不出错呢?先来看看这程序的运行情况:

图7-8小程序的运行情况

b=100*4就可以得知b=0x190,这时我们可以在Watches查看a的值,对于watches 窗口我们在第5课时简单学习过,在这个窗口Locals页里可以查看程序运行中的变量的值,也可以在watch页中输入所要查看的变量名对它的值进行查看。做法是按图中1的watch#1(或watch#2),然后光标移到图中的2按F2键,这样就可以输入变量名了。在这里我们可以查看到a的值为0x90,也就是b的低8位。这是因为执行了数据类型的隐式转换。隐式转换是在程序进行编译时由编译器自动去处理完成的。所以有必要了解隐式转换的规则:

1.变量赋值时发生的隐式转换,"="号右边的表达式的数据类型转换成左边变量的数据类型。就如上面例子中的把INT赋值给CHAR字符型变量,得到的CHAR将会是INT的低8位。如把浮点数赋值给整形变量,小数部分将丢失。

2.所有char型的操作数转换成int型。

3.两个具有不同数据类型的操作数用运算符连接时,隐式转换会按以下次序进行:如有一操作数是float类型,则另一个操作数也会转换成float类型;如果一个操作数为long类型,另一个也转换成long;如果一个操作数是unsigned类型,则另一个操作会被转换成unsigned类型。

从上面的规则可以大概知道有那几种数据类型是可以进行隐式转换的。是的,在C51中只有char,int,long及float这几种基本的数据类型可以被隐式转换。而其它的数据类型就只能用到显示转换。要使用强制转换运算符应遵循以下的表达形式:

(类型) 表达式

用显示类型转换来处理不同类型的数据间运算和赋值是十分方便和方便的,特别对指针变量赋值是很有用的。看一面一段小程序:

#include

#include

void main(void)

{

char xdata * XROM;

char a;

int Aa = 0xFB1C;

long Ba = 0x893B7832;

float Ca = 3.4534;

SCON = 0x50; //串口方式1,允许接收

TMOD = 0x20; //定时器1定时方式2

TH1 = 0xE8; //11.0592MHz 1200波特率

TL1 = 0xE8;

TI = 1;

TR1 = 1; //启动定时器

XROM=(char xdata *) 0xB012; //给指针变量赋XROM初值

*XROM = 'R'; //给XROM指向的绝对地址赋值

a = *((char xdata *) 0xB012); //等同于a = *XROM

printf ("%bx %x %d %c \n",(char) Aa, (int) Ba,(int)Ca, a);//转换类型并输出

while(1);

}

程序运行结果:1c 7832 3 R

在上面这段程序中,可以很清楚到到各种类型进行强制类型转换的基本用法,程序中先在外部数据存储器XDATA中定义了一个字符型指针变量XROM,当用XROM= (char xdata *) 0xB012这一语句时,便把0xB012这个地址指针赋于了XROM,如你用XROM则会是非法的,这种方法特别适合于用标识符来存取绝对地址,如在程序前用# define ROM 0xB012这样的语句,在程序中就可以用上面的方法用ROM对绝对地址0 xB012进行存取操作了。

在附录三中运算符的优先级说明。

在这课的完结后,C语言中一些数据类型和运算规律已基本学习完了,下一课会开始讲述语法,函数等。

C语言试题:数据类型、运算符与表达式

3 数据类型、运算符与表达式 一、单项选择题 1、以下选项中,不正确的 C 语言浮点型常量是( C )。 A. 160. B. 0.12 C. 2e4.2 D. 0.0 分析:e 后面的指数必须为整数。 2、以下选项中,( D )是不正确的 C 语言字符型常量。 A. 'a' B. '\x41' C. '\101' D. "a" 分析:在C 语言中,’a ’表示字符常量,”a ”表示字符串。 3、 在 C 语言中,字符型数据在计算机内存中,以字符的(C )形式存储。 A.原码 B.反码 C. ASCII 码 D. BCD 码 分析:将一个字符常量放入一个字符变量中,实际上并不是将字符本身放到内存单元中,而是将字符的对应的ASCII 码放到储存单元中。 4、若x 、i 、j 和k 都是int 型变量,则计算下面表达式后,x 的值是( C )。 x=(i=4,j=16,k=32) A. 4 B. 16 C.32 D.52 分析:(i=4,j=16,k=32)的值为最后一个表达式的值,即为32,所以x=32. 5、算术运算符、赋值运算符和关系运算符的运算优先级按从高到低依次为(B )。 A. 算术运算、赋值运算、关系运算 B. 算术运算、关系运算、赋值运算 C. 关系运算、赋值运算、算术运算 D. 关系运算、算术运算、赋值运算 分析:算术运算符包括加法运算“+”符减法运算“-”符乘法运算符“*”以及除法运算符“/”,赋值运算符包括“=、+=、-=、*=、/=、……”,关系运算符包括“<、<=、>、>=”。 6、若有代数式bc ae 3 ,则不正确的C 语言表达式是( C )。 A.a/b/c*e*3 B. 3*a*e/b/c C.3*a*e/b*c D. a*e/c/b*3 分析:C 选项表达的是3ace/b 。 7、表达式!x||a==b 等效于( D )。 A. !((x||a)==b) B. !(x||y)==b C. !(x||(a==b)) D. (!x)||(a==b) 分析:由符优先级先后顺序在!x||a==b 中应先算“||”再算“!”,最后算“==”。选项B 不影响运算顺序。 8、设整型变量 m,n,a,b,c,d 均为1,执行 (m=a>b)&&(n=c>d)后, m,n 的值是( A )。 A. 0,0 B. 0,1 C. 1,0 D. 1,1 分析:先算括号里面的,a 不大于b ,则m=0,c 不大于d ,则n=0. 9、 设有语句 int a=3;,则执行了语句 a+=a-=a*=a;后,变量 a 的值是( B )。 A. 3 B. 0 C. 9 D. -12 分析:从后往前算,a*=a 即a=a*a ,a=9;然后a-=a=9,a=a-9,=0;a+=0,a=a+a=0. 10、在以下一组运算符中,优先级最低的运算符是( D )。

运算符与表达式练习题附答案

1. 以下运算符中优先级最高的是()。 A.&&B.+ C.!= D.?: 2.能正确表示逻辑关系:“a≥10或a≤0”的C语言表达式是()。 A.a>=10 or a<=0 B.a>=10| a<=0 C.a>=10 && a<=0 D.a>=10||a<=0 3. C语言中运算对象必需是整型的运算符是()。(A)+ (B)/ (C)% (D)* 4. 已知int i;float f;正确的表达式是()。 A)(int f)%i B) int(f)%i C) int(f % i) D) (int)f % i 5. 下列程序的输出结果是()。 void main( ) { int a=7,b=5; printf("%d\n",b=b%a); } (A)0 (B)1 (C)5 (D)不确定值6. 若有定义:int a=8,b=5,c;,执行语句c=a/b+0.4;

后,c的值为()。 (A)1.4 (B)1 (C)2.0 (D)2 7. 已知x=4.5,y=2.5,求表达式(x+y)/2+(int)y%(int)x的值()。 A) 3 B) 5 C) 3.5 D) 5.5 8. 已知各变量的类型如下 int i=8,k,a,b; unsigned long w=5; double x=1.42,y=5.2; 则以下符合C语言语法的表达式是()。 (A)a+=a-=(b=4)*(a=3)(B)a=a*3+2 (C)x%(-3)(D)y=float(i) 9. 已知int a,b;执行语句a=(b=3*2,b*4),a+6;后变量a的值为()。 A) 6 B) 12 C) 24 D)30 10. 若有以下程序 main() { int k=2,i=2,m; m=(k+=i*=k);

作业━━第 1 章(2)━━运算符与表达式

运算符与表达式 【学习要点】 1.掌握运算符的目数、优先级、结合性等概念。 2.掌握算术运算及其应用。 3.掌握自增、自减运算及其应用。 4.掌握关系、逻辑运算及其应用。 5.掌握位运算及其应用。 6.掌握赋值、复合赋值运算及其应用,掌握赋值兼容时的类型转换。 7.掌握表达式求值时类型的自动转换和强制转换。 8.掌握表达式的组成,掌握逻辑表达式的优化及其副作用。 9.掌握逗号运算符、sizeof运算符、条件运算符及其应用。 ------------------------------------------------------------------------------------------------------------------------------------------------- 【例题分析】 1.若int x,y,z;下列表达式中运算结果与x=y=24相同的是______。 A.x=(y=z=8,4*6) B.x=y=(z=8,4*6) C.x=y=z=8,4*6 D.x=(y=z=8),4*6 【答案】B 【解析】 ①C++语言的赋值运算有别于其它高级语言,逗号运算又是其它高级语言所没有的。 ②在赋值表达式中,可以有多个赋值运算符,计算顺序自右向左,运算优先级低,仅高于逗号运算符。 ③逗号既是分隔符,又是运算符,可以用一个逗号运算符或多个逗号运算符将多个表达式连接成逗号表达式,计算顺序自左向右,并将最后一个表达式的值作为整个逗号表达式的值,逗号运算优先级最低。 2.若int i=6,k=0;下列表达式中运算结果使k=7的是______。 A.k=i+++k B.k=k+i++ C.k=++i+k D.k=k+++i 【答案】C 【解析】 ①自增++、自减--运算符是C++语言特有的。 ②运算符++、--出现在变量的前面或后面,其运算结果是不同的。若++、--出现在变量前,则先将变量的值加1(或减1)后,再将变量的值参加运算;反之则先将变量的值参加运算,再将变量的值加1(或减1)。 ③自增、自减运算符的优先级高于算术运算符,因此对于k=i+++k:解释为i++,再加k;对于k=k+++i:解释为k++,再加i。 3.表达式‘A’+’B’+20的值是______。 【答案】151 【解析】不同类型的数据混合运算时,系统可以自动进行类型转换,将表示范围小的数据类型转换成另一操作数的相同类型后再参与运算,则转换为65+66+20=151。 4.若int e=8;double f=6.4,g=8.9;则f+int(e/3*int(f+g)/2)%4的值是______。 【答案】9.4 【解析】 ①不同类型的数据混合运算时,可以使用强制类型转换符,将一种数据类型强制转换成另一种数据类型后再参与运算。 ②表达式中:e/3的值是整型数2,int(f+g)的值是整型数15,int(e/3*int(f+g)/2)的值是整型数15,15%4的值是整型数3,最后加上实型数f,得到最终值是实型数9.4。 1

(完整word版)C语言运算符与表达式的练习题答案

C语言运算符与表达式的练习题 单项选择题 (1)以下选项中,正确的 C 语言整型常量是(D)。 A. 32L B. 510000 C. -1.00 D. 567 (2)以下选项中,(D)是不正确的 C 语言字符型常量。 A. 'a' B. '\x41' C. '\101' D. "a" (3)字符串的结束标志是(C)。 A. 0 B. '0' C. '\0' D. "0" (4)算术运算符、赋值运算符和关系运算符的运算优先级按从高到低依次为(B)。 A. 算术运算、赋值运算、关系运算 B. 算术运算、关系运算、赋值运算 C. 关系运算、赋值运算、算术运算 D. 关系运算、算术运算、赋值运算 (5)逻辑运算符中,运算优先级按从高到低依次为(D)。 A. && ! || B. || && ! C. && || ! D. ! && || (6)表达式!x||a==b 等效于(D)。 A. !((x||a)==b) B. !(x||y)==b C. !(x||(a==b)) D. (!x)||(a==b) (7)设整型变量 m,n,a,b,c,d 均为1,执行 (m=a>b)&&(n=c>d)后, m,n 的值是(A)。 A. 0,0 B. 0,1 C. 1,0 D. 1,1 *(8)设有语句 int a=3;,则执行了语句 a+=a-=a*=a; 后,变量 a 的值是(B)。 A. 3 B. 0 C. 9 D. -12 (9)在以下一组运算符中,优先级最低的运算符是(D)。 A. * B. != C. + D. = (10)设整型变量 i 值为2,表达式(++i)+(++i)+(++i)的结果是(B,上机13)。 A. 6 B. 12 C. 15 D. 表达式出错 (11)若已定义 x 和 y为double 类型,则表达式的值是(D)。

C语言运算符与表达式的练习题

C语言运算符与表达式的练习题 (作业写到纸质作业本上,在规定时间内交给助教批阅,不要 再网上提交) 一、单项选择题 (1) 以下选项中,正确的C 语言整型常量是。 A. 32L B. 510000 C. -1.00 D. 567 (2) 以下选项中,是不正确的C 语言字符型常量。 A. 'a' B. '\x41' C. '\101' D. "a" (3) 在C 语言中,字符型数据在计算机内存中,以字符 的形式存储。 A. 原码 B. 反码 C. ASCII 码 D. BCD码 (4) 字符串的结束标志是。 A. 0 B. '0' C. '\0' D. "0" (5) 算术运算符、赋值运算符和关系运算符的运算优先级按 从高到低依次为。 A. 算术运算、赋值运算、关系运算 B. 算术运算、关系运 算、赋值运算

C. 关系运算、赋值运算、算术运算 D. 关系运算、算术运算、赋值运算 (6) 逻辑运算符中,运算优先级按从高到低依次为。 A. &&,!,|| B. ||,&&,! C. &&,||,! D. !,&&,|| (7) 表达式!x||a==b 等效于。 A. !((x||a)==b) B. !(x||y)==b C. !(x||(a==b)) D. (!x)||(a==b) (8) 设整型变量m,n,a,b,c,d 均为1,执行(m=a>b)&&(n=c>d)后, m,n 的值是。 A. 0,0 B. 0,1 C. 1,0 D. 1,1 (9) int b=0,x=1;执行语句if(x++) b=x+1; 后,x,b 的值依次为。 A. 2,3 B. 2,0 C. 3,0 D. 3,2 (10) 设有语句int a=3;,则执行了语句a+=a-=a*=a; 后,变量 a 的值是。 A. 3 B. 0 C. 9 D. -12 (11) 在以下一组运算符中,优先级最低的运算符是。 A. * B. != C. + D. =

数据类型、运算符与表达式练习题一

学校_____________ 专业班级 学号 姓名 装订线 密封线内不得答题 装订线 密封线内不得答题 装订线 安居职业中学高2012年信息类专业试卷 第 1 页 共 2页页 数据类型、运算符与表达式练习题一 一、选择题 1.设有如下变量声明:Dim TestDate As Date 为变量TestDate 正确赋值的表达方式是________。 A) TestDate = #1/1/2002# B) TestDate = #”1/1/2002”# C) TestDate = date(“1/1/2002”) D) TestDate = Format(“m/d/yy”,”1/1/2002”) 2.下列符号中不能作为VB 中变量名的是________。 A) ABCD B) E0065700 C) 123TWDFF D) zxy 3.如果将布尔常量值True 赋值给一个整型变量,则整型变量的值为________。 A) 0 B) –1 C) True D) False 4.下列符号常量的声明中,________是不合法的。 A) Const a As Single = 1.1 B) Const a As Integer = “12” C) Const a As Double = sin(1) D) Const a = “OK” 5.四个字符是”E”,”y”,”B”,”8”的ASCII 码值最大的是 ________。 A) ”E” B) ”y” C) ”B” D) ”8” 6.下列________是字符型常量。 A) ”I am a student” B) ’江苏南京’ C) #02/25/1999# D) 123# 7.下列________是日期型常量。 A) ”I am a student” B) ’江苏南京’ C) #02/25/1999# D) 123# 8.下列________是双精度型变量。 A) AAA% B) BBB$ C) CCC! D) DDD# 9.可以同时删除字符串前导和尾部空白的函数是________。 A) Ltrim B) Rtrim C) Trim D) Mid 10.设有如下变量声明:Dim X As Integer 如果Sgn(X)的值为-1,则X 的值是________。 A) 整数 B) 大于0的整数 C) 等于0的整数 D) 小于0的整数 11.从键盘上输入两个字符串,分别保存在变量str1、str2中。确定第二个字符串在第一 个字符串中起始位置的函数是________。 A) Left B) Mid C) String D) Instr 12.设a=”Visual Basic”,下面使b=”Basic”的语句是________。 A) b = Left(a,8,12) B) b = Mid(a,8,5) C) b = Right(a,5,5) D) b = Left(a,8,5) 13.表达式Left(”Today is Monday”,3)的值是________。 A) Tod B) Mon C) Today D) Monday 14.表达式Abs(-9)+Len(”I am a teacher”)的值是________。 A) 9 I am a teacher B) –9 I am a teacher C) 23 D) 出错 15.在窗体上画一个名称为Command1的命令按钮,然后编写如下程序 Private Sub Command1_Click() Static x As Integer Static y As Integer Cls y=1 y=y+5 x=5+x Print x,y End Sub 程序运行时,三次单击命令按钮Command1后,窗体上显示的结果为________。 A) 15 16 B) 15 6 C) 15 15 D) 5 6 16.函数Int(Rnd(0)*100)是在________范围内的整数。 A) (0 , 1) B) (0 , 100) C) (1 , 100) D) (1 , 90) 17.函数InStr(”China”, ”in”)的值是________。 A) 1 B) 2 C) 3 D) 4 18.将变量k 四舍五入保留2位小数的表达式是________。 A) Int((k+0.5)*100)/100 B) Int(k*100)/100+0.5 C) Int(k*100+0.5)/100 D) Int(k*(100+0.5))/100 19. ”x 是小于105的非负数”,用VB 表达式表示正确的是________。 A) 0<=x<105 B) 0<=x<105

[java入门学习]第 3 章 运算符和表达式.

第 3 章运算符和表达式 运算符指明对操作数所进行的运算。按操作数的数目来分,可以有一元运算 符 (如 ++、--,二元运算符(如 +、>和三元运算符 (如?:,它们分别对应于一个、两个和三个操作数。对于一元运算符来说 ,可以有前缀表达式 (如++i 和后缀表达式 (如 i++,对于二元运算符来说则采用中缀表达式(如a+b。按照运算符功能来分,基本的运算符有下面几类 : 1.算术运算符 (+,-,*,/,%,++,-- 2.关系运算符 (>,<,>=,<=,==,!= 3.布尔逻辑运算符 (!,&&,|| 4.位运算符 (>>,<<,>>>,&,|,^,~ 5.赋值运算符 (=,及其扩展赋值运算符如+= 6.条件运算符 ( ?: 7.其它 (包括分量运算符·,下标运算符 [],实例运算符 instance of,内存分配运算符new,强制类型转换运算符(类型,方法调用运算符 ( 等 本章中我们主要讲述前6类运算符。 § 3.1算术运算符 算术运算符作用于整型或浮点型数据 ,完成算术运算。 一、二元算术运算符 如下表所示运算符用法描述 + op1+op2 加 - op1-op2 减 * op1*op2 乘 / op1/op2 除 % op1%op2 取模(求余

Java对加运算符进行了扩展,使它能够进行字符串的连接 ,如 "abc"+"de",得到 串 "abcde"。我们将在第七章中讲解。与C、 C++不同,对取模运算符%来说,其操作数可以为浮点数, 如 37.2%10=7.2。 二、一元算术运算符 如下表所示 : 运算符用法描述 + +op 正值 - -op 负值 ++ ++op,op++ 加1 -- --op,op-- 减1 i++与 ++i的区别 i++在使用i之后,使 i的值加 1,因此执行完 i++后,整个表达式的值为 i,而 i的值变为 i+1。 ++i在使用i之前,使 i的值加 1,因此执行完 ++i后 ,整个表达式和 i的值均为 i+1。 对 i--与 --i同样。 例 3.1.下面的例子说明了算术运算符的使用 public class ArithmaticOp{ public static void main( String args[] { int a=5+4; //a=9 int b=a*2; //b=18 int c=b/4; //c=4 int d=b-c; //d=14 int e=-d; //e=-14 int f=e%4; //f=-2 double g=18.4;

实验二 运算符和表达式

实验二运算符和表达式 实验时间:2010年10月8日 【实验目的】 1、掌握C语言各种基本数据类型的定义和表示方法; 2、掌握变量的定义、赋值方法; 3、掌握基本运算符的功能及其应用; 4、掌握基本运算符的优先级和结合性; 5、掌握表达式的概念及运算规则; 6、掌握常用数据类型的转换规则。 【实验内容】 1、常用基本数据类型的存储长度,求字节运算符的使用; 2、运算符及其表达式的应用; 3、数据类型的自动转换与强制转换。 【实验步骤】 一、在E或F盘上建立以自己的学号命名的文件夹。 二、内容与步骤 1、求字节运算符的使用 利用sizeof()函数,了解C语言各种数据类型所占用的存储空间大小,将编写的源程 2、写出下列程序运行的结果 ⑴、/*ex2_2.c*/ #include #define PRICE 12.5 main() { int num=3; float total; char ch1,ch2=…D?; total=num*PRICE; ch1=ch2-…A?+…a?; printf(“total=%f,ch1=%c\n”,total,ch1); } ⑵、/*ex2_3.c*/ # include main()

{ int i, j, k; int m, n, p; i = 8; j = 10; k = 12; /* 自增在操作数之前*/ m = ++i; printf("i = %d\n", i); printf("m = %d\n", m); /* 自减在操作数之后*/ n = j--; printf("j = %d\n", j); printf("n = %d\n", n); /* 自增、自减的混合运算*/ p = (++m)*(n++)+(--k); printf("k = %d\n", k); printf("p = %d\n", p); } 3、运算符的优先级别和结合性:请写出下列程序运行的结果,并进行分析。/*ex2_4.c*/ #include Main() { int x,y,z; x=y=z=-1; ++x&&++y||++z; printf(“x=%d\ty=%d\tz=%d\n”,x,y,z); /*”\t”为按横向跳格格式输出*/ x=y=z=-1; ++x||++y&&++z; printf(“x=%d\ty=%d\tz=%d\n”,x,y,z); x=y=z=-1; ++x&&++y&&++z; printf(“x=%d\ty=%d\tz=%d\n”,x,y,z); } 4、位运算符的使用 位运算符C语言提供了六种位运算符:

VB中的运算符与表达式

3 Visual Basic中的运算符与表达式 3.1 算术运算符与算术表达式 (1)算术运算符 算术运算符包括(按优先级从高到低排列):指数(∧)、取负(-)、乘法(*)、浮点数相 除(/)、整除(\)、取模(Mod)、加法(+)、减法(-)等8个。 说明:取模运算符Mod用来求整除的余数,若表达式为34.56Mod6.67,则运算时首 先把34.56和6.67分别取整为35和7,计算结果为0. (2)算术表达式书写规则 ※所有括号都只能用圆括号,且括号必须配对。 3.2 字符串运算符与字符串表达式 字符串运算符:“&”和“+”(功能都是将两个字符串连接起来组成新的字符串) “+”的运算规则:“+”号两边的运算对象应都是字符型数据,如果两边都是 数值型数据则为算术加法运算;如果一个为数值型字符,另一个为数值型, 则自动将数字字符转换为数值,然后进行算术运算;若一个为非数字字符型, 另一个为数值,则系统出错。 “&”的运算规则:不论“&”号两边的运算对象是否哪种类型,系统都先将运 算对象转变为字符型数据,然后再进行连接运算。 字符串表达式 字符串表达式由字符串常量、字符串变量、字符串函数和字符串运算符按语法规则组合而成。 3.3 日期表达式 日期表达式由“+”、“-”、算术表达式、日期型数据和日期型函数所组成。 两个日期型数据相减,结果为数值型数据(两个日期相差的天数)。 一个表示天数的数值型数据可以被加(或减)到一个日期型数据中,其结果仍 然是一个日期型数据。 3.4 关系运算符 关系运算符用于对两个表达式的值进行比较,返回逻辑值——真(True)或假(False)。

03填空题(运算符与表达式)

2.2 填空题 (191)&运算符作为单目运算符时表示的是____运算;作为双目运算符时表示的是_____运算。 (192)请计算sizeof的值: char str[] = "Hello" ; char *p = str ; int n = 10; 请计算 sizeof (str ) = ____ sizeof ( p ) = _____ sizeof ( n ) = ______ (193)请计算sizeof的值: void Func ( char str[100]) { // 请计算 sizeof( str ) = _____ } (194)请计算sizeof的值: void *p = malloc( 100 ); // 请计算 sizeof ( p ) = ______ (195)下列程序段的输出是_______。 #define f(a, b, x) a*x+b printf("%d, %d\n", f(3,2,1), f(6, 5, f(3, 2, 1))); (196)下列程序段的输出是_____。 main() { int k; for(k=1; k<5; k++) { if(k % 2) printf("*"); else continue; printf("#"); } } (197)下列程序段的输出是_____。 int *p, *q, k=5, j=6; q=&k; p=q;

q=&j; printf("%d", *p); (198)设有语句int a=3;则执行了语句a+=a-=a*a;后,变量a的值是____。 (199)下面程序的输出是_________。 V oid main(void) { int a = 2; printf("%d %d %d\n", a, ++a, a--); } (200)有int i, j, k; 则表达式i=1,j=2,k=3, i&&j&k 的值为______。 (201)设y是int型变量,请写出判断y为非法的关系表达______。 (202)若已定义:int a[10], i;,以下fun函数的功能是:在第一个循环中给前10个数组元素依次赋1、2、3、4、5、6、7、8、9、10;在第二个循环中使a数组前10个元素中的值对称折叠,变成1、2、3、4、5、5、4、3、2、1。请填空。 fun(int a[ ]) { int i; for(i=1; i<=10; i++) _____ = i; for(i=0; i<5; i++) ______ = a[i]; } (203)设ch是字符型变量,判断ch为英文字母的表达式是______。 (204)下列程序段的输出结果是______。 printf("%xn", (0x19 <<1) & 0x17); (205)表示x≥y≥z的C表达式是_______。 (206)下列程序段的输出是______。 printf("%on", 010<<1^1); (207)下列程序段的输出是______。 int k; float s; for (k=0, s=0; k<7; k++) { s += k/2; } printf("%d, %fn", k, s); (208)设x和y均为int型变量,且x=1,y=2,则表达式1.0+x/y的值为_____________。

运算符和表达式教案

QBASIC语言程序设计之 运算符和表达式 科目:计算机 授课人:赵华 时间:2007年10月

《运算符和表达式》教案 教学目标: 1、识记运算符的分类及表达式的定义。 2、掌握算术运算符的运算规则。 3、掌握QBASIC表达式的书写规则。 4、掌握算术表达式的求值方法。 教学重点: 1、掌握算术运算符的运算规则。 2、掌握算术表达式的求值方法。 教学难点: 1、掌握算术运算符的运算规则。 2、掌握算术表达式的求值方法。 课前巩固: 1、函数SQR(X)的功能是什么?(举例介绍) 2、函数INT(X)的功能是什么?(举例介绍) 教学内容: 一、运算符的分类 运算符表示对数据进行的具体运算。在QBASIC中分为四类:算术运算符、字符串运算符、关系运算符、逻辑运算符本节我们重点学习算术运算符和算术表达式的有关内容。 二、算术运算符 1、种类: 2、运算规则: ①^ 是乘方运算符: 例如:6^2就表示数学上的62,其值等于36。 2^-2就表示数学上的2-2,其值等于0.25。

② \ 是整除运算符: 运算功能是:如果参与运算的两个数是整数,运算结果为商的整数部分;如果参与运算的量含有小数,则系统先将它们按四舍五入转换为整数,然后再进行运算。 例1: 7 \ 2 = 3 10 \ 4 = 2 例2: 8.7 \ 5 = 1 12.37 \ 4.78 = 2 ③ MOD 是求余运算符: 运算功能是:如果参与运算的两个数是整数,运算结果为两数相除后的余数;如果参与运算的量含有小数,则系统先将它们按四舍五入转换为整数,然后相除取它们的余数。 例1: 12 MOD 5 = 2 23 MOD 4 = 3 例2: 11.7 MOD 8 = 4 13.23 MOD 4.76 = 3 三、算术表达式 1、什么叫表达式? 是指用圆括号和运算符将常量、变量和函数连接起来的式子。 2 、表达式分为哪几类? 根据运算性质不同可分为四类: 算术表达式 、 字符表达式 、 关系表达式 、 逻辑表达式 3、什么是算术表达式? 就是用圆括号和算术运算符将数值常量、变量和函数连接起来的式子。 4、怎样把代数式写成QBASIC 的算术表达式 例1: 2X + Y +6 写成QBASIC 表达式为: 2*X +Y + 6 例2:A AC 24B +B -2-写成QBASIC 表达式为: (-B+SQR (B^2-4*A*C ))/(2*A) 例3: B A y x +写成QBASIC 表达式为: (ABS (X )* ABS (Y ))/(A+ B )

C++运算符和表达式

2.4C++的运算符和表达式 运算符是施加在数据上的重要操作,变量、常量通过操作符组合成C++的表达式,构成了C++程序的基本要素。本节将介绍C++语言中基本运算符和表达式。 2.4.1C++中的基本运算符 运算是对数据的加工过程,而标识不同运算的符号称职运算符,参与运算的数据称为操作数。表2.3列出了C++中的基本运算符、其优先级及对操作数的结合性。 注:优先级相同的运算符,其执行顺序由该运算符在语句中的位置先后决定。 根据参与运算的操作数的类型不同,运算符可以分为单目运算符(1个操作数)、双目运算符(2个操作数)、三目运算符(3个操作数)。有一些运算符既可以是单目的,也可以是双目的,根据赋予该运算符的操作数的不同,运算符具有不同的功能。 例如:*pFile; var1*var2;

运算符的优先级和数学运算中的优先级意义相同,它决定了一个操作符在表达式的运算顺序,优先级越高,运算次序越靠前。而结合性则决定一个操作符对其操作数的运算顺序。如果一个操作符对其操作数的操作运算是自左向右执行的,则称该操作符是右结合的;反之如果一个操作符对其操作数的操作运算是自右向左执行的,则称该操作符是左结合实际的。 根据操作符表示的运算的性质不同,可以将C++中的操作符分为算术运算、关系运算符、逻辑运算符、赋值运算符、条件运算符、自增自减运算符、位运算符和sizeof运算符等。下面分别进行讨论。 1、算术运算符 表2.4列出了C++中的算术运算符。 对于单目运算符-,其返回值的数据类型与操作数的数据类型相同.对于双目运算符+、-、*和/,若其两个操作数的数据类型相同,则返回值的数据类型与操作数的数据类型相同;若两操作数的数据类型不同,则返回值的数据类型与字长较长的操作数的数据类型相同。 注意:两个整数相除的结果仍然是整数。若被除数不能被除数整除,则相除的结果将被取整,其小数部分将被略去。 例如:34/7;12.5%3(非法)35%7 在某些情况下,算术运算表达式会产生某些问题,计算的结果将给出错误或没有定义的数值,这些情况称为运算异常。对不同的运算异常,将产生不同的后果。在C++中,除数为零和实数溢出被视为一个严重的错误而导致程序运行的异常终止。而整数溢出则不被认为是一个错误(尽管其运算结果有可能与预期值不同)。因此,在一些与硬件打交道的低级程序中利用整数溢出查看设备的状态位等。 2、关系运算符 表2.5列出了C++中的关系运算符,它们都是双目运算符。关系运算符的返回值只有逻辑真和逻辑假两种。当两个操作数满足关系运算符所要求的比较关系时,返回整型数1(真);否则返回整型数0(假)。 表2.5 C++中的关系运算符 var3=(var1

表达式与语句

表达式与语句 前面已经提到过表达式,相信大家对表达式也有了一个初步的认识,它是由常量、变量、运算符组合(到以后讲函数时,函数也可以是组成表达式的元素),计算以后返回一个结果值。表达式的结束标志是分号(;),C语言中所有的语句和声明都是用分号结束,在分号出现之前,语句是不完整的。例如: 1+2; Counter/3+5; Height*Width; 表达式本身什么事情都不做,只是返回结果值。在程序不对返回的结果值做任何操作的情况下,返回的结果值不起任何作用,表达式的作用有两点,一个是放在赋值语句的右边,另一个是作为函数的参数(以后再介绍)。 表达式返回的结果值是有类型的。表达式隐含的数据类型取决于组成表达式的变量和常量的类型。因此,表达式的返回值有可能是某种大小的整型,或者是某精度的浮点型,或者是某种指针类型。 这里面就有类型转化的问题了,在前面说整型运算的时候也提到过。类型转化的原则是从低级向高级自动转化(除非人为的加以控制)。计算的转换顺序基本是这样的:

字符型-->整型-->长整型-->浮点型-->单精度型-->双精度型 就是当字符型和整型在一起运算时,结果为整型,如果整型和浮点型在一起运算,所得的结果就是浮点型,如果有双精度型参与运算,那么答案就是双精度型了。 强制转换是这样的,在类型说明符的两边加上括号,就把后面的变量转换成所要的类型了。如: (int) a; (float) b; 第一个式子是把a转换成整型,如果原先有小数部分,则舍去。 第二个式子是把b转换成浮点型,如果原先是整数,则在后面补0。 每一个表达式的返回值都具有逻辑特性。如果返回值为非0,则该表达式返回值为真,否则为假。这种逻辑特性可以用在程序流程控制语句中。 有时表达式也不参加运算,如: if(a||b) ………… 5>3?a++:b++; 当a为真时,b就不参加运算了,因为不管b如何,条件总是真。 二、语句 (一)、赋值语句

第3章表达式与运算符测试

C语言第3章《运算符与表达式》测试题 一、选择题(每题2分,共50分) 1、表达式“2,4,6,8”的值为() A.2 B.4 C.6 D.8 2、以下程序的输出结果是() main() {int a=12,b=0x12; printf(“%d%d\n”,--a,++b); } A.12 12 B.12 18 C.11 10 D.11 19 3、设x和y都是int型变量,则执行表达式“x=(y=4,z=16),k=32”后,x的值为() A.4 B.16 C.32 D、52 4、设x为int型变量,执行语句“x=’A’;x*=2+2;”后,的值为() A.65 B.260 C.132 D.语句错误 5、若有语句“int a=5;a++*2;”则表达式“a++*2”的值为() A.7 B.12 C.5 D.10 6、设x和y为int型变量,表达式“x+=y;y=x-y;x-=y;”的功能是() A.把x和y按从小到大排列 B.把x和y按从大到小排列 C.无确定结果 D.交换x和y的值 7、下面程序的输出结果是() main() {int x=’\23’; printf(“%d\n”--x); } A.19 B.18 C.23 D.24 8、若变量f已定义为float型, i为int 型,则下面()表达式(或语句)能够实现将f的数值保留小数点后两位,第3位进行四舍五入的运算。 A.f=(f*100+0.5)/100.0 B.i=f*100+0.5,f=i/100.0; C.f=(int)(f*100+0.5)/100 D.f=(f/100+0.5)*100.0 9、下面表达式正确的是() A. a+b=5 B.56=a11 C.5.6+6.2%3.1 D.a=5,b=6,c=7 10、若t为double型变量,执行逗号表达式“t=(x=0,x+5),t++;”的输出结果是()

运算符和表达式

关系运算符和关系表达式导学案 班级:姓名: 6学习目标: 1.了解关系运算和关系表达式的概念,掌握关系运算符的功能、优先级、结合性,学会正确书写和计算关系表达式的值。 2.了解逻辑运算和关系表达式的概念,掌握逻辑运算符的功能、优先级、结合性,学会正确书写和计算逻辑表达式的值。 学习重点: 关系运算符和逻辑运算符的优先级和结合性、关系表达式和逻辑表达式值的计算。 【课前预习】 1.C语言提供了一组关系运算符,其基本信息如图所示,用来比较两个运算对象之间的关系。 运算符名称分类优先级结合性< <= > >= == != 2.C语言提供了3种逻辑运算符,其基本信息如图所示。 运算符名称分类优先级结合性! && || 【新课讲解】 任务一:关系运算符和关系表达式 一、关系运算的概念: 二、关系运算符及其优先次序: 1.运算符种类: 2.优先次序:

3.结合性: 三、关系表达式 1.概念: 2.一般形式: 3.关系表达式的值: 任务二:逻辑运算符和逻辑表达式 一、逻辑运算的概念: 二、逻辑运算符及其优先次序: 1.运算符: 2.真值表: a b !a !b a&&b a||b 真真 真假 假真 假假 结论: 3.优先次序: 4.结合性: 三、逻辑表达式 1.概念: 2.逻辑表达式的值: 3.说明:

【巩固练习】 1.假设有三条边a、b、c,写出它们能构成三角形的逻辑表达式。 2.已定义“char ch='$';”、“int i=1,j;”,执行j=!ch&&i++以后,i的值为__。 3.一个数既能被3整除又能被5整除的表达式。 4.如果a=3,b=2,c=1,那么a>bb&&bc 的值为______。 5.C语言中复合逻辑表达式中所包含的所有运算都将会被执行。() 6.当数值型数据作为逻辑运算的操作数时,只有1才被当做是“真”,0当做“假”,其余的数值均为非法的。() 7.数值型数据不能当做逻辑量参与逻辑运算。() 8.在C语言中表示数学中的a的范围的表达式-10≤a≤10的C语言表达式为 -10<=a<=10。() 9.判断char型变量c1是否为小写字母的最简单且正确的表达式为() A.‘a’<=c1<=’z’ B.(c1>’a’)&&(c1<’z’) C.(c1-20>=’A’)&&(c1-21<=’Z’) D.(c1>=’a’)&&(c1<=’z’)

运算符和表达式

运算符和表达式 上课到这一课相隔了好长一段时间,这些日子里收到不少网友的来信支持和鼓励,要求尽快完成余下的部分。出门在外的人不得不先为吃饭而努力,似乎这也成为我的借口,以后每晚抽空打一些吧这样大家也就可以不用隔太久就能看到一些新东西。或许我的笔记并不是很正确,但我尽量的保证每课的实验都会亲自做一次,包括硬件的部分,已求不会误人子弟。 随着访问量不断的增加,网站已启用了https://www.360docs.net/doc/c818383379.html,的国际域名,在这里我感谢各位一直支持磁动力工作室的朋友,更要感激身在远方一直默默支持我的女友。 明浩2003-7-14 晚 呵,费话少说了。上两课说了常量和变量,先来补充一个用以重新定义数据类型的的语句吧。这个语句就是typedef,这是个很好用的语句,但我自己却不常用它,通常我定义变量的数据类型时都是使用标准的关键字,这样别人可以很方便的研读你的程序。如果你是个DELPHI编程爱好者或是程序员,你对变量的定义也许习惯了DELPHI的关键字,如int类型常会用关键字Integer来定义,在用C51时你还想用回这个的话,你可以这样写: typedef int integer; integer a,b; 这两句在编译时,其实是先把integer定义为int,在以后的语句中遇到integer就用int置换,integer就等于int,所以a,b也就被定义为int。typedef不能直接用来定义变量,它只是对已有的数据类型作一个名字上的置换,并不是产生一个新的数据类型。下面两句就是一个错误的例子: typedef int integer; integer = 100; 使用typedef可以有方便程序的移植和简化较长的数据类型定义。用typedef还可以定义结构类型,这一点在后面详细解说结构类型时再一并说明。typedef的语法是typedef 已有的数据类型新的数据类型名 运算符就是完成某种特定运算的符号。运算符按其表达式中与运算符的关系可分为单目运算符,双目运算符和三目运算符。单目就是指需要有一个运算对象,双目就要求有两个运算对象,三目则要三个运算对象。表达式则是由运算及运算对象所组成的具有特定含义的式子。C是一种表达式语言,表达式后面加";"号就构成了一个表达式语句。 赋值运算符 对于"="这个符号大家不会陌生的,在C中它的功能是给变量赋值,称之为赋值运算符。它的作用不用多说大家也明白,就是但数据赋给变量。如,x=10;由此可见利用赋值运

keil C 运算符和表达式

运算符和表达式 运算符就是完成某种特定运算的符号。运算符按其表达式中与运算符的关系可分为单目运算符,双目运算符和三目运算符。单目就是指需要有一个运算对象,双目就要求有两个运算对象,三目则要三个运算对象。表达式则是由运算及运算对象所组成的具有特定含义的式子。C 是一种表达式语言,表达式后面加“;”号就构成了一个表达式语句。 赋值运算符 对于“=”这个符号大家不会陌生的,在 C 中它的功能是给变量赋值,称之为赋值运算符。它的作用就是把数据赋给变量。如,x=10;由此可见利用赋值运算符将一个变量与一个表达式连接起来的式子为赋值表达式,在表达式后面加“;”便构成了赋值语句。使用“=”的赋值语句格式如下: 变量 = 表达式; 示例如下 a = 0xFF; //将常数十六进制数 FF 赋于变量 a b = c = 33; //同时赋值给变量 b,c d = e; //将变量 e 的值赋于变量 d f = a+b; //将变量 a+b的值赋于变量 f 由上面的例子可以知道赋值语句的意义就是先计算出“=”右边的表达式的值,然后将得到的值赋给左边的变量。 算术,增减量运算符 对于 a+b,a/b 这样的表达式大家都很熟悉,用在 C语言中,+,/,就是算术运算符。C51的算术运算符有如下几个,其中只有取正值和取负值运算符是单目运算符,其它则都是双运算符: + 加或取正值运算符 - 减或取负值运算符 * 乘运算符 / 除运算符 % 取余运算符 算术表达式的形式: 表达式 1 算术运算符表达式 2 如:a+b*(10-a), (x+9)/(y-a) 除法运算符和一般的算术运算规则有所不同,如是两浮点数相除,其结果为浮点数,如 10.0/20.0 所得值为 0.5,而两个整数相除时,所得值就是整数,如 7/3,值为 2。像别的语言一样 C 的运算符与有优先级和结合性,同样可用用括号“()”来改变优先级。这些和我们小时候学的数学几乎是一样的,也不必过多的说明了。 ++ 增量运算符 -- 减量运算符 这两个运算符是 C 语言中特有的一种运算符。在 VB,PASCAL 等都是没有的。作用就是对运算对象作加 1 和减1 运算。要注意的是运算对象在符号前或后,其含义都是不同的,虽然同是加1或减 1。如:I++,++I,I--,--I。 I++(或 I--)是先使用 I 的值,再执行 I+1(或 I-1) ++I(或--I)是先执行 I+1(或I-1),再使用I 的值。 增减量运算符只允许用于变量的运算中,不能用于常数或表达式。 关系运算符 对于关系运算符,在C中有六种关系运算符: >大于 <小于 >=大于等于 <=小于等于 ==等于

相关文档
最新文档