1、关于C语言的标识符,以下错误的说法是________。
A、C语言中的标识符只能由字母、数字和下划线组成
B、C语言标识符的第一个字符必须为字母或下划线
C、标识符分为关键字、预定义标识符和用户标识符,关键字和预定义标识符都不能用作用户标识符,如变量名
D、C语言中的标识符区分大小写
解析:答案选C
A、B、D:
C语言的标识符一般应遵循如下的命名规则:
1、标识符必须以字母a-z、A-Z或下划线开头,后面可跟任意个(可为0)字符,这些字符可以是字母、下划线和数字,其他字符不允许出现在标识符中;
2、标识符区分大小写字母;
3、标识符的长度,c89规定31个字符以内,c99规定63个字符以内;
4、C语言中的关键字,有特殊意义,不能作为标识符;
5、自定义标识符最好取具有一定意义的字符串,便于记忆和理解。故A、B、D正确。
C:标识符分为两类,分别为关键字和用户自定义标识符。关键字是有特殊含义的标识符,如 true、false表示逻辑的真假。用户自定义标识符是由用户按标识符构成规则生成的非保留字的标识符,如abc就是一个标识符。关键字不能作为用户标识符,但预定义标识符可以用作用户标识符,例如:define。故C错误。
2、关于C语言的数据类型,以下错误的说法是________。
A、若要准确、无误差地表示自然数,应使用整数类型
B、若要保存带有多位小数的数据,应使用双精度类型
C、修饰词signed、unsigned、long、short等只能用于整型和字符型数据类型
D、若只处理“真”和“假”两种逻辑值,应使用逻辑类型
解析:答案选D
C语言的数据类型如下:
B:单精度float类型可提供6位有效数字,双精度double类型可提供16位有效数字,所以要保存带有多位小数的数据,要使用双精度类型。故B正确。
D:C语言中的逻辑值其实对应的是整型0和1,没有逻辑数据类型。故D错误。
3、关于C语言的数据类型,以下错误的说法是________。
A、在C语言中,没有逻辑类型
B、在C语言中,int型数据在内存中的存储形式是反码
C、在C语言中,int、char和short三种类型数据在内存中所占用字节数是由C语言的编译系统决定的
D、在内存中,float和double型数据一律以指数形式存放,所以往往存在误差
解析:答案选B
A:C语言中的逻辑值其实对应的是整型0和1,没有逻辑类型。故A正确。
B:计算机中的有符号数有三种表示方法,即:原码、反码和补码。三种表示方法均有符号位和数值位两部分:其中符号位都是用‘0’表示“正”,用‘1’表示“负”。数值位的三种表示方法各不相同。int类型在计算机内存总以补码形式存储,使用补码可以将符号位和其他数据位统一处理,同时减法也可以转换为加法来处理,简化了运算规则。故B错误。
C:请看示例一、二:C语句意思没问题,但是这三种类型在32位和64位操作系统下的字节大小一样,但64位操作系统下指针大小(8bit)是32位操作系统下指针大小(4bit)的两倍。
D:在内存中,float和double型数据一律以指数形式存放,所以往往存在误差。选项D正确。
4、关于C语言的常量和变量,以下错误的说法是________。
A、C语言中有4种基本常量:整型、实型、字符型和字符串常量
B、const变量在定义时必须初始化,并且之后其值不能再改变
C、一个变量有三要素,即变量名、变量的值和变量的运算
D、在C语言中,变量必须先定义后使用
解析:答案选C
A、选项A正确。
B、
此处所指的const变量应该叫做常变量,个人理解说它是常量,因为一旦定义,之后其值不能再改变,说它是变量,定义的地方还可以改动其值,所以也具备一定变量的性质。
C、在C语言中,一个变量有三要素,即变量名、变量的存储空间和变量的值。选项C错误
D、在C语言中,变量和函数都必须先定义后使用。选项D正确。
5、关于C语言的运算符和表达式,以下错误的说法是________。
A、在C语言算术表达式的书写中,运算符两侧的操作数类型必须一致
B、条件运算符是C语言中唯一的三元运算符
C、相同数据类型的元素进行算术运算(+、-、*、/)得到结果还保持原操作数的数据类型
D、C语言中表达式一定有值
解析:答案选A
A、在C语言中,允许不同类型量的混合运算,在计算时计算机内部会将它们转换成相同类型的量,例如除法运算符,当左右两侧有一侧出现浮点数时,结果会自动变为浮点数。选项A错误。
B、条件运算符是C语言中唯一的三元运算符。选项C正确。C语言中的操作符整理如下:
C、相同数据类型的元素进行算术运算(+、-、*、/)得到结果还保持原操作数的数据类型,若有一侧操作数由整型变为浮点型,则结果也会变为浮点型。选项C正确。
D、C语言中表达式的定义:表达式是一种有值的语法结构,它由运算符(变量、常量、函数调用返回值)结合而成,每个表达式一定有一个值。选项D正确。以下是C语言表达式分类:
6、关于C语言中的算术运算符,以下错误的说法是________。
A、若要实现整除,则“/”号两边的操作数都要求是整型
B、若要除法的计算结果是小数,则要求“/”号的两边的操作数都是实型
C、取余运算“%”要求运算符两边的操作数都是整数
D、C语言中算术运算符“*”、“/”和“%”运算的优先级相同
解析:答案选B
A、要实现整除,则“/”号两边的操作数都要求是整型, C语言的除法运算,不要求一定是整形,可以是浮点型(实型),除数和被除数的类型不一样都可以,只有一个要求,就是除数不能为0,否则会出现“除以0错误”。选项A正确,选项B错误。
C、取余运算“%”要求运算符两边的操作数都是整数。选项C正确。
D、C语言中算术运算符“*”、“/”和“%”运算的优先级相同。选项D正确。
以下是常见运算符优先级:
同一优先级的运算符,运算次序由结合方向所决定。
简单记就是:! > 算术运算符 > 关系运算符 > && > || > 赋值运算符
7、关于C语言的逻辑运算符和逻辑表达式,以下错误的说法是________。
A、逻辑运算符“!”的运算优先级高于其它逻辑运算符和所有的算术、关系运算符
B、在C语言中,关系表达式和逻辑表达式的值只能是0或1(分别表示“假”、“真”)
C、在C语言中,关系运算符和逻辑运算符两边操作数的数据类型只能是0或1
D、在C语言中,关系运算符和逻辑运算符两边操作数可以是任何类型的数据
解析:答案选C
A、根据上表可以看出逻辑运算符“!”的运算优先级高于其它逻辑运算符和所有的算术、关系运算符。选项A正确。
B、C语言中,关系表达式(是指运算符为<,<=,>,>=,==,!=的表达式,返回值为0或1,例如a!=b,a>=0等。)和逻辑表达式(是指运算符为或||、与&&、非!的表达式,返回值为0或1,0表示false,非0表示true。例如!0返回1,0&&1返回0,0||1返回1。)的值是0或1。选项B正确。
C、C语言中,关系运算符和逻辑运算符两边操作数可以是任何类型的数据,并按非0即为真的规则参与计算。选项C错误。
D、C语言中,关系运算符和逻辑运算符两边操作数可以是任何类型的数据,并按非0即为真的规则参与计算。选项D正确。
8、关于C语言的自增、自减运算,以下错误的说法是________。
A、自增、自减运算符只能作用于变量,而不能作用于常量或表达式
B、自增、自减运算中前缀运算(如:++i)是“先变后用”,而后缀运算(如:i–)是“先用后变”
C、自增、自减运算符的结合性是自右向左的
D、若变量已正确定义,则(-i)++是合法的C语言表达式
解析:答案选D
D、自增、自减运算不能用于表达式,由于(-i)属于表达式,所以选项D错误,但表达式-i++却是合法的。
自增自减规则:转载自:关于C语言中自增和自减运算符的使用及注意事项
++是自增运算符,是单目运算符,使单个变量的值增1。它有两种使用情况:
1)前置:++i,先执行i=i+1,再使用i值。
例如:
j=3;k=3;k=++j;
执行“k=++j;”后,k=4,j=4。
上述语句等效为:j=3;j=j+1;k=j;
2)后置:i++,先使用i值,再执行i=i+1。
例如:
j=3;k=3;k=j++;
执行“k=j++;”后,k=3,j=4。
上述语句等效为:j=3;k=j;j=j+1;
–是自减运算符,是单目运算符,其作用是使单个变量的值减1。它有两种使用情况:
1)前置:–i,先执行i=i-1,再使用i值。
例如:
j=3;k=3;k=–j;
执行“k=–j;”后,k=2,j=2。
上述语句等效为:j=3;j=j-1;k=j;
2)后置:i–,先使用i值,再执行i=i-1。
例如:
j=3;k=j–;
执行“k=j–;”后,k=3,j=2。
上述语句等效为:j=3;k=j;j=j-1;
注意事项:
1)自增和自减运算符,只能用于变量,不能用于常量和表达式。例如5++,–(a+b)等都是非法的。也可用在指针变量中,使指针向上或向下一个地址。
2)表达式k=-i++等效于k=(-i)++还是k=-(i++),因为负号运算符和自增运算符优先级相同,哪一个正确就得看结合方向。自增、自减运算符及负号运算符的结合方向是从右向左。因此,上式等效于k=-(i++);若i=5,则表达式k=-i++运算之后k的值为-5,i的值为6。此赋值表达式的值即为所赋的值-5。不要因为k=-i++等效于k=-(i++)就先做“++”运算!这里采用的是“先用后变”,即先拿出i的值做负号“-”运算,把这个值赋给变量k之后变量i才自增。
9、下列变量定义和表达式中,正确的是________。
A、int a=1; a+=-a+=a*a;
B、int a=1,b=2; a=7+b=a+7;
C、int a=1,b=2,c=3; a=b==c;
D、int x=y=10;
解析:答案选C
A、在C语言中,赋值运算的结合性是自右向左的,赋值运算符左侧只能是一个变量名,即不可以给一个计算表达式赋值,a+和-a+都是计算表达式。选项A错误。
B、在C语言中,赋值运算的结合性是自右向左的,赋值运算符左侧只能是一个变量名,即不可以给一个计算表达式赋值,7+b是计算表达式。选项B错误。
C、选项C是将b==C的值(为0)赋给变量a, a=0,表述正确。选项C正确。
D、变量定义时不能连续赋初值,可以写成:int x=10,y=10。选项D错误。
10、执行语句x=(a=3,b=a–);后变量x,a,b的值依次为________。
A、3,3,2
B、2,3,2
C、3,2,3
D、2,3,3
解析:答案选C
11、已知int i; 以下关于sizeof错误的说法是________。
A、sizeof(int) 是合法的C语言表达式
B、sizeof int是合法的C语言表达式
C、sizeof i是合法的C语言表达式
D、sizeof是关键字,sizeof()是运算符
解析:答案选B
sizeof是计算变量在内存的占空间的大小,单位是字节。
A、sizeof(int) 是计算基本数据类型int的占用空间的大小,单位是字节。选项A正确。
B、用sizeof计算基本数据类型占用空间的大小时,数据类型必须加上圆括号()。选项B错误。
C、sizeof对变量名或者字面值可以不用括号,但计算类型必须加括号。选项C正确。
D、sizeof是关键字,sizeof()是长度运算符。选项D正确。
C语言中sizeof的使用规则:转载自:C语言----C语言中sizeof的用法
1)使用sizeof是计算变量在内存的占空间的大小,单位是字节。请看示例一:
2)使用sizeof计算基本数据类型变量的占用空间的大小,单位是字节。请看示例二:
3)sizeof对变量名或者字面值可以不用括号,但计算类型必须加括号。请看示例三:
4)用于计算数组长度以及对字符数组时与strlen的区别。请看示例四:
使用sizeof计算数组时,结果为元素个数*元素占用空间的大小,当数组为字符数组时,sizeof的功能是一致的,只不过当使用字符数组定义字符串的时候,对于字符串比如hello,数组中会自动增加一个元素’\0’,所以sizeof计算的结果为6,而strlen是计算字符串长度的,遇到’\0’结束,但是不会把’\0’计算在内,因此strlen计算的结果为5,这与我们感觉上的字符串的长度为5的感觉是一致的,这就是strlen和sizeof在计算字符数组的时候的区别。
5)使用sizeof计算指针的占用空间大小。请看示例五:
12、关于C语言运算符的优先级和结合性,以下错误的说法是________。
A、逗号运算符的优先级最低
B、以下运算符的运算优先顺序是:算术运算符<关系运算符<赋值运算符<逻辑与运算符
C、条件运算的结合性是自右向左
D、表达式按运算符的优先级从高到低进行计算,若相邻的两个运算符优先级相同,则按其结合性的方向进行运算
解析:答案选B
A、根据第六题表格归纳可知逗号运算符的优先级最低。选项A正确。
运算符的优先顺序为:! >算术运算符>关系运算符>&&>||>赋值运算符。同一优先级的运算符,运算次序由结合方向所决定。选项B错误。
C、条件运算的结合性是自右向左。选项C正确。
如何理解条件运算的结合性是自右向左?例子如下:
int x = 3,y = 10;x > y ? 100 : ++y > 2 ? 20 : 30;
D、表达式按运算符的优先级从高到低进行计算,若相邻的两个运算符优先级相同,则按其结合性的方向进行运算。选项D正确。
条件运算的运算规则如下:
条件运算符有时候也称为三元运算符,因为它是唯一需要 3 个操作数的运算符,条件表达式的一般形式为:条件 ? 表达式1 : 表达式2。
如果条件表达式为真,整个表达式的值为表达式1的值;
如果条件表达式为假,整个表达式的值为表达式2的值。
示例六:用条件表达式比较两个数的大小:
示例七:用条件表达式求三个数的最值(先求两个数的最值,再将最值与第三个数比较,同理可以求四个数五个数的最值,但当数较多时,不建议这么使用,可读性较低)。
13、下面四个选项中,均是C语言关键字的选项是________。
A、auto、enum、include
B、sizeof、typedef、continue
C、unsigned、union、scanf
D、if、struct、type
解析:答案选B
C语言中有32个常见关键字:
数据类型关键字:char、double、float、int、short、long、unsigned、signed、struct、union、void、enum
控制语句关键字:for、do、while、break、continue、if、else、goto、switch、case、default、return
存储类型关键字:auto、extern、register、static
其它关键字:const、sizeof、typedef、volatile
14、以下叙述中错误的是________。
A、用户所定义的标识符允许使用关键字
B、用户所定义的标识符应尽量做到“见名知意”
C、用户所定义的标识符必须以字母或下划线开头
D、用户定义的标识符中,大、小写字母代表不同标识
解析:答案选A
c语言中用户标识符的命名规则:
1、标识符由字母(A-Z,a-z)、数字(0-9)、下划线“_”组成,并且首字符不能是数字,但可以是字母或者下划线。 例如,正确的标识符:abc,a1,prog_to。
2、不能把C语言关键字作为用户标识符,例如if,for,while等。
3、标识符长度是由机器上的编译系统决定的,一般的限制为8字符(注:8字符长度限制是C89标准,C99标准已经扩充长度,其实大部分工业标准都更长)。
4、标识符对大小写敏感,即严格区分大小写。 一般对变量名用小写,符号常量命名用大写。
5、标识符命名应做到“见名知意”,例如,长度(length),求和、总计(sum),圆周率(pi)。所以选项B、C、D正确,选项A错误。
15、以下叙述正确的是________。
A、可以把define和if定义为用户标识符
B、可以把define定义为用户标识符,但不能把if定义为用户标识符
C、可以把if定义为用户标识符,但不能把define定义为用户标识符
D、define和if都不能定义为用户标识符
解析:答案选B
可以把define定义为用户标识符,但不能把if定义为用户标识符,if是关键字。
16、下列四个选项中,均是不合法标识符的选项是________。
A、AAA、F_117、do
B、float、0a0、A
C、b-a、goto、int
D、-123、temp、INT
解析:答案选C
A、AAA正确;F_117正确;do是C语言关键字,不合法。、
B、float是C语言关键字,不合法;Oa0首字母是数字,不合法;A正确。、。
C、b-a中“-”不能在用户标识符里出现,不合法;goto、int是C语言关键字,不合法。
D、-123中“-” 不能在用户标识符里出现,不合法;temp正确;INT正确。
综上所述,答案选C。
17、C语言中的基本数据类型包括________。
A、整型、实型、字符串
B、整型、实型、逻辑型、字符型
C、整型、字符型、布尔型
D、整型、实型、字符型
解析:答案选D
C语言中的基本数据类型请参考题二树状图,没有逻辑型、字符串和布尔型。选项D正确。
18、在C语言中,char型数据在内存中的存储形式是________。
A、BCD码
B、ASCII码
C、原码
D、反码
解析:答案选B
在C语言中,char型数据是将一个字符常量放到一个字符变量中,并不是把该字符本身放到内存单元中去,而是将该字符的相应的ASCII代码放到存储单元中。选项B正确。
BCD和ASCII码:转载自:ASCII与BCD的理解,主要讲解BCD编码
BCD:即BCD代码。Binary-Coded Decimal,简称BCD,称BCD码或二-十进制代码,亦称二进码十进数。是一种二进制的数字编码形式,用二进制编码的十进制代码。这种编码形式利用了四个位元来储存一个十进制的数码,使二进制和十进制之间的转换得以快捷的进行。这种编码技巧,最常用于会计系统的设计里,因为会计制度经常需要对很长的数字串作准确的计算。相对于一般的浮点式记数法,采用BCD码,既可保存数值的精确度,又可免却使电脑作浮点运算时所耗费的时间。此外,对于其他需要高精确度的计算,BCD编码亦很常用。
ASCII:即ASCII码(American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是现今最通用的单字节编码系统,并等同于国际标准ISO/IEC 646。
19、设有补码表示的两个单字节带符号整数a=0100 1110和b=0100 1111,则a-b的结果用补码表示为________。
A、11111111
B、10011101
C、00111111
D、10111111
解析:答案选A。
解此题需要简单了解原码、反码、补码的概念以及计算(默认8bit):
对于正数而言,原码,反码,补码都是一样的。
对于负数而言,原码,反码,补码表示不一样。
原码:将最高位作为符号位(0表示正,1表示负),其它数字位代表数值本身的绝对值的数字表示方式。
反码:如果是正数,则表示方法和原码一样;如果是负数,符号位不变,其余各位取反,则得到这个数字的反码表示形式。
补码:如果是正数,则表示方法和原码一样;如果是负数,则将数字的反码加上1(相当于将原码数值位取反然后在最低位加1)。
20、在C语言中,假定一个int型数据在内存中占2个字节(16位计算机),则unsigned int型数据的取值范围为________。
A、0-255
B、0-32767
C、0-65535
D、0-2147483647
解析:答案选C
int占2个字节(16位)范围为:-32768~32767([-215,+215-1]),这里为什么是2的15次方呢,因为int包含有符号类型,也就是说表示的数有正数也有负数,最高位是符号位,不表示大小,所以是15次方,而unsigned int也是占两个字节,但最高位仍表示数值,所以是2的16次方,范围为:0~65535([0,+2^16-1])
21、下列四个选项中,均是合法整型常量的选项是________。
A、139、-0xffff、012
B、-0xcde、01a、0xe
C、-01、986.012、0668
D. -0x48a、2e5、0x
解析:答案选A
A、十进制数139合法;0x开头表示的是十六进制数,-0x开头则是负数,之后每一位小于f,(0\1\2\3\4\5\6\7\8\9\a\b\c\d\e\f)-0xffff=-2^16=-65535,-0xffff合法;0开头表示的是八进制,之后每一位小于8(1\2\3\4\5\6\7),012=10,012合法。选项A正确。
B、-0xcde合法;01a不合法;0xe合法。选项B错误。
C、-01合法;十进制浮点数合法;0668不合法。选项C错误。
D、-0x48a合法;2e5为科学计数法。
使用科学计数法的注意事项:1、e或E后的正号可以省略(如,2E5),负号不可省略;2、可以省略小数部分(如3.E-3)或整数部分(如.3E-3),但不能同时省略两者;3、不能在常量中加空格(如1.23E +4或1.23 E+4)均为错误写法。2e5合法;0x表示八进制数,不合法;4、 C语言语法规定,字母e或E之前必须要有数字,且e或E后面的指数必须为整数。如e3、5e3.6、.e、e等都是非法的指数形式。
22、下列四个选项中,均是不合法的浮点数的选项是________。
A、160.、0.12、e3
B、123、2e4.2、.e5
C、-.18、123e4、0.0
D、-e3、.234、1e3
解析:答案选B
A、可以省略小数点前面的数字(整数部分)或小数点后面的数字(小数部分),但不能同时省略。仅在包括一个指数时可省略小数点。空白字符不能分隔常量的数字或字符。160.合法;0.12合法;e3只有指数没有底数,不合法。
B、123没问题,但不是合法的浮点数,不合法;2e4.2指数不能为小数,不合法;.e5同时省略了小数点前后的正数部分和小数部分,不合法。
C、-.18同时省略了小数点前后的正数部分和小数部分,不合法;123e4合法;0.0合法。
综上所述,答案选B。
23、以下错误的字符串常量是________。
A、‘abc’
B、“12’12”
C、“0”
D、“”
解析:答案选A
字符常量是由一对单撇号括起来的单个字符,如 ‘a’、‘D’、‘?’、‘$’。在 C 语言中,除了字符常量外还有字符串常量,顾名思义就是多个“字符”串在一起。与字符常量有所不同,字符串常量是用“双撇号”括起来的多个字符的序列,如"How are you"、“I love you”、“你好”。当然,只要是“双撇号”括起来的,就算只有一个字符也叫字符串,如"a"。字符常量 'a’与字符串常量"a"是不同的。
综上所述,答案选A。
24、以下字符中不是转义字符的是________。
A、‘\a’
B、‘\b’
C、‘\c’
D、‘\’
解析:答案选C
C语言中常见转义字符:
25、若有说明语句:char c=‘\72’;则变量c________。
A、包含1个字符
B、包含2个字符
C、包含3个字符
D、说明不合法,c的值不确定
解析:答案选A
因为'\72'是转义字符,表示其ASCⅡ码为八进制数72的字符,十进制数为58,即':'字符。ASCII码表:
26、已定义ch为字符型变量,以下赋值语句中错误的是________。
A、ch=‘’;
B、ch=62+3;
C、ch=NULL;
D、ch=‘\xaa’;
解析:答案选A
A、要想给ch赋值为’‘,正确的做法应该是ch=’\';
B、C、D请看示例九:
27、若变量a与i已正确定义,且i已正确赋值,合法的语句是________。
A、a==1
B、++i;
C、a=a++=5;
D、a=int(i);
解析:答案选B
A、a==1缺少分号,不是语句,不合法。选项A错误。
B、++I,自增1,合法。选项B正确。
C、=左边不可以是表达式,不合法。选项C错误。
D、强制转换的正确写法应该是a=(int)I;不合法。选项D错误。
28、若变量已正确定义并赋值,下面符合C语言语法的表达式是________。
A、a:=b+1
B、a=b=c+2
C、int 18.5%3
D、a=a+7=c+b
解析:答案选B
A、表达式不合法。选项A错误。
B、a=b=c+2是赋值表达式。选项B正确。
C、强制类型转换格式为(数据类型)18.5%3。选项C错误。
D、=左边不可以是表达式,不合法。选项D错误。
29、若有代数式5ab/cd,则错误的C语言表达式是________。
A、a/c/db5
B、5ab/c/d
C、5ab/cd
D、ab/c/d*5
解析:答案选C
30、以下关于long、int和short类型数据占用内存大小的叙述中正确的是________
A、均占4个字节
B、根据数据的大小来决定所占内存的字节数
C、由用户自己定义
D、由C语言编译系统决定
解析:答案选D。
关于long、int和short类型数据占用内存大小的示例请看11题。选项D正确。
31、a,b为整型变量,二者均不为0,以下关系表达式中恒成立的是________。
解析:答案选C
32、以下表达式中,运算结果错误的是________。
A、5%2 的结果为1
B、5%(-2)的结果为-1
C、(-5)%2 的结果为-1
D、(-5)%(-2)的结果为-1
解析:答案选B
请先看示例十:
注意:
printf函数中,%用于格式控制,如果想输出文本%,需要使用两个百分号,即%%就可以了。
C语言中的取模运算%规则:如果第一个操作数为负数,则得到的模也是负数;如果第一个操作数是正数,则得到的模也是正数。与第二个操作数的正负没有关系,只跟第一个操作数有关。
其实正常用除法运算也可以得到,只是熟悉规则有时候可以快速判断而不需要计算:
A、5%2=2…1。选项A正确。
B、5%(-2)=-2…1。选项B错误。
C、(-5)%2=-2…-1。选项C正确。[PS:有的人可能会算成(-5)%2=-3…1,说明一下,余数指整数除法中被除数未被除尽部分,且余数的取值范围为0到除数之间,在此选项中,余数的取值范围应该是[-5,0],所以余数应该是-1而不是1。
D、(-5)%(-2)=2…-1而不是3…1。选项D正确。
33、设x、y和z是int型变量,且x=3, y=4, z=5,则下面表达式中值为0的是________。
A、‘x’ && ‘y’
B、x<=y
C、x||y+z&&y-z
D、!((x
解析:答案选D
请先看示例十一:
逻辑运算符&&和||相当于电路中的串联和并联,&&:要想为真,在串联中,开关必须同时闭合,也就是同时为真才为真;||:在并联中,子路中的开关有一个闭合,电路就能连通,也就是见真为真。C语言中非0为真,0即为假。
A、'3’的ASCII码值为51为真,'4’的ASCII码值为52为真,故真&&真=1。
B、x<=y即4<=5满足4<5即可,结果为1。
C、此选项判断前要先了解一下&&和||的运算规则:
逻辑或||:表达式1 || 表达式2 || 表达式3…如果表达式1的运算结果为真,则整个表达式的结果为真,同时不会再执行后面的表达式,如果表达式1的运算结果为假,则根据表达式2的运算结果继续判断。
逻辑与&&:表达式1 && 表达式2 && 表达式3…如果表达式1的运算结果为假,则整个表达式的结果为假,同时不会再执行后面的表达式,如果表达式1的运算结果为真,则根据表达式2的运算结果继续判断。
总结一下:先看第一个式子,这个式子根据&&或者||的规则可以一眼判断为真假,后面就不用看了,也就是说如果遇到&&,第一个式子为假,整个运算结果就为假,遇到||第一个式子为真,整个运算结果就为真,后面式子用看了。
&&和||的混合运算:&&的优先级是比||的优先级更高。在 &&和||混合运算时,整个表达式可以看成||的表达式,编译器从左向右开始计算&&的表达式,当某个&&表达式为真时,停止计算,整个表达式的值为真。
再来看C选项,三个表达式的值都为非0,不用判断结果也是1。而实际上先是判断y+z&&y-z结果为真,停止计算,表达式结果为真。
D、!((x
第一步:x
第三步:真&&假=假;
第四步:假||真=真;
第五步:!真=假=0。选项D正确。
34、以下常量中,能够代表逻辑“真”值的常量是________。
A、‘\0’
B、0
C、‘0’
D、NULL
解析:答案选C
A、‘\0’和’0’都是字符,其中’\0’对应的就是ASCII码表的第一个字符——空字符NULL,判断一个字符串是否结束的标志就是看是否遇到’\0’,如果遇到’\0’,则表示字符串结束。而字符’0’对应的ASCII码是48,48对应的十六进制数就是0x30,非0即为真。选项C正确。
35、已知x=43,ch=‘A’,y=0;则表达式(x>=y&&ch<‘B’&&!y)的值是________。
A、0
B、语法错
C、1
D、“假”
解析:答案选C
36、判断char型变量cl是否为小写字母的正确表达式是________。
A、‘a’<=cl<=‘z’
B、(cl>=a)&&(cl<=z)
C、(‘a’>=cl)||(‘z’<=cl)
D、(cl>=‘a’)&&(cl<=‘z’)
解析:答案选D
根据C语言常识可知选项D正确。
37、执行下列语句后,a和b的值分别为________。
int a,b;
a=1+‘a’;
b=2+7%-4-‘A’;
A、-63,-64 B、98,-60 C、1,-60 D、79,78
解析:答案选B
请先看示例十二:
38、在位运算中,操作数每右移一位,其结果相当于________。
A、操作数乘以2
B、操作数除以2
C、操作数乘以16
D、操作数除以16
解析:答案选B
计算机中的数在内存中都是以二进制形式进行存储的,而位运算就是直接对整数在内存中的二进制位进行操作。例如:
左移一位:0001—>0010,由1变为2,左移乘以2;
右移一位:0010—>0001,由2变为1,右移除以2;选项B正确。
39、整型变量x和y的值相等,且为非0值,则以下选项中,结果为零的表达式是________。
A、x || y
B、x | y
C、x & y
D、x ^ y
解析:答案选D
A、x || y:真||真=真。选项A错误。
判断B、C、D需要先简单了解位运算符的运算规则:
^ 和 | 运算符都是对两个操作数执行逻辑或运算,差异是当两个操作数的位都是1时,^产生0而|产生1。选项D正确,选项B错误。
C、与运算&跟逻辑与运算&&判断真假一样使用,所以选项C结果应该为1。例如由0001和0001可知两个相同的数,位为0的地方与运算还是0,由于两个数相同,所以位为1的地方与运算还是1,由于x和y都是非0值,所以与运算结果为非0。选项C错误。
关于运算符号&(与运算)、|(或运算)、^(异或运算)规则整理如下:
40、下列表达式中,正确的C语言表达式是________。
A、++i
B、2++
C、(i+j)++
D、‘A’++
解析:答案选A
B、D是对常数自增了,不合法,C选项是对表达式自增,不合法。选项A正确。
41、sizeof(float);是________。
A、一种函数调用
B、一个不合法的表达式
C、一个整型表达式
D、一个浮点表达式
解析:答案选C
关于sizeof()的使用示例请看第11题。选项C正确。
42、C语言中要求对变量作强制定义的主要理由是________。
A、便于移植
B、便于写文件
C、便于编辑预处理程序的处理
D、便于确定类型和分配空间
解析:答案选D。
C语言中,对变量的使用,首先要先定义,说明其数据类型。原因可能如下:
1、不同类型的变量,其编码表示方式可能不同。
2、不同类型的变量,其占有的空间大小不同,不事先说明无法在内存中开辟空间。
在C语言编程中,没有定义的变量或者中途定义的话可能会导致程序出错,要求对变量作强制定义(先定义,后使用)的主要理由是:便于确定类型和分配空间。选项D正确。
43、设a和b均为double型常量,且a=5.5、b=2.5,则表达式(int)a+b/b;的值是______。
A、6.500000
B、6
C、5.500000
D、6.000000
解析:答案选D
(int)a+b/b=5+b/b=5+1.000000=6.000000,强制类型转换a,直接保留整数部分,不用四舍五入。选项D正确。
44、以下程序的运行结果是________。
#include
int main()
{ int a,b;
char c='A';
a=(int)((double)3/2+0.5+(int)1.99*4);
b=1+c%a;
printf("%d,%d",a,b);
return 0;
}
解析:答案是:6,6
45、运行下列程序,输入:200<回车>,以下程序的运行结果是________。
#include
int main()
{ int income;
scanf("%d",&income);
if (income>=20000)
printf("Rich");
else if(10000<=income<20000)
printf("Middle");
else printf("Pool");
return 0;
}
解析:答案是:Middle
#include
int main()
{ short int a=4,b=-4;
printf("%d,%d,%d,%d,",a<<1,a>>1,b<<1,b>>1);
printf("%d,%d",a,b);
}
解析:答案是:8,2,-8,-2,4,-4
程序运行截图:
47、已知char ch=277;,若将ch看作是1个字节长度的整形量,则ch的值是________。
解析:答案是:21
1个字节有8位,char类型的ch只有一个字节。
277正常放进int类型的二进制数是:0000 0001 0001 0101
但是277是定义为char类型,所以只取最低8位:0001 0101=21
程序运行截图:
48、C语言中的整形变量用保留字________来说明,字符变量用保留字________来说明,实数变量用保留字________或________来说明。
解析:答案是:int、char 、float 、double
49、以下程序的功能:输入一个三位整数,实现循环右移一位。如输入:123<回车>,则输出为:312,请填空:
#include
int main()
{ int n,tmp;
printf("请输入一个三位整数(100-999):");
scanf("%d",&n);
if (n>=100&&n<=999)
{ tmp=__________;
n=__________;
n=tmp*100+n;
printf("%d",n);
}
else
printf("输入数据错误");
return 0;
}
解析:答案是:(1) n%10 (2) n/10
程序思路:
1、输入一个三位数;
2、取下三位数的个位数;
3、三位数除以10变为两位数;
4、将个位数乘以100;
5、将3、4中的两个数相加即可;
图示如下:
50、以下程序的运行结果是________。
#include
int main()
{ int i,j,k;
i=3; j=2; k=1;
printf("%d", i<j==j<k);
return 0;
}
51、设a,b,c,t为整型变量,初值为a=3,b=4,c=5,执行完语句t=!(a+b)+c-1&&b+c/2后,t的值是________。
解析:答案是:1
#include
int main()
{ int i=1,j=1,k=1,x;
x=++i||++j&&++k;
printf("%d%d%d%d",x,i,j,k);
return 0;
}
解析:答案是:1211
#include
int main()
{ int a=4; ;
char plain='A',key='1',cipher;
printf("%d,%d ",a<<1,a>>1);
printf("%c,",plain);
cipher=plain^key;
printf("%c,%c",cipher,cipher^key);
return 0;
}
54、设x和y均为int型变量,且x=1,y=2,则表达式1.0+x/y的值为________。
解析:答案是:1.0
55、表达式 -18 || 18 的值是________。表达式-18 && 18 的值是________。
56、C语言表达式!(3<6)||(4<9)的值是________。
57、若有定义:char c=‘\010’; 则变量c中包含的字符个数为________.
解析:答案是:1
\ddd格式为+十进制数,是一个字符。
58、已知 i=5.6;写出语句 a=(int)i; 执行后变量 i 的值是________。
解析:答案是:5
强制类型转换和位运算符都不会改变变量原有大小,类似于加减乘除运算。
59、以下程序的运行结果是________。
#include
int main()
{ int i=010,j=10;
printf("%d,%d\n",++i,j--);
return 0;
}
解析:答案是:9,10
60、已知有变量a,其值为9,则表达式a*=2+3的值是________。
解析:答案是:45
61、已知有变量a,其值为9,则表达式a+=a-=a+a的值是________。
解析:答案是:-18
62、已知int a=1;则执行语句“x=a+2, b=a–;”后变量x,a,b的值依次为_。
解析:答案是:3 0 1
63、以下程序的运行结果是________。
#include
int main()
{ int y=3,x=3,z=1;
printf("%d,%d\n",(++x,y++),z+2);
return 0;
}
64、已知在16位计算机上有如下C语言定义:int i=3; 则表达式:sizeof i*i ; 的值为________。
#include
int main()
{ int i = 5;
printf("%d,",i);
printf("%d,",sizeof(i++));
printf("%d",i);
return 0;
}
66、以下程序的运行结果是________。
#include
int main()
{ int a=3, b=2;
int c=1, d=0;
printf("%d",d==a>b+c);
return 0;
}
67、已知char ch=249; int i=ch;则i的十进制值是________。
解析:答案是:-7
68、已知unsigned char ch=249; int i=ch;则i的十进制值是________。