第三章数据类型,运算符,表达式_第1页
第三章数据类型,运算符,表达式_第2页
第三章数据类型,运算符,表达式_第3页
第三章数据类型,运算符,表达式_第4页
第三章数据类型,运算符,表达式_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第三章 数据类型、运算符、表达式【例题3-1】下列哪些是c语言提供的合法的数据关键字 A. Float B. signed C. integer D. Char 解析:此题的选项A和D中有一个字母是大写字母,c语言的关键字不允许用大写字母,所以是不正确的,c也不对,在c语言中,用int 而不用 integer做为整形数据定义的关键字,只有B是对的,signed是有符号的意思,是c语言中的一个关键字。答案:B【例题3-2】下面标识符中,合法的用户标识符为A变量a B. fast+1 c. printf D. 2ab 解析:标识符只能由字母、数字、下划线三种字符组成。且第一个字符必须为字母或下划线

2、。A是汉字不是上述三种情况之一,不能用做用户标识符。而B含有加号,加号不能用做标识符。D是以数字开头,不符合标识符命名规则。C选项是c语言的库函数,可以做用户标识符。答案:C【例题3-3】下列属于整形常量的是A0X12A B12x C-12. D1E2解析:十六进制整数是以0x开头,所以选项B不合法。选项C有小数点所以是实型常量的十进制表示形式,D是实型常量的指数表示形式。c语言能用来表示整常数的有三种:十进制、八进制、十六进制。A是整形常量的十六进制表示形式。答案:A【例题3-4】下述四项中,合法的c语言整型常量是A. -087 B. 5L C. (long)123456 D. 1.23e+

3、2解析:选项A中087虽然是以0开头的,但它不是一个八进制数,因为一个八进制数的数字字符在07之间,八进制数前可以带负号。选项C是一个表达式而不是一个常量。选项D是一个实形常量。选项B是在一个整数后加L构成一个长整形常量。答案:B【例题3-5】以下不正确的实型常量是()A. 2. B.123E-2 C解析:1、实型常量的十进制表示形式中,小数部分或整数部分可省略,但不能同时省略。2、在指数形式(fem或fEm)的表示中,f为十进制整数或浮点数,m必须是整数,并且f和m都不能省略,“+”号可以省略,“-”号不能省略。)观察以上A、B、C三个选项都是合法实型常量。选项D中指数部分不是整数,是错误的

4、。答案:D【例题3-6】若有以下定义和语句: int u=010,v=0x10,w=10;printf(“%d,%d,%d”,u,v,w);则结果输出为( )A8,16,10 B. 10,10,10 C. 8,8,10 D. 8,10,10解析:函数printf要求三个整形变量u,v,w按十进制形式输出,所以八进制数“010”要转换成十进制数8,十六进制数0x10要转换成十进制16。答案:A【例题3-7】下述常量中,哪些是不合法的常量A12 B“ ” C D“483”解析:显然,B和D是字符串常量,A是字符常量。选项A是一个普通的八进制转义字符,ASCII值为10。B是空字符串。选项D初看起来

5、是一个八进制转义序列。但因为8超过了八进制范围,系统自动将其识别为4、8和3组成,在输出时显示为“83”。选项c仅由两个连续的单引号组成,是错误的字符常量。答案:C【例题3-8】以下不合法的常量是()A. 6 B. C.286 D.”286”解析:B选项是空字符串常量,此串仅占用一个字节。A选项为转义字符。D选项为字符串常量,而C选项看似为转义字符,但超过了后的八进制的表示范围,是不合法的。答案:C【例题3-9】字符串” ” A A A 1 2 3 x A A t”的长度为A.8 B.17 C.14 D.10解析:c语言对上述问题的处理方法是从左向右尽可能多的将连续的字符组成一个有意义的项。所

6、以为转义字符,”为转义字符输出为”。AAA是三个普通字符。123也是转义字符。XAA是转义字符。 t为一个转义字符。答案:A【例题3-10】下列选项中,( )是正确的转义字符。A' xef' B' 082' C' xab ' D' '解析:B选项“”后应为1-3位八进制,但8超过了八进制的表示范围,故是错误的。C选项不是转义字符的表示形式。D选项不是转义字符的正确表示形式。A选项表示十六进制ef所表示的字符。答案:A【例题3-11】下面程序段的结果是int i=65536;printf(“%dn”, i);A. 65536 B.

7、0 C. 有语法错误,无出结果 D. 1解析:c语言规定,int 类型变量占两个字节的存储单元,表示的数值范围为-3276832767,题目中的i赋值为65536,已超过两个字节所能表示的数值,c语言认为这并不是出错,而是自动取低位两个字节的内容。将该数减去整型数据类型的模,所以65536-65536=0答案:B【例题3-12】若int类型数据占两个字节,则执行以下语句的输出为()int k=-1;printf(“%d,%un”,k,k);A. 1,-1 B.-1,32767 C.-1,32768 D.-1,65535解析:c语言中,负数在内存中是以补码形式存在的。k=-1在内存中的存储形式是

