2012年软考程序员第六套考前练习试题及答案解析
76.设有定义“int x=8,y,z;”,则执行“y=z=x++,x=y==z;”后,变量x值是( )
A.0
B.1
C.8
D.9
【解析】这是逗号表达式组成的语句,要先计算“y=z=x++”,结果变量y和z的值均为8。注意++是后缀运算符,同时x等于9。再计算“x=y==z”,由于“==”优先于“=”,所以x的值等于“y==z”,而y和z值相等,所以运算结果为1,即x值为1。本题答案应选B。
【参考答案】 B
77.设有“int a=1,b=1;”,“printf("%d,%d",(a++,--b),b-1);”的输出是( )
A.1,-1
B.1,0
C.0,-1
D.0,0
【解析】printf()函数的功能是自右向左依次计算表达式的值,然后再按照自左向右的顺序输出各个表达式的值,所以题目中输出语句执行时,是依次计算下列两个表达式的值:
b-1 结果为0,注意变量b值不变;
(a++,--b)这是逗号表达式,先计算a++,结果变量a值为2;
再计算--b,结果变量b值为0;
整个逗号表达式的值就是--b的值,为0。
按照自左向右的顺序输出(a++,--b)和b-1的值,依次为0,0。本题答案应选D。
【参考答案】D
78.设有定义语句“char s[]="123";”,则表达式“s[3]”的值是 ( )
A.’1’
B.’3’
C.0
D.语法出错
【解析】字符数组s在定义时省略了数组长度,表示给每个数组元素均赋了初值。对本题来说,数组的长度为4;数组元素的值依次为:S[0]为'1'。S[1」为'2'。S[2]为'3'、S[3]为字符率结束标记符'',所以“s[3]”的值是''。注意,这个字符的 ASCII代码值是整数 0,所以本题答案应选C。
【参考答案】 C
79.定义一个具有10个元素的整型数组,应当使用语句( )
A.int a[10];
B.int a[2,5];
C.int a[];
D.int *a[10];
【解析】分析备选答案 A:显然是正确的,本题答案应选 A。至于备选答案 B:其中的“[2,5]”在语法上是错误的;备选答案C:数组没有给初值而省略了数组长度,语法上也是错误的;备选答案D:定义的是具有10个元素的。指向整型数据的指针型数组。
【参考答案】A
80.设指针变量p1、 p2已经指向同一个数组的元素,则下列表达式中错误的是( )
A.p1=p2
B.p1==p2
C.p1-p2
D.p1+p2
【解析】教材中关于指向同一个数组的元素的指针变量之间可以进行的运算有如下的规定:可以进行关系运算、赋值运算、减法运算,所以本题答案应选D。
【参考答案】D
81.设有定义语句“int a[]={2, 4,6,8,10},*p=s;”,则值为8的表达式是( )
A.*p+3
B.*p+4
C.*(p+4)
D.*(s+3)
【解析】分析四个备选答案,可以看出是用指针法来引用数组a的元素。当指针变量p已经指向数组。的首地址后(正如本题那样),*(p+i)和*(s+i)都是数组元素a[i]。对于备选答案A:*p就是数组元素。a[0],其值为2,再加3结果为5,不符合题意。同样道理,备选答案B中的*p十4的值为6,也不符合题意。对于备选答案C:*(p+4)代表数组元素a[4],其值为10,也不符合题意。显然本题答案应选D。因为*(s+3)就是数组元素s[3],其值为8。
【参考答案】 D
82.下列数据类型中不属于构造类型的是 ( )
A.数组型
B.结构型
C.共用型
D.枚举型
【解析】教材中明确指出:构造类型只包括:数组型、结构型。共用型三种,所以本题答案应选D。
【参考答案】D
83.函数fopen()的返回值不能是( )
A.NULL
B.0
C.1
D.某个内存地址
【解析】函数fope()的返回值有两种可能:一是正确打开了文件,将返回某个地址,程序中一般是用文件型指针变量来接受的;二是打开文件时出现错误,此时返回值是符号常量“NULL”,其值为0。所以本题答案应选C。
【参考答案】C
84.以只写方式打开一个二进制文件,应选择的文件操作方式是( )
A."a+"
B."w+"
C."rb"
D."Wb"
【解析】打开文件时,如果是“只写方式”,则只能选用字符“ w”;如果要打开的文件是二进制文件,则需要选用字符“b”,所以本题答案应选 D。
【参考答案】 D
85.设有定义语句“char ch='77';”,则下列说法中正确的是( )
A.ch中含有1个字符
B.ch中含有2个字符
C.ch中含有3个字符
D.语法出错
【解析】从定义语句中可以看出,变量ch是字符型变量,显然只能存放单个字符,所以备选答案B和C是错误的说法。再分析赋予的初值,'77'是在“”符号的后面跟有2位的人进制数,所以'77'是转义字符,转义字符是单个字符,所以本题答案应选A。
【参考答案】 A
86.设有函数调用语句“f(x1,x1+x2,(x1,x2));”,正确的说法是( )
A.调用的实际参数是2个
B.调用的实际参数是3个
C.调用的实际参数是4个
D.调用时会出现语法错误。
【解析】对函数调用来说,实际参数一般都是表达式,而表达式之间必须用逗号来分隔,所以只要区分调用时的表达式数目,即是实妹参数的数目。对本题来说,第1个表达式是“x1”、第2个表达式是“x1+x2”、第3个表达式是一个逗号表达式“x1,x2”,所以本题的函数调用时,表达式的数目为3,当然实际参数的数目就是3,所以本题答案应选B。
【参考答案】B
87.计算平方数时不可能引起二义性的宏定义是( )
A.#define SOR(x)x*x
B.#define SQR(x)(x)*(x)
C.# define SQR(x)(x*x)
D.# define SQR(x)((x)*(x))
【解析】分析备选答案A:如果宏引用是“SQR(2+3)”,则宏替换后的结果是“2+3*2+3”,结果是错误的,因此这个答案可能引起二义性。分析备选答案B:如果宏引用是“ 3/SQR(2+3)”,则宏替换后的结果是“3/(2+3)*(2+3)”,结果也是错误的,因此这个答案可能引起二义性。分析备选答案C:如果宏引用是“SQR(2+3)”,则宏替换后的结果是“(2+3*2+3)”,结果也是错误的,因此这个答案可能引起二义性。只有备选答案D不会引起二义性。所以本题答案应选D。
【参考答案】D
88.执行下列程序段后,x的位是( )
int a=8,b=7,c=6,x=1;
if(a>6)if(b>7)if(c>8)x=2;else x=3;
A.0
B.1
C.2
D.3
【解析】按照"else"只和前面最近的"if"配对的原则,上述程序段可以写成下列更为清晰的程序清单:
int a=8,b=7,c=6,x=1;
if(a>6)
if(b>7)
if(c>8)
x= 2:
else
x=3:
依据a、b、c的值,很容易看出第1个“if语句”的条件“a>6”是成立的,接着执行第2个“if语句”,该语句的条件“b>7”,是不成立的,所以下面的“if-esle”语句不执行,因此x的值不变,仍为1。所以本题答案应选B。
【参考答案】B
89.执行下列程序段后,变量y的值为( )
int x[]={1,2,3,4},y,*p=&x[1];
y=(*--P)++;
A.1
B.2
C.3
D.4
【解析】从数据定义语句中可以得出下列结论:指针变量P指向的数组元素是x[1]。再来分析赋值句的右边表达式“(*--p)++”,其中的“--”优先于“*”先计算“--p”,使得p指向数组元素x[0];所以“(*--p)”就是数组元素a[0],再计算其后的“++”,由于“++”是后缀,所以表达式的值就是数组元素x[0]的值,为1,然后再对数组元素x[0]加1。因此变量y的值是1。本题答案应选A。
【参考答案】A
90.能正确表达逻辑关系“-1<X<1并且-1<Y<1”的表达式是( )< p>
A.(-1 B.(-1 C.((-1<X)??(X<1))&&((-1<Y)??( p y<1))<>
D.(-1 【解析】注意数学中的“-1 【参考答案】 D 91.函数调用时,下列说法中不正确的是 ( ) A.若用值传递方式,则形式参数不予分配内存 B.实际参数和形式参数可以同名 C.主调函数和被调用函数可以不在同一个文件中 D.函数间传送数据可以使用外部全局变量 【解析】分析备选答案A:值传递时,先给形参分配内存,然后把实参值传给形参分配的内存,所以该说法是错误的,本题答案应选A。至于备选答案B:形参和实参是可以同名的,因为它们的作用域不重复。备选答案C:只要被调函数定义时的存储类型选取“extern”,就可以被其他文件中的函数调用。备选答案D:函数间传递数据的方法有4种,其中的一种就是利用外部全局变量来传递的。 【参考答案】 A 92.下列关于结构型变量的定义语句中,错误的是( ) A. typedef struct CCC B. #define GGG struct { char name[20];GGG CCC { char name[20]; int age; int age; }GGG; }; GGG abc ; GGG CCC abc; C.struct D.struct { char name[20]; { char name[20]; int age; int age; }ccc; }abc; CCC abc; 【解析】分析备选答案 A:利用“typedef”定义了用户自定义的数据类型符“GGG”,这个用户自定义的数据类型符是含有两个成员的结构型 CCC,所以语句“GGG abc”是定义结构型CCC的变量abc,语法没有错误。分析备选答案B:利用“#define”定义了宏名“GGG”,这个宏名第一次出现是定义结构型CCC,第二次是定义了结构型CCC的变量allc,所以语法上没有错误。分析备选答案C:这是定义一个没有名称的结构型,同时定义了这种结构型的变量CCC,接着的语句“CCC abc;”显然是错误的,因为CCC是变量名,不是数据类型符,该答案符合题意。至于备选答案D:这是标准的通过定义没有名称的结构型来定义该结构型的变量abc,语法上没有错误。 【参考答案】C
<1))<>1))<>