还剩17页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
第三章数据类型及其运算知识点提示
1.C的数据类型(基本类型、构造类型、指针类型、空类型)及其定义方法
2.C的运算符种类、运算优选级和结合性
3.不同类型数据间的转换与运算
4.C表达式类型(赋值表达式、算术表达式、关系表达式、逻辑表达式、条件表达式、逗号表达式)和求值规则知识点一.C的数据类型
1.数据类型的概念数据类型在高级语言中的实质是为解决数据在程序中的表示(常量)、内存单元的分配(变量)及其加工的描述(算符和表达式)这三个基本问题在高级语言中,任何数据都是有类型的,即不同类型的数据有不同的存储属性及操作属性,将数据按其操作属性和存储属性进行分类,就是数据类型的概念
2.C的数据类型在C语言中,数据类型分为基本类型、导出类型(构造类型)、空类型、指针类型基本类型有整型、实型、字符型、枚举类型数据有常量与变量之分,它们分别属于这些类型
3.常量在程序运行过程中,其值不发生变化的量,也就是在程序中直接给出的数据,在词法记号中属于文字常量分为字面常量(直接常量)和符号常量在C语言中,符号常量是用无参数的宏定义实现的,即用标识符代表某一字面常量,其定义形式为ttdefine标识符(宏名)字面常量
4.变量在程序运行过程中,其值可以改变的量变量实质在C中是为解决不同类型数据在计算机中存储时内存单元的分配问题一个变量对应相应的内存单元,且变量有对应的变量名,变量名实际上是内存单元的符号地址将变量对应内存单元所存放的当前值,称为变量的值,对变量的访问是按地址进行的,即通过变量名找到相应内存单元的地址,对其存储单元进行读、写操作记住变量的类型、变量名、变量的值是其三大基本属性
5.整型数据•整型常量的表示方法十进制整数:如123,-456等八进制整数以0为前导的八进制整数如
0123、-03467,而0879非法十六进制数以Ox为前导的十六进制整数如0x12a、-0x78等•整型变量整型数据在计算机内存中存放是以补码的形式存放的,整型变量有以下几种类型基本整型int,存储数据的长度为2字节,范围—22—1〜短整型short int或short,存储数据的长度为2个字节,范围同上长整型long int或long,存储数据的长度为4个字节,范围—2]1〜C.X=OX=1D.x=0AND x=l
30.下述程序的输出结果是#includestdio.hvoid mainint a,b;int x=5,y=10;a=一y=x++-y:++x;b=y++;printf H\na=%d,b=%d\nH,a,b;A.a=6,b=9B.a=6,b=10C.a=7,b=10D.a=7,b=
931.属于合法的C语言长整型常量是A.5876B.0L C.2E10D.long
587632.有关下述语句输出的判断中,正确的是#includestdio.h void mainchar x=\xe0’;printf%d\n,x;}A.赋值非法B.输出值不确定C.输出值为-32D.输出值为
22433.在C语言中,要求参加运算必须是整数的运算符是oA./B.!C.%D.==
34.下列语句中,符合语法的赋值句是A.a=7+b+c=a+7;B.a=7+b++=a+7;C.a=7+b,b++,a+7D.a=7+b,c=a+7;
35.下述程序的输出结果是o#includestdio.h voidmainint a=2;a%=4-l;printf n%d,,a;a+=a*二a一=a*=3;A.2,0B.1,0D.2,12C.-1,12printf H%d\nH,a;
36.下列正确的语句是oA.int x=y=z=O;B.int z=x+y++;C.x=+3==2;D.x%=
2.5;
37.是非法的C语言转义字符A.,\b,B.\Oxf C.,\037,D.
38.语句char s=\092;的作用是A.使s包含一个字符B.说明不合法,s的值不确定C.使s包含四个字符D.使s包含三个字符
39.在C语言中,整数-8在内存中的存储形式是oA.mi mi mi wooB.IOOO oooo oooo wooc.oooooooooooo ioooD.mimimi om
40.字符串\\\》13;\\\”的长度是oA.11B.7C.5D.
341.为了计算s=10!,则定义变量s时应该使用的数据类型是□A.int B.unsigned C.long D.以上三种类型均可
42.执行下述程序片段时输出的结果是ounsigned a=65535;printf a;A.65535B.-1C.-32767D.
143.执行下述程序片段时的输出结果是oint x=13,y=5;printf%d,x%=y/=2;A.3B.2C.1D.
044.是不正确的C语言赋值语句A.x=l,y=2;B.x++;C.x=y=5;D.y=int x;
45.与数学公式而商等价的C语言表达式是oA.sqrt sinxB.sqrt abssinx*
3.14/180C.sqrt abssin x*/180D.sqrt fabssin x*
3.14/
18046.下列语句中符合C语言语法的赋值表达式是□A.x=3+b,z=x+3B.x=7+y,y++,z++C.x=y+2=x+y+z D.x=3+y++=x+
347.执行下列的程序段后,a的值是int a=5;printf%d\n,a=3*5,a*4,a+5;A.45B.20C.15D.
1048.下列程序段的输出是oint x=023;printf a%dv,--x;A.17B.18C.23D.
2449.对下列的语句,判断正确的是of二
3.0,
4.0,
5.0,
2.0,
1.0,
0.0;A.语法错误B.使f的值为
5.0C.使f的值为
0.0D.使f的值为
2.
050.执行下述程序片段时的输出结果是oint x=10;x+=3+x%-3;printf u%dH,x;A.11B.12C.14D.
1551.执行下述程序片段时的输出结果是oint x=5,y=2+x+=x++,x+8,++x;printf u%d\n,J,y;A.13B.14C.15D.
1652.下述正确的C语言常量是oA.E2B.
1.5E
2.3C.
5.0E D.3e-
353.下述错误的C语言常量是oA.
5.B..25C.090D.Oxf
54.与代数式上1不等价的c语言表达是a-vA.x*y/u*v B.x*y/u/v C.x*y/u*v D,x/u*v*y
55.下列程序段的输出结果是ochar a=l;a=2,A+l;printf a;A.输出一个随机值B.因赋值不合法,不能通过编译C.2D.
6656.下述程序段的输出结果是int x=l;y=++x;z=x++;printf%d,%d,,x,y,z;oA.3,2,2B.3,2,3C.2,2,2D.2,2,
157.sizeof double是一个A.函数调用B.整型表达式C.双精度表达式D.浮点型表达式
58.下列表达式中,不满足“当x的值为偶数时值为真,为奇数时值为假”的要求A.x%2==0B.!x%2!=0C.x/2*2-x=0D.!x%
259.在x的值处于-2到2,4到8时值为“真否则为“假”的表达式是A.2x-2||4x8B.!x=-2||x=2||x=4||x=8C.x2x-2x4x8D.x-2x2||x8x
460.下述程序段的输出结果是oint a=-l,b=4,k;k=a++=0!b—=0;printf%d,%d,%d,k,a,b;A.0,0,3B.0,1,2C.1,0,3D.1,1,
261.对于条件表达式M a++:a-来说,其中的表达式M等价于A.M==0B.M==l C.M!=0D.M!=l
62.下列程序段的输出结果是ochar x=112,y=211;printf u\n%dJ,,x2|yl;A.-23B.0C.-32768D.-
2263.下述程序段中,()可以实现选项本身的功能要求A.将一个整数x右移m位B.计算一个整数x高字节值xm x=x0xff00C.将整数x高位移入变量y的低4位D.计算一个整数x低字节的高4位值int x=Oxabcd,y;y=x40x000fy=x16-4;
64.若定义unsigned a=31003,b=21103;则表达式丁Kb的值为A.1B.31003C.21103D.
065.下述表达式中,可以正确表示或的关系A.x=1|x=0B.x=l|x=0C.x=l.or.x=0D.x=l||x=
066.下述程序片段中,执行后变量i的值为4A.int i=l,j=0;B.int i=0,j=0;i=j=i=3++;i=2,i+j=2;C.int i=l,j=l;D.int i=0,j=l;i+=j+=2;j==li+=3:i=2;
67.下述程序段的输出结果是int a,b,c;int x=5,y=10;a=一y=x++—y:++x;b=y++;c=x;printf u\na=%d,b=%d,c=%d,\a,b,c;A.a=6,b=9,c=7B.a=6,b=9,c=6C.a=7,b=9,c=6D.a=7,b=9,c=
768.下述程序段的输出结果是()0int a,b,c=241;a=c/100%9;b=TT;printf(u%d,%dn,a,b);A.2,0B.2,1C.6,1D.0,-
169.下述程序段的输出结果是()oint a=2,b=3,c=4,d=5;int m=2,n=2;a=(m=ab)(n=cd)+5;printf n);A.0B.1C.2D.
570.以下不正确的叙述是()oA.在C程序中,逗号运算符的优先级最低B.在C程序中,APH和aph是两个不同的变量C.若a和b类型相同,在计算了赋值表达式a二b后b中的值将放入a中,而b中的值不变D.当从键盘上输入数据时,对于整型变量只能输入整型数值,对于实型变量只能输入实型数值
71.以下正确的叙述是()A.在C程序中,一行只能写一条语句B.若a是实型变量,C程序中允许赋值a=10,因此实型变量中允许存放整型数C.在C程序中,无论是整数还是实数,都能被准确无误地表示D.在C程序中,%是只能用于整数运算的运算符
72.设变量a是int型,f是float型,i是long型,则表达式10+a+i*f值的数据类型为()A.int B.float C.long D.double
73.设变量n为float类型,m为int类型,则以下能实现将n中的数值保留小数o点后两位,B.m=n*100+
0.5,n=m/
100.第三位进行四舍五入运算的表达是0A.n=n*100+
0.5/
100.0C.n=n*100+
0.5/
100.0二.填空题
1.C程序语言中的基本数据类型所占用内存空间大小的关系是―[JJ
2.使用运算符来计算数据类型或变量所占用内存空间的大小
3.若有定义inta
[10];则sizeofa的值为【1】
4.若给x赋值为168和给y赋值为字母A,均定义为只读方式,其语句分别是【1】和【2】
5.C程序语言中的关系运算符满足条件时返回_UJ_,不满足条件时返回【2】
6.表达式!58||26的值是【1】
7.C程序语言中可以参与位运算符操作的数据类型有
8.若有定义float a=3,b=4;short c=3;则sizeoffA,+c的值为【1】,sizeofa+
3.5的值为【2】,sizeofa+b的值为【3】
9.C语言中,unsigned char类型数据占[1L个字节存储;float类型数据占用【2】个字节存储;表达式sizeof
3.14的值是
[3];表达式sizeof long存uble的值是【4】
10.char型常量在内存中存放的是JUJJ马值
11.\72,在内存中占【1】个字节,“\72”在内存中占【2】个字节
12.表达式5%-3的值是
[1],表达式-5%-3的值是[2】o
13.定义int m=5,n=3;则表达式m/=n+4的值是【1],表达式m=l,n=2,n-m的值是【2】,表达式ni+=m-=m=l*n=2的值是[3】
14.定义int m=5,n=3;m=1,2,n++;则m的值是【1],n的值是【2】
15.假设m是一个三位数,从左到右用a、b、c表示各位数字,则从左到右各个数字是bac的三位数的表达式是【1】o
16.下述程序的输出结果是[1】voidmain{printf%s\n,”\tab\%L\\060\084\\;}
17.数学式子sir、x巴也写成c语言的表达式是oa-b
18.算术运算符、赋值运算符、逗号运算符、自加减运算符,它们参加运算的先后顺序为O[
1119.若a为float型变量,则运算表达式a=
1.5,a++,2+a++后,该表达式的值是【1】,变量a的值是【2】
20.若有int a=l,b=2,c=3o则执行c=a+=a+10,a=b++;后,a、b、c的值分别为【1】习题解析一.选择题
1.答案及两整数进行除运算时,结果为整型在表达式中,若操作数类型不同时,其隐含转换规则为低类型向高类型进行转换,所以A、C、D选项都可得到精确结果
2.答案D类型修饰符singed、unsigned只能修饰整型与字符型
3.答案C十六进制整常数要求以Ox为先导,另外要注意其基本数符为0~
9、A~F
4.答案A实常量的指数表示中,E字母左端必有数字,其右边必须有数字,且为十进制整常数
5.答案C转义字符若为十六进制的ASCH字符,要求以“x”为先导,且不能超过两位
6.答案Ao自增、自减算符,要求为左值对象,并未对其类型作要求而其余算符要求的操作数均为整型或字符型
7.答案D位运算符要求的操作数为整型、字符型
8.答案B单目运算符的优先级仅低于成员运算
9.答案D赋值运算符的优先级仅仅高于逗号运算符,而复合的赋值算符与赋值算符为同级
10.答案C运算符的结合性为右结合性的有单目算符、条件运算符、赋值运算符
11.答案I当多运算符“一-”进行组合时,总是尽可能地按从左到右的原则进行组合成一个运算符因此将“--a+b”解释为“一-a+b,而“一”只能用于左值对象,而不能作用于表达式“-a”
12.答案D位运算符的运算对象为整型或字符型,所以A、B选项错而对于C选项,由于单目算符“!”优先级高于“*=,表达式“!a*=b”解释为!a*=b,所以C选项为非法表达式
13.答案A在表达式中,若进行完整型与浮点提升后,操作数类型相同时,不再进行类型转换如表达式中的操作数由字符型、整型组成,则表达式的最终类型为整型
14.答案C
15.答案D表达式a«b»c解释为a*2”/2,所以此选项错误
16.答案Do表达式“x%=k%=5”结果为0,表达式“x%=k-k%5”结果为2,表达式“x%=k-k%5结果为2表达式“左值距表达式”解释为左值二左值@表达式
17.答案A字符常量为单撇号括起来的转义符、单字节字符
18.答案Bo A选项中的转义字符为八进制的ASCII字符,其中出现了非法的八进制数符C选项为非法表示,单撇号只能括单字节字符D选项为字符串常量
19.答案D赋值算符的结合性为右结合性,且其优先级低于算术运算,所以“b+c=l”非法
20.答案C算符“口”属于成员运算级别
21.答案D依据“||”运算的规则,该答案非常明显
22.答案A算符””优先级低于算符所以选项为A
23.答案B
24.答案B
25.答案D依据表达式操作数的类型隐式转换原则
26.答案AB选项类型名要用括号括起来,C选项求模算符“%”要求操作数为整型,D选项赋值算符左端要求为左值对象,而“*”为单目算符时,其操作数为指针类型
27.答案C先进行x的三次自减,然后完成x*x*x的运算类似的,对于x—*x—*x—先完成x*x*x的运算,然后完成X的三次自减运算
28.答案C当++a运算完成后,其值为2,该表达式的值可确定整个逻辑表达式的值,所以++b、c—不再进行求值得选项C
29.答案B
30.答案D
31.答案B注意,选项D为表达式,并非常量
32.答案C\xe0的低八位为11100000,它是-32的补码
33.答案C
34.答案D
35.答案A
36.答案C
37.答案B
38.答案B
39.答案A求-8的被码
40.答案B
41.答案C注意不同类型值的取值范围
42.答案65535的二进制为linnniinini,它是-1的补码若以带符号的数输出,则为选项BB
43.答案C
44.答案D
45.答案D
46.答案B
47.答案C注意,程序的输出结果为
2048.答案B注意,023为八进制整数
49.答案B逗号运算符的优先级低于赋值运算符
50.答案C
51.答案B表达式x+=x++,x+8,++x的值为12,因为x+=x++运算次序为x+二x,结果x的值为10,然后x完成后缀的自增,x的值为
1152.答案D
53.答案C
54.答案A注意算符的优先级和结合方向
55.答案C逗号运算符的优先级低于赋值运算符
56.答案A
57.答案B
58.答案B
59.答案D表达式!x=-2||x=2||x=4||x=8正确表达所满足的条件为:!x=-2||x=2x=4||x=
860.答案C
61.答案C
62.答案A
63.答案D
64.答案B abb等价于£tfb,此式为a0,得a答案D
65.注意,A选项中的关系算符之间,不能加空格答案C
66.答案D
67.答案B
68.答案C
69.答案D允许,要进行类型转换
70.答案D
71.答案D float类型操作数,要进行浮点提升
72.答案B
73.二.填空题
1.
[1]charshort=intlong=floatdouble
2.
[1]sizeof
3.LU20sizeof运算符作用于数组名,得到的是数组总的字节数o
4.
[1]^define x168
[2]ttdefine yA
5.
[1]1
[2]
06.
[1]
17.
[1]整型、字符型
8.
[1]2
[2]8
[3]
89.
[1]1
[2]4
[3]8
[4]
1010.
[1]ASCII码
11.[111
[2]
212.
[1]2
[2]-2
[3]-
213.
[1]0
[2]
114.
[1]1
[2]
415.
[1]b*100+a*10+c
16.
[1]ab%Ln,
017.
[1]sinx*sinx*a+b/a-b
18.
[1]由高到低顺序自加减、算术运算符、赋值运算符、逗号运算符
19.
[1]
4.5
[2]
3.
520.
[1]
2、
3、11无符号基本整型unsigned[int],取值范围2处—1〜无符号短整型unsigned short[int],取值范围同上无符号长整型unsigned long[int],取值范围Z—l〜•整型变量的定义在C中规定,程序中所用到的变量遵守“强制类型定义”的原则,即变量先定义后运用其定义形式为类型名变量名表;•整型数据的溢出整型数据由于为补码的存储形式,在程序的运行过程中,一旦数据超出其范围,会发生“溢出”,且在运行期间并不报错,其值是确定值,通过补码的知识可推出其溢出后的具体值•整型常量的类型若整数的值在一2匕2於一1范围内,则为int型;若其值在一231231—1范围内,则为long〜〜型;一个整常量后面加字母u,则认为是unsigned int常量,若加1或L后缀,则认为是long int常量考虑Tu的值是多少?
6.实型数据•实型常量的表示方法十进制的小数形式由数字与小数点组成,且必须有小数点,为十进制小数形式指数形式小数E整数,字母E之前必须有数字,且为小数E字母后面的指数必须为整数若尾数的小数点左边为1位非零数字,称为“规范化的指数形式”•实型变量单精度float,长度为4个字节,有效数字67位,范围10一37]038〜〜双精度double,长度为8个字节,有效数字15~16位,范围IO-307-1O308□长双精度long double,长度为10字节,有效数字1819位〜•实型常量的类型在C的编译系统中将实型常量作为双精度进行处理,可以在实数加f或F后缀,使编译系统将其当作单精度进行处理
7.字符数据•字符常量字符常量是用单撇号括起来的单字节字符,或用单撇号括起来的转义字符字符在计算机内存中以ASCII码的形式存储C的转义字符形式如下\n换行符,ASCH码值为10\t水平制表符(跳到下一个tab位置),ASCH码值为9\b退格,ASCII码值为8\广回车,将光标移到本行的开头,ASCH码值为13\f换页,ASCII码值为12\\反斜杠字符“\,ASCH码值为92V单撇号字符,ASCII码值为39V双撇号字符,ASCH码值为34\ddd1到3位8进制数所代表的字符\xhh1到2位16进制数所代表的字符•字符变量类型名为char,用来存放一个字符,长度为1个字节字符数据在内存中以ASCH码存储,因此,可认为它为整型的子集,与整型数据通用,其对应的整数值为ASCH值这样,字符可以整型形式输入输出,可参预算术运算值得注意的是,有些系统Turbo C将字符变量中的最高位作为符号位,即将字符处理成signed char,这样其值的范围为-128~127如果使用ASCII码为128255之间的字符,则以整型输出时,就会得负〜值如果将字符不想按有符号数处理,则定义字符变量时可定义为unsigned char类型,这时其值范围为0255〜•字符串常量字符串常量是用一对双撇号括起来的字符序列字符串它为字符数据的构造类型,即若干个字符按其序列在内存连续存放,并在末尾加上字符串结束标记“\0”在字符串中,有串长的概念把字符串的起始字符到结束标记之间的字符个数,称为字符串的长度,注意字符个数在计数时,结束标记不在其中记住字符串在C中,属于构造类型,实质就是字符数组,而没有字符串变量
8.各类数值型数据的混合运算整型、实型、字符型数据在进行混合运算时,要进行数据类型的转换其转换分为隐式转换与强制转换两类隐式转换在表达式出现不同的类型的操作数、赋值运算的左值与右值的类型不同时、函数实参与形参的类型不一致时由系统自动完成强制转换是由用户通过强制类型转换的运算符完成的表达式中对操作数隐式转换的原则如下整型提升若字符型、短整型参预运算时,先将其转换为int型浮点提升若单精度型参预运算时,将其转换为double型低类型向高类型转换在完成整型、浮点型提升后,若有不同类型数据进行运算时,遵循低类型向高类型的转换原则数据类型由低到高的顺序为intfunsignedf longfunsignedlong fdouble二.算术运算符和算术表达式在C语言中,除控制语句和输入输出以外的儿乎所有的基本操作都作为运算符处理运算符描述数据的运算加工,算符在C语言中占据着非常重要的地位掌握运算符,要从以下四个方面进行考虑•运算符的功能表示什么加工或运算•运算符与加工对象操作数之间的关系所要求操作数的数目及类型•运算符的运算优先级别不同级别算符的运算顺序•运算符的结合性右结合性与左结合性决定了同级算符的运算顺序表达式是用运算符将其加工对象连接起来,符合C语法规则的式子,主要完成对数据加工描述的过程,运算对象包括常量、变量、函数、最表达式在C中,认为独立的变量、常量、函数是简单的表达式1基本的算术运算符.加法运算符(双目),或正值运算符(单目)减法运算符(双目),或负值运算符乘法运算符(双目)除法运算符(双目)模运算符,或称求余运算符(双目)记住•两整型数据进行除法运算的结果为整型•模运算符的操作数要求为整型对象•a%b的含义为a-a/b*b
2.算符的优先级和结合性优先级别(+,-)(单目)一(*,/,%)一(+,-)(双目)(高一低顺序)结合性单目算符为右结合性,双目算符为左结合性
3.强制类型转换运算强制类型转换运算是将一个表达式转换成所需要的类型,主要用于隐式转换不能实现的目的时其形式为(类型名)(表达式)强制类型转换运算符的优先级别与单目运算符为同级4,自增、自减运算符自增、自减运算符为单目算符,要求运算对象为变量,不能为常量、函数和表达式,其作用是使变量的值增1或减1设a为一左值对象,则自增、自减运算符的含义可解释如下前缀形式x=--a等价于a二aT;x=ax=++a等价于a=a+1;x=a也就是说,--a表达式的值为a自减后的值,与变量的值相同++a道理相同后缀形式x二a—等价于x=a;a二aTx=a++等价于x=a;a=a+1也就说,a++表达式的值为变量自增前的值,变量值最终为增1后的值自增、自减运算符与单目运算符为同级运算,结合方向为右结合性注意自增、自减运算符主要用于循环控制与指针变量中,不要滥用
5.赋值运算符和赋值表达式•赋值运算符赋值运算是C程序中最基本、最频繁的操作,通过赋值算符“二”实现其格式为变量二表达式将赋值算符左边的对象称为左值,它代表是内存单元,而将其右边的对象称为右值,它为表达式整个赋值表达式是有值的,其值与类型就是其右值记住赋值运算结合性为右结合性,优先级仅高于逗号运算符赋值时的类型转换当右值类型与左值类型不一致时,要进行类型转换,其转换的原则是将右值类型转换为左值类型
(1)左值为整型,右值为实型时,将舍弃右值的小数部分记住不进行四舍五入
(2)左值为实型,右值为整型,数值不变,以浮点数形式存储到左值中
(3)左值为单精度,右值为双精度时,将截取右值前面7位有效数字
(4)左值为整型,右值为字符型时,取决于系统对字符型类型的处理若将字符型处理为unsignedchar,则在赋值时,不进行符号位的扩展,而是对高端补零若将字符处理为(如Turbo C)signed char,则在赋值时要进行符号位的扩展
(5)左值为char型,右值为int、short、long型时,将截取右值的低8位传送给左值
(6)左值为long型,右值为int型时,赋值时要进行符号位的扩展
(7)左值为int型,右值为long型,将截取右值的低16位传送给左值
(8)左值为long int型,右值为unsigned int型时,将右值的高端补零,传送给左值
(9)左值为带符号整型,右值为长度相同无符号整型,也将进行原始传送
(10)左值为无符号整型,右值为长度相同的有符号整型,则也进行原始传送记住不同类型整型数据之间的赋值,其实质是按存储单元的存储形式直接传送,而且左值的结果要以补码进行处理
6.复合的赋值运算符赋值算符与双目算符的组合,可构成复合的赋值运算,其目的是为简约程序的书写但并非所有的双目算符都能与赋值算符构成复合运算,约定算术算符、位运算符可与赋值算符组成复合赋值运算复合赋值运算符组成的表达式左值@二表达式可解释为左值二左值@(表达式)其中@可为+、-、*、/、%、«.、、|、,记住复合的赋值算符最终完成的是赋值运算,因此它与赋值算符的优先级与结合性相同
8.求字节运算符关键字sizeof可作为算符,其形式为sizeof(表达式)、sizeof(类型名)或sizeof表达式它可得到表达式类型所对应的字节数目例如:sizeof(5*
6.)的值为8,sizeof(TV+b)的值为2,sizeof(2+4l)的值为4,sizeof(A)的值为1记住当sizeof算符作用在数组名上,将得到的是该数组所分配内存单元的总字节数
9.条件运算符条件运算符是C语言中惟一的三目算符,其构成条件表达式的形式为表达式1表达式2表达式3含义是先对表达式1进行求解,若表达式1的值为非零值,则求解表达式2,并将表达式2的值作为整个条件表达式的值;若表达式1的值为零值,则求解表达3,并将表达式3的值作为整个条件表达式的值条件运算符可完成简单的分支程序设计,其算符的优先级仅仅高于赋值运算,算符的结合方向为右结合性三.关系运算符和关系表达式关系运算可认为是简单的逻辑运算,实际上是“比较运算”关系算符将两个值进行比较,判断其比较结果是否符合给定的条件如果符合,则运算结果为1(成立),否则为0(不成立)值得注意的是,在C语言中无逻辑数据类型,因此,关系成立与否,是用整数值来表示的,这样关系表达式也可作为操作数出现在其它表达式中
1.关系运算符及其优先级C语言提供6种关系运算<、〈=、>、>=(这四个为相同优先级);==>!=(相同优先级)前四个优先级大于后两个的优先级记住关系运算的优先级低于算术运算,高于赋值运算
2.关系表达式用关系算符将两个表达式(可以是算术表达式、关系表达式、逻辑表达式、赋值表达式、字符表达式)连接起来的式子,便构成关系表达式,它的值为整型的0或1,通常用来描述简单的条件四.逻辑运算符和逻辑表达式在C语言中,涉及到逻辑运算时,首先要确立的概念是,C语言的数据类型并没有逻辑型数据但有逻辑数据(量)的概念,在C语言中,认为所有的非零值为逻辑真值,零值为逻辑假也就是说,数值性数据可参预逻辑运算,在进行逻辑运算时,非零值转换为逻辑真,零值转换为逻辑假
1.逻辑运算符及其优先级别c语言提供三种逻辑运算符
(1):逻辑与(逻辑乘),双目运算符
(2)||逻辑或(逻辑加),双目运算符
(3)!逻辑非,单目运算符假设a、b是两个逻辑量(常量、变量、函数、表达式),则各逻辑算符意义如下ab当且仅当a、b都为非零值时,ab的值为1,否则ab的值为0所以,逻辑与运算可表述若干个条件同时成立的情形a||b当且仅当a、b都为零值时,a||b的值为0,否则a||b的值为1所以,逻辑或运算可表述若干个条件只要求有一个成立的情形!a当a的值为非零值时,!a的值为0;当a的值为零值时,!a的值为1所以,逻辑非运算用来表述反向的条件上述三个逻辑运算符的优先级由高到低的顺序为!一-|算术运算、关系运算、逻辑运算符的优先级由高到低的顺序为!一算术算符一关系运算符一一||一条件运算符一赋值运算符(包括复合赋值运算)一逗号运算符
2.逻辑表达式用逻辑算符将逻辑量连接起来的式子,便构成逻辑表达式,它通常用来描述一些较为复杂的条件由于逻辑表达式比较复杂,所以要密切关注逻辑表达求值时各算符的优先级及其结合性而且,如果逻辑表达式是用逻辑算符将若干个子表达式连接起来,则并非所有的子表达式都进行求值当根据某一子表达式的值就能确定整个逻辑表达式的值,则其余的子表达式就不求解了,这点要特别注意例如,x=10,a=3,当执行表达式++x||++a++a后,x的值为11,而a的值不变若执行表达式++x++a||++a后,则x的值为11,a的值为4(只执行一次++a)五.位运算位运算是指进行二进制位的运算位运算符要求的运算对象为整型、字符型数据,不能是实型数据进行位运算时,是按运算对象在内存中的存储形式进行相应的逐位运算
1.位运算符和位运算按位与运算符()按二进制位进行“与”运算,规则:10=0,00=0,01=0,ll=lo按位或运算符(|)按二进制位进行“或”运算,规则1|0二1,0|0二0,0|1二1,1|1二1异或运算符
(八)按二进制位进行“异或”运算,规则厂0=1,0-0=0,01=1,r1=0取反运算符()对二进制位按〜取反,规则1=0,“0=1〜左移位运算符(<<)形式a«n,用于将一个数a的二进制位全部左移n位右移位运算符(>>)形式a»n,用于将一个数a的二进制位全部右移n位记住对一个整数左移n位,相当于乘以2〃,此结论只适应于该数在左移时被溢出舍弃的高位中不包含1的情况例如,unsigned charc=)\100,,c«=2,则c的值为零同理,对一个正整数右移n位,相当于除以2〃说明在右移位时,要注意符号位的问题对无符号数,右移时左边高位移入0对于有符号数,右移时左边高位移入符号位(算术右移)(若移入零称逻辑右移)
2.不同长度数据的位运算如果两个数据长度不同的数进行位运算时,系统会将二者按右端对齐对数据长度短的数据要进行高位扩展,其原则是若该数为无符号数,则高位补0;若该数为有符号数,则高位进行符号位的扩展
3.位运算的优先级结合性优先级由高到低的顺序按位取反一移位算符一按位与一按位异或一按位或4合性单目为右结合性,单目为左结合性六.运算符优先级和结合性小结
1.算符优先级小结算符优先级由高到低总的顺序如下成员运算符一单目算符一双目算符一条件算符一赋值算符一逗号算符双目算符的优先级由高到低的顺序如下算术运算一移位运算(VV、»)-关系运算(V、v=、>、>=->==.!=)一逻辑位运算(一八一|)一逻辑运算(一||)
2.算符结合性小结成员运算符的结合性为左结合性单目算符的结合性为右结合性双目算符的结合性为左结合性条件算符的结合性为右结合性赋值算符(复合赋值运算)的结合性为右结合性逗号算符的结合性为左结合性同步训练题一.选择题
1.假设有变量a、b和p均已经定义如下,计算结果不精确的是()int a=3,b=4;double p;A.p=(double)a/(a+b)B.p=a/(a+b)C.p=(double)(a)/(a+b)D.p=(double)(a)/(double)(a+b)
2.类型修饰符unsigned修饰类型错误的是()A.char B.short C.long int D.double
3.下列十六进制的整常数表示中,错误的是()oA.Oxaf B.Oxlb C.2fx D.OxAE
4.下列double型常量的表示中,错误的是()oA.E15B..35C.3E5D.3E-
55.下列字符常量表示中,错误的是()oA.VI05B.C.\4f D.\a
6.下列算术算符中,能作用于实型数据类型的是()A.++B.%C.»I).
7.下列各算术运算符是,不能作用于实型数据类型的是()A./B.C.!D.〜
8.下列各运算符中,优先级最高的是()A.+(加运算符)B.*(单目)C.〈二D.*二
9.下列各运算符中,优先级最低的是()A.:B.|C.||D.!二
10.下列各运算符中,结合性从左到右的是()0A.三目算符B.赋值算符C.比较算符D.单目算符
11.下列表达式中,非法的是()o已矢口int a=5;float b=
5.5;A.a%3+b B.b*b++a C.(ab)+(int)b%2D,-----a+b
12.下列表达式中,合法的是()已知double a=
3.4;int b=3;A.a«2B.(a+b)|b C.!a*=b D.a=5,b=
3.1,a+b
13.下列关于类型转换的描述中,错误的是()A.在不同类型操作数组成的表达式中,其表达式类型一定是最高类型doubleB.逗号表达式的类型是最后一个表达式的类型C.赋值表达式的类型是左值的类型D.在由低向高的类型转换中是保值映射
14.假设有Oxaf和0xa7两个十六进制数,若用八运算符,其运算结果是()A.0xa7B.Oxff C.0x8D.Oxaf
15.下列语句中不能完成算术表达式65*4/2操作的是()A.int a=64,b=4,c=2;B.int z=64*4/2;int z=a*b/2C.inta=64,b=4,c=2;D.int=6421;int z=abc;Z
16.假定有以下变量定义int k=7,x=12;则能使值为3的表达式是A.x%=k%=5B.x%=k-k%5C.x%=k-k%5D.x%=k-k%=
517.设有语句char a=\72,则变量a A.包含1个字符B.包含2个字符C.包含3个字符D.说明不合法
18.在C语言中,合法的字符常量是A.084B.,\x43,C.ab,D.\0”
19.在下列选项中,不正确的赋值表达式是oA.++t B.nl=n2=n3=0C.k=i=j D.a=b+c=l
20.在以下一组运算符中,优先级最高的运算符是□A.=B.++C.[]D.
21.设a、b和c都是int型变量,且a=3,b=4,c=5,则下面的表达式中,值为0的表达式是A.B.a=b C.a||b+cb-c D.!ab!c||
122.有以下语句char a=3,b=6,c;c=aAb«2;则C的二进制值是oA.00011011B.00010100C.00011100D.
0001100023.执行下列的程序段,则b的值为0int x=35;char z=,A,;int b;b=x15z,a,;A.0B.1C.2D.
324.设int类型的数据长度为2个字节,则unsigned int类型数据的取值范围为A.0~255B.0~65535C.-32768^32767D.-256255〜
25.若有以下类型说明语句char w;int x;float y;double z;则表达式w*x+y-z的结果为类型A.float B.char C.intD.double
26.设x,y为float变量,则以下是合法的赋值表达式A.x++B.y=float10C.y=x%2D.*x=
1027.若x、z均为int型变量,则执行以下语句后,z的值为0x=5;z=--x*--x*--x;A.125B.24C.8D.
6028.若a、b、c均为int型变量,则执行以下语句后的a、b值分别为a=b=c=l;++a||++b|一c;A.1和1B.1和2C.2和1D.2和
229.下列表达式中能正确判断x落在[0,1]区间的是oA.x=0||x=l B.!x01|xl。
个人认证
优秀文档
获得点赞 0