2012年软考程序员第五套考前练习试题及答案解析
61.如果某个函数在定义时,省略了存储类型,则默认的存储类型是( )
A.auto
B.void
C.extern
D.static
【解析】C语言规定,函数的存储类型只能选取static或extern。前者表示本函数只能在本编。译单位中被调用;后者表示本函数可以被其他编译单位调用。如果省略了存储类型符,则系统默认为是“extern”型,所以本题答案应选C。
【参考答案】C
62.能正确定义一个用来指向打开文件的文件型指针变量fp的语句是( )
A.file fp;
B.file *fp;
C.FILE fp;
D.FILE *fp;
【解析】"file”是在头函数“stdio.h"冲定义的文件结构型的用户自定义数据类型符,这个用户自定义的数据类型符是大写字母组成的,所以备选答案A山是错误的。文件型指针变量在定义时,变量名的前面必须有“*”,所以备选答案C也是错误的,本题应选答案D。
【参考答案】D
63.存储整型数据-7856时,在二进制文件和文本文件中占用的字节数分别是( )
A.2和2
B.2和5
C.5和5
D.5和2
【解析】二进制文件中存放的数据是二进制形式的,对于“-7856”来说,是一个带符号的短整型数据,C语言规定短整型数据占用的字节数是2,所以在二进制文件中该数据占用2个字节;对文本文件来说,存放的数据是按照每位数字对应的ASCII代码值存放的,对于“-7 856”来说,其中的“-”号要占 1个字节;4位整数要占4个字节,共计占用5个字节。所以本题的答案应选B。
【参考答案】B
61.如果某个函数在定义时,省略了存储类型,则默认的存储类型是( )
A.auto
B.void
C.extern
D.static
【解析】C语言规定,函数的存储类型只能选取static或extern。前者表示本函数只能在本编。译单位中被调用;后者表示本函数可以被其他编译单位调用。如果省略了存储类型符,则系统默认为是“extern”型,所以本题答案应选C。
【参考答案】C
62.能正确定义一个用来指向打开文件的文件型指针变量fp的语句是( )
A.file fp;
B.file *fp;
C.FILE fp;
D.FILE *fp;
【解析】"file”是在头函数“stdio.h"冲定义的文件结构型的用户自定义数据类型符,这个用户自定义的数据类型符是大写字母组成的,所以备选答案A山是错误的。文件型指针变量在定义时,变量名的前面必须有“*”,所以备选答案C也是错误的,本题应选答案D。
【参考答案】D
63.存储整型数据-7856时,在二进制文件和文本文件中占用的字节数分别是( )
A.2和2
B.2和5
C.5和5
D.5和2
【解析】二进制文件中存放的数据是二进制形式的,对于“-7856”来说,是一个带符号的短整型数据,C语言规定短整型数据占用的字节数是2,所以在二进制文件中该数据占用2个字节;对文本文件来说,存放的数据是按照每位数字对应的ASCII代码值存放的,对于“-7 856”来说,其中的“-”号要占 1个字节;4位整数要占4个字节,共计占用5个字节。所以本题的答案应选B。
【参考答案】B
67.对于输入语句scanf("%f,%f",&a,&b);要使变量a、b上的值分别为 1.78和2.48,则正确的输入是( )
A. 1.78,2.48后跟回车
B. 1.78 2.48后跟回车
C. 1.782.48后跟回车
D. 1.78;2.48后跟回车
【解析】按照scanf()函数的语法要求,第1个形参是一个字符串常量,是由格式控制符和非格式控制符组成的,其中的非格式控制符必须原样输入。显然本题中的非格式控制符是在两个实数之间的“逗号”。从4个备选答案中可以看出,只有备选答案A中是用逗号分隔两个实数的,所以本题答案应选A
【参考答案】 A
68.执行下列程序段后的输出结果是( )
x=9;
while( x>7)
{ printf("*");x--;}
A.****
B.***
C.**
D.*
【解析】注意执行while循环前,变量x的初值为9.第1次执行while循环,控制循环的条件为“x>7”,这时x为9,条件成立,执行循环体:输出单个“*”,x再减1,x为8。继续循环,控制循环的条件是“x>7',现在x为8,条件成立,输出“*”后x减1,现在x为7。继续循环时,控制循环的条件不满足,退出循环。所以本段程序执行后,输出结果为两个“*”,本题答案应选C。
【参考答案】C
69.关于带参数的主函数,下列说法中错误的是( )
A.带参数的主函数中,形式参数名称是系统规定的,用户不能自己选择
B.带参数的主函数中,第1个形式参数是int型的
C.带参数的主函数中,第2个形式参数是字符型数组
D.带参数的主函数中,实际参数值只能在执行程序的命令行中获得
【解析】带参数的主函数定义格式是系统规定的,具体如下:
main(argc,argv);
int argc;
char *argv[];
{...
}
由此看出,第2个形式参数argv是指向字符型数据的指针型数组,不是字符型数组所以备选答案 C是错误的,本题应选答案C。
【参考答案】C
70.执行下列程序后的输出结果是( )
#define M(a,b)(a)>(b)?(a):(b)
main()
{ int i=10,i=15; printf("%dn",10*M(i,j)); }
A.10
B.15
C.100
D .150
【解析】本题要输出的表达式是“10*M(i,j)”,其中的“M(i,j)”是带参数的宏调用,宏替换后,表达式的结果是“10*(i)>(j)?(i):(j)”,而变量i值为10、变量j值为15,带入整个要输出的表达式后结果是“10*(10)>(15)?(10):(15)”,,其中的条件“10*10>15”是成立的,结果等于10。所以本题答案应选A
【参考答案】A
71.执行下列程序后的输出结果是( )
int fun(int x1,int x2)
{ int x;x1>x2?(x=3):(x=4);return(x+x1); }
main()
{ printf("%dn",fun( 7,8));}
A.9
B.10
C.11
D.12
【解析】本程序的输出是函数调用“fun(7,8)”的返回值。分析函数调用“fun(7,8)”的过程如下:将实参7传给形参x1,实参8传给形参x2,然后执行函数体。由于x1>x2的条件不成立,所以执行“:”号后的赋值表达式:x=4。返回语句中的表达式是“x+x1”,返回值是:4+7=11。所以本题答案应选C.
【参考答案】C
72.下列程序段的输出是( )
typedef union{ long x[2];
short y[4][5];
char z[10];
}TYPE1;
TYPE1 u1;
printf("%dn", sizeof(u1));
A.8
B.10
C.40
D.58
【解析】程序的开始用“typedef"定义了用户自定义数据类型符“TYPE1”,这个用户自定义的数据类型符对应的是一个共用型。然后使用"TYPE1",定义了共用型变量u1,本段程序的输出就是这个共用型变量所占用的字书数。共用型变量占用的字节数就是其成员中占用字节数最多的成员占用的字节数。分析这个共用型的成员有3个:第1个成员是长整型数组,占用字节数为4*2=8;第2个成员是短整型数组,占用字节数为2*4*5=40;第3个成员是字符型数组,占用的字节数为1*10=10。其中占用字节数最多的成员是第2个成员,其占用的字节数等于40。所以本题答案应选C。
【参考答案】C
73.不属于C语言保留字的是( )
A.for
B.goto
C.if
D.loop
【解析】关于保留字教材中有明确规定。显然for、goto、if都是组成语句的专用语句成份,都
是保留字。本题答案应选D。
【参考答案】 D
74.正确的C语言标识符是( )
A.num(10)
B.file bak
C.continue
D.class+2
【解析】标识符是字母、下划线开头的字母、数字、下划线组成的一串字符,而且不能是保留字。本题的4个备选答案中,只有答案B符合这个规定。本题答案应选B。
【参考答案】 B
75.设有定义语句“double d1,d2;”,则表达式“d1=1,d2=d1+5/2”的值是( )
A.1
B.3
C.3.0
D.3.5
【解析】C语言规定,逗号表达式的计算是自左向右进行的,表达式的值等于右边表达式的值,因此,本题的答案应为表达式"d2=d1+5/2"的值。该表达式是赋值表达式,所以其值是赋予变量d2的值,也就是表达式"d1+5/2"的结果。计算时,需要先算"5/2",结果为整数2,再和double型的d1相加,结果是实数3.0。所以本题答案应选C
【参考答案】 C