8、1111 1111 1111 1111,当把k的值按“%d”格式(有符号整数)输出时为-1。按“%u”格式(无符号整数)输出时为65535。答案:D补充:求负数的补码(以-7为例) (1)写出绝对值|-7|的二进制表示形式 0000 0000 0000 0111(2)按位取反(即将0变为1,将1变为0) 1111 1111 1111 1000(3)末位加1即得到-7在内存中的表示形式 1111 1111 1111 1001【例题3-13】在下述输出语句的判定中,正确的是()int x=0x123456L;long int y=0xe;printf(“%x,%ld”,x,y);A.输出值为345

9、6,14 B.非法赋值 C.输出值不确定 D.输出值为0x123456,0xe解析:Long型数据0x123456L赋给int 型变量x,系统自动对其进行类型转换,将数据中低16位3456赋值给x,舍弃高16位的0x0012。将0xe赋值给long型变量y,其值送到y的低16位,因为0xe是正数,所以变量y 的高16位补0。十六进制0xe的十进制为14。故选项A是正确的。答案:A【例题3-14】下列程序的输出是#include <stdio.h>main( )printf(“%d”,null);A. 0 B. 变量无定义 C. 1 D. 1解析:(1)要把此处的null与c语言中预

10、定义表标识符NULL区分开。NULL是在头文件stdio.h中定义的的标识符,它代表0;而null是小写拼音字母拼写,因此不能将它当做NULL,而是一般的用户标识符。(2)c语言规定,程序中用到的所有变量在使用前必须先进行定义,而本题中的程序在对null做输出处理之前对它没有给出明确的变量定义答案:B【例题3-15】若k为整形变量,则以下语句int a=-2L;printf(“%dn”,a);A. 赋值不合法 B. 输出值为-2 C. 输出为不确定值 D.输出值为2解析:本题的主要关键是要弄清c语言 中常量的表示方法和有关的赋值原则。在一个整形常量后面加一个L则被认为是长整形常量。一个整常量,

11、如果其值在-32768-32767之间内,可以赋给一个int型或long int 型变量。但如果整常量的值超过了上述范围,而在-2147483648-2147483674范围内,则应将其值赋给一个long int型变量。本例中-2L虽然为long int但是其值为-2,因此可以通过类型转换把长整形转换为短整形,然后赋给整形变量a,并按照%d格式输出该值即为-2。答案:B【例题3-16】在c语言中,若下面的变量都是int类型 的,则输出的结果是sum=pad=5;PAD=sum+,PAD+, +PAD;printf(“%dn”,pad);A. 7 B. 6 C. 5 D. 4 解析:在c语言中,

12、标识符的大小写含义是不同的,因而本题中的pad和PAD分别代表两个不同的变量名称。由于pad已赋值为5,所以显示pad的结果也是5。答案:C【例题3-17】已知ch是字符变量,以下不正确的赋值语句是()A. ch=“a”; B. ch=a; C. ch=141; D. ch=x61+3;解析:a是字符占用一个字节。“a”是字符串占用两个字节,不能赋值给字符型变量,因为字符型变量只能存放一个字节的内容。所以A应该是错误的。C选项和D选项是转义字符分别用八进制和十六进制的ASCII码表示字符常量a和d。答案:A【例题3-18】下面选项中,()是对字符变量不正确的赋值方式Ach=$ Bch=7+3

13、Cch=t Dch=a+b解析:A选项是将字符$赋给字符变量。选项B 是数字字符7与整数3相加做算术运算。C语言中字符型数据和整形数据间可以通用,一个字符型数据既可以按字符型数据处理也可以按整形数据处理。按整形数据处理时将ASCII值作为整数处理,故字符数据可以进行算术运算。选项c为转义字符。选项D单引号括起来三个字符。而字符常量是单引号括起来的一个字符,字符型变量用来存放一个字符型常量,且只能放一个字符。故选项D为错误。答案:D 【例题3-19】若有以下定义和语句char c1=b,c2=e;printf(“%d,%cn”,c2-c1,c2-a+A);则输出结果是A2,M B3,E C2,e

14、 D输出项与对应的格式控制不一致,输出结果不稳定解析:c语言中规定,字符型常量在内存中占一个字节,用于存放字符的ASCII值。所有字符型常量都作为整形量处理,其对应的整数值就是ASCII字符集中该字符的序号。执行表达式“c2-c1”相当于字符e与字符b的ASCII码值相减,即101-98得3。而“c2-a+A”即101-97+65得69,而ASCII码值69对应的字符是E。答案:B【例题3-20】请选出合法的c语言赋值语句Aa=b=58 Bi+; Ca=58,b=58 Dk=int(a+b); 解析:由于c语言规定,c程序中的任一语句都必须有一个分号做结束标志,分号是构成任何语句的重要成分,所

