1 在c语言中,不允许有常量的数据类型是()
①整型 ②结构型 ③字符型 ④字符串
【分析】C语言中,允许出现整型、实型、字符型、字符串的常量,其中整型常量又区分为短整 型常量和长整型常量。
【答案】②
2 下列数据中,不属于常量的是()
① 123L ②'\012' ③"12.3L" ④ 12.3L
【分析】④中的数据不是常量,因为实型常量是不区分单精度和双精度的,12.3后跟字母L 是错误的;①中是长整型常量;②中是以转义字符方式出现的字符型常量;③中是字 符串常量。
【答案】④
3 -12345E-3代表的十进制实数是________________________。
【分析】这是用指数形式表示的实型常量,对于指数形式“土aaaaaE土bbb”的实数,其值为“土 aaaaax 10土bbb”。("土"表示正负)
【答案】- 12.345
4 字符串“\\012\012”在内存中占用的字节数是___________________个。
【分析】一个字符串所占用的内存字节数等到于其中字符的数目再加1。题目中给出的字符串中'\\'
是1个转义字符;'0'、'l'、'2'分别都是单个字符;‘\012'是一个用八进制数表示的转义字符,所以其中单个字符的数目为5,该字符串占用的内存字节数等于5+l,其中增加的1个字节用于存放“字符串结束标记”符号‘\0'。
【答案】6
5 设短整型变量x的值为12,假定分配给x的内存单元地址是0xff00,和0xff01,则在程序中能表示变量x的地址是()
① 0xff00 ② oxff01 ③&x ④&12
【分析】C语言规定,任何变量的地址,在程序中用“&变量名”来表示。
【答案】③
6 下列说法中,错误的是()
①变量的定义可以放在所有函数之外
②变量的定义可以不放在本编译单位中,而放在其他编译单位中
③变量的定义可以放在某个函数的函数头中
④变量的定义可以放在某个复合语句的开头
【分析】①中定义的变量是正确的,这种变量是外部变量;②中定义的变量是正确的,这种变量在本编译单位中要说明为“外部参照型”变量;④中定义的变量是允许的,这种变量称为内部变量,其作用域只能是本复合语句。此外,在任何函数的函数体中都可以定义变量,所定义的变量也是内部变量,其作用域是本函数。但是,在函数中定义变量时,只能在“函数体”的开头定义,不能在“函数头部分”进行定义。
【答案】③
7 变量的存储类型主要是指_______________________________。
【分析】定义变量时的存储类型有4种选择:一是“自动型(auto)”,这时变量被分配在可以重。
复使用的内存难栈区;二是“寄存器型(register)”,这时变量被分配在主机(CPU)中的寄存器;三是“静态型(static)”,这时变量被分配在不能重复使用的内存数据区;四是“外部参照型(extern)”,这时仅说明该变量的定义是在其他编译单位,不在本编译单位中。由上述分析,可以看出,定义变量时选择存储类型,主要是选择给变量分配的单元在何处。
【答案】给变量分配的单元在何处
8 下列说法中,正确的是( )
①自动型变量是分配在内存的数据区
②寄存器型变量是分配在内存的数据区中
③静态型变量是分配在内存的数据区中
④外部参照型变量是分配在内存的数据区中
【分析】按照变量在定义时的存储类型,给变量分配内存将有 3种方式:一是内存的数据区,这个地方的单元是不能重复使用的,它指定分配给“静态型(static)”变量;二是内存的堆栈区,这个地方的单元是能重复使用的,它指定分配给‘启动型(auto)”变量;三是主机(CPU)中的寄存器对,这个地方是可以重复使用的,它指定分配给“寄存器型(register)”变量;至于“外部参照型(extern)”变量不是在本编译单位中定义的,它只是用来说明需要在其他编译单位中去寻找这个变量的定义,以便确定该变量的存储特性和数据类型。
【答案】③
9 从变量的存储类型来看,不能对变量进行初始化的是()
① extern ② auto ③ register ④ static
【分析】因为“外部参照型(extern)”变量的定义不是在这儿定义的,这儿仅是说明该变量的定义在其他编译单位中,所以这种存储类型的变量不能初始化。
【答案】①
10 下列说法中,正确的是()
①从变量的作用域角度,我们把变量分为“全局变量”和“局部变量”
②从不同编译单位的角度,我们把变量分为“内部变量”和“外部变量”
③外部变量总是全局变量,它的作用域是从定义点到本程序的末尾
④静态型变量总是全局变量,它的作用域是从定义点到本程序的末尾
【分析】①的分析:全局变量和局部变量是从变量的生存期角度来划分的,在程序运行期间内始终存活的变量一律是全局变量;在程序运行期间内,局部时间内存活的变量一律是局部变量。②的分析:内部变量和外部变量是从变量的定义位置来划分的,在函数内部定义的变量一律是局部变量;在函数外部定义的变量一律是外部变量。④的分析:静态型变量的存活期是整个程序的运行期,所以它是全局变量,但是,如果该变量是在函数内部定义的,那它就是内部变量,内部变量的作用域只能是所定义的函数内部,不是从定义点到程序的末尾。
【答案】③
11 麦达式“13.5>13L<2.5”的值是________________。
【分析】注意这样的表达式在语法上是正确的。按照“关系运算将的优先级和结合性”可知,要先计算“>”,后计算“<”。计算“13.5>13L”,结果为真(值为1);接着计算“1<2.5”,结果为1。
【答案】l
12 设字符型变量ch中存放字符“A”,则执行“ch+++2”后,ch中的字符是________。
【分析】按照多个运算符结合在一起时的确认规则:自左向右选择尽可能多的合法运算符来看,表达式“ch+++2”应理解“(ch++)+2”,由于“++”是后缀运算符,所以先取出ch的值(字符“A”的ASCll代码值为 65),执行“65+ 2”的运算,结果为 67。注意这是表达式的值,并不是变量由中的值。由于变量 oh还要进行“后缀”的“++”运算,所以变量ch的值是“65+ 1”,其值为 66,是字符“B”。
【答案】B
13 关于表达式“2>l>0?3>2>l:4>3>2?5>4>3:6>5>4”的准确说法是()
①语法出错 ②表达式值为非0 ③表达式值为l ④表达式值为0
【分析】分析结出的表达式可知是一个条件表达式。按照条件运算符和关系运算符的优先级来说,整个表达式相当于“(2>1>0)?(3>2>1):(4>3>2)?(5>4>3):(6>5>4)”;再从条件运算符的结合性来说,整个表达式相当于“(2>1>0)?(3>2>1):((4>3>2)?(5>4>3):(6>5>4))",所以该表达式的语法是正确的。接下来我们可以具体计算这个表达式的值:首先计算局部表达式“(4>3>2)?(5>4>3):(6>5>4)”,(4>3>2)的结果是((4>3)>2)= (1>2)=o;显然这个局部表达式的值就是表达式"6>5>4".其值为0,再计算整个表达式“(2>1>0)?(3>2>1):0”,其中(2>1>0)的结果是((2>1)>0)=(1>0)=1,所以这个表达式的值是(3>2>1),其值为0,所以整个表达式的值为0。
【答案】④
14 设字符型变量ch1中存放的字符是“A”,字符型变量ch2中存放的字符是“B”,则执行“(ch1='B')||(ch2='C')”的运算后,变量ch2中的字符是_____________。
【分析】按照圆括号优先的原则,先计算(ch1='b'),则字符型变量ch1中存放的是字符'B';由于(chl='B')是一个赋值表达式,该表达式的值就是赋予变量chl的值“B”,这个值是非以真)。由于下面要进行的运算是“逻辑或”,C语言规定当出现“表达式l:表达式2”这样的运算时,如果“表达式1”的值为真,则这个结果为真,表达式2将不再计算。按照这个原则,上述表达式中的“(ch2='C')”将不再计算,所以字符型变量ch2中的值木改变。
【答案】B
15 设整型变量x1和x1的值均为10,则表达式“x1/=x2-4'的值是_______________。
【分析】C语言规定,对于自反赋值运算符来说,“变量自反赋值运算符表达式”中的表达式将会自动增加圆括号,所以,本题中的表达式相当于“x1=x1/x2-4)”,很容易看出该表达式的值就是: x1/=(x2-4)=10/(l0-4)=10/6=l(注意这儿是整除)。
【答案】 l
16 设字符型变量x的值是064,表达式“-x^x<<2&x”的值是()
①0333 ②333 ③0x333 ④020
【分析】首先注意变量x的值是八进制整型常量,表示成8位二进制数为:001 10100。其次,分析表达式中的位运算符的优先级别,可知该表达式相当于“(~x)^((x<<2)&x)”,下面可以依次进行计算,部分计算结果如下:
x 00110100
~x l1001011
x<<2 11010000
(x<<2)&x 00010000
(~x)^((x<<2)&x) 110ll011
二进制数“11011011'对应的八进制数是0333,所以备选答案①是正确的。
【答案】 ①
17 在C语言中,如果某个关系表达式成立(真),则该关系表达式的值是____;如果某个逻辑表达式为假,则该逻辑表达式的值是_________。
【分析】在C语言中,数据类型中没有设置逻辑型数据,而是用数值型数据来代替。具体的规则如下:
当计算一个逻辑型表达式时,结果为真则值为肝结果为假则值为0。
当把一个任意表达式作为逻辑表达式看待时,其值为非0则看作真;其值为0时看作假。
【答案】 1 0
18 设有整型变量x,如果表达式“!x”值为0,则x的值为_________;如果表达式“!x”值为1,则x的值为___________。
【分析】“!x”的值为1,显然x的值为0,这是很简单的。“!x”的值为0时,则要具体分析x的值。一般读者很容易想到x的值为1,这个答案不能说是错误的,但是不完全。例如x的值为2,“!x”的值也为0;x的值为-1,“!x”的值也为见由此想到,C语言中从逻辑角度来判断某个表达式时,原为:表达式值为0,代表假;表达式值为非0,代表真。
【答案】非0
0
19 表达式“(short)10L*1.l”的数据类型是__________________型。
【分析】C语言规定的数据类型强制转换形式是:(数据类型符)(表达式),其结果是将指定表达式值强制转换成指定的数据类型。如果其中的表达式是常量或变量,则可以不要圆括号,例如,“(数据类型符)变量运算符表达式”,则只有“变量”的数据类型被转换,而不是“变量运算符表达式”的运算结果值被转换。按照上述原则,题目中的“(Short)”仅将长整型常量10转换成短整型数据,再和单精度实数“1.1”运算,这时将利用运算时的类型转换原则(就长不就短,数据长度小的转换成数据长度大的),先将短整型的10转换成单精度数据,再进行运算,结果是单精度型。
【答案】单精度
20 下列表达式中,不属十逗号表达式的是()
①a=b,c ②a,b=c ③a=(b,c) ④a,(b=c)
【分析】4个备选答案中的表达式都很简单,仅含有两个运算符:赋值运算符和远号运算符。按照运算符的优先级别,“=”优先于“,”,所以赋值运算要先计算,这样备选答案①、②中显然最后计算的是远号运算符,当然是远号表达式;备选答案④中赋值运算用圆括号括住,显然是返号表达式;备选答案③中圆括号括住的是逗号运算符,所以赋值运算要后算,这个表达式是赋值表达式。
【答案】③