15、以答案A、C均错。答案D中的书写int(a+b)是完全错误的,根据c语言规定,使用强制类型转换运算符的书写形式为:(类型名)(表达式),所以答案D应改写为:k=(int)(a+b)。答案B 当于语句i=i+1;由此可见,该语句是合法的赋值语句。答案:B【例题3-21】已知:a的ASC码值为97,0的ASC码值为48,下述程序的输出结果是 #include<stdio.h>main()printf(“%s”,”tabc%L”064x41085”);A.abc%L”4A B.tabc%L”064x41085C.abc%L”0A D. abc%L”0A085解析:(1)转义字符“t”的作

16、用是使后面的输出跳到下一个输出区。一个输出区为8列。(2)abc为三个普通字符,原样输出。(3)对应“ ” 的输出是单撇号和双撇号。(4)“%”后面不是格式字符, 它作为普通字符输出,即输出一个“%”。“L”是普通字符,原样输出。(5)转义字符的ASCII码表示一个字符,八进制的转义字符“064”为八进制,转换为十进制为52,表示字符4。十六进制的“x41”表示字符A。(6)“085”不是八进制的ASCII码表示的一个字符,而是0、8、 5字符,输出时输出到第一个空字符0时结束,所以,8、 5不输出。答案:A【例题3-22】下列语句中,符合c语言语法的赋值语句是Aa=7+b+c=a+c; Ba

17、=7+b+=a+7; C a=7+b,b+,a+ D.a=7+b,c=a+7;解析:答案A 和B均错,c语言中的赋值运算符的左边只能是变量或表示一个存储单元的表达式。答案c错,c 语言中规定任何语句都必须有一个分号来结束。答案D 正确,c语言允许用逗号运算符把若干个表达式连接起来形成逗号表达式。答案:D【例题3-23】经过下述赋值后,变量x的数据类型是()int x=3; double y; y=(double)x;A.int B.char C.float D.double解析:将变量x的值3强制转换成double类型,再赋值给y,变量x的数据类型还是int型。因为任何变量定义后其数据类型不能

18、改变。答案:A【例题3-24】以下程序的输出结果( )main( )float x=3.6;int i;i=(int)x;printf(“x=%f,i=%d”,x,i);A.x=3.600000,i=4 B. x=3, i=3 C. x=3.600000,i=3 D. x=3 i=3.600000解析:变量被作强制类型转换后,其类型不会改变,改变的只有表达式的值,因此,执行语句i=(int )x 后,x的值仍为3.6 ,但i的值为3。答案:C【例题3-25】设x=2.5,a=7,y=4.7,算术表达式x+a%3*(int)(x+y)%2/4 的值A2.5 B7 C4.7 D2.25 解析:取模

19、运算只能在整形数据之间进行,a为整形变量。因为%、*、/这三个运算符的优先级别相同,类型转换符优先于*、/运算符,a的值为7,7%3=1,又因为(int)(2.5+4.7)=7,1*7=7,7%2=1,1/4=0,所以表达式 x+a%3*(int)(x+y)%2/4=x+0=2.5答案:A【例题3-26】下述程序的输出结果main()int a=016;a%=6-1;printf(“%d,”,a);a+=a*=a/=3;printf(“%d,”,a+);printf(“%d”,+a);A.4,0,3 B.4,0,2 C. 4,2,4 D. 4,1,3解析:(1)016是八进制整形常量,十进制表

20、示为14。复合的赋值运算符的优先级别比算术运算符“-”的优先级别低,先计算6-1=5,在计算a%5(即14%5得4)赋值给a,所以a的值是4,先输出4。(2)计算a/=3(即4/3等于1,赋值给a,a的值为1)。计算a*=1(a*1等于1*1,赋值给a,a的值为1),计算a+=1(a+1等于1+1=2,赋值给a,a的值为2)。(3)执行printf(“%d,”,a+);语句,先输出a的值为2,然后,变量a的值在自增1(a 的值为3)。(4)执行printf(“%d,”,+a);语句,先将变量a的值自增1(a 的值为4),再输出a的值4。答案:C【例题3-27】以下程序的输出结果是()main(

21、 )int a=1,b=2,c=3,k;k=a+b+c+;printf(“n%d,%d,%d,%d”,a,b,c,k);A.1,2,3,6 B.2,3,4,6 C.1,3,3,7 D.1,3,3,6解析:表达式a+b+c+应理解为:(a+)+(b+)+(c+)所以执行此语句后,k的值是6,a的值是2,b的值是3,c的值是4,输出结果为:2,3,4,6。答案:B【例题3-28】下面正确的语句是()A. int x=y=25; B.int z=(x+y)+; C. x=+8= =7; D.x % =4.5;解析:在c 语言中,可以在定义变量时对变量初始化,例如:int x=25,但是,对几个变量赋同一初值时不允许

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论