国家二级(C语言)机试模拟试卷447
选择题
1.以下语句的输出结果是
printf(\\(A)
A. 5
B. 8
C. 14
D. 输出项不合法,无正常输出
解析:字符串\\
2.下列程序的输出结果是( )。
#include main()
void fun(int*a,int*b) { int a=1,b=2,*x=&a,*y=&b;
{ int*k; fun(x,y);
k=a;a=b;b=k;} printf(\\(B)
A. 2 1
B. 1 2
C. 编译出错
D. 0 0
解析:本题考查函数调用时的参数传递。分析题目可知fun函数的形参是指向实参的指针,但main()函数中调用fun()函数时,实参是指针变量x、y(分别为指向a和b的指针),a、b的值在函数调用前后未发生变化,因而a=1,b=2,即输出1 2。
3.设有定义:char p[]={’1’, ’2’, ’3’},*q=p; ,以下不能计算出一个char型数据所占字节数的表达式是( )。(A)
A. sizeof(p)
B. sizeof(char)
C. sizeof(*q)
D. sizeof(p[0])
解析:根据题目中的定义可以知道sizeof(p),计算的是数组p中所有元素所占用的字节数,而不是char型数据所占字节数。
4.下面程序的输出结果是( )。
#include
main()
{char a[]={’a’,’b’,’c’,’d’,’f’,’g’},*p;
P=a;
prinff(\\(C)
A. a
B. b
C. e
D. f
解析:“*”号的优先级比“+”的优先级高,所以先执行“*p”;指针p指向的是数组的首地址,因此*p=a,再加4得’e’。
5.判断字符串s1是否大于字符串s2,应该使用( )。(C)
A. iffstrcmp(s1,s2)<0)
B. if(s1>s2)
C. if(strcmp(s2,s 1)<0)
D. if(strcmp(s1,s2))
解析:本题考查字符串比较函数strcmp(),调用形式:strcmp(str+1,str+2),其中sh+1、str+2分别是字符串存储区的首地址,函数功能:比较字符串str1和str2,当str1str2,返回值为正数。注意:不能使用关系运算符比较两个字符串的大小。
6.若输入bcdefgh、m、abcdefg,以下程序的输出结果为( )。
#include
#include
main()
{ int i;
char string[20],str[3][20];
for(i=0;i<3;i++)gets(str[i]);
if(strcmp(str[0],str[1])>0)strcpy(string,str[0]);
else strcpy(string,str[1]);
if(strcmp(str[2],string)>0)strcpy(string,str[2]);
printf(\\(B)
A. bcdefgh
B. m
C. abcdefg
D. bcdefgh或abcdefg
解析:本题考查字符比较函数和字符复制函数:strcmp(s1,s2);函数功能:比较字符串str1和str2比较的是字符的ASCII码的值,当str1str2,返回值为正数。
7.有以下程序:
#include <stdio.h>
int fun (int x, int y )
{ if (x!=y) return ( (x+y) /2 );
else return ( x );
}
main()
{ int a=4, b=5, c=6;
printf( \\(A)
A. 6
B. 3
C. 8
D. 12
解析:\\t本题中第一次调用为fun(8,fun(5,6)),因为fun(5,6)返回值为5,所以第二次调用为fun(8,5)=6。所以选择A。
8.以下语句中存在语法错误的是( )。
A
解析:数组定义后,不可以对数组整体赋值, s是二维数组,因ss[1]是一维字符数组,即字符串,字符串赋值可以使用strcpy(ss[1],\\
9.以下叙述中正确的是( )。(A)
A. 当对文件的读(写)操作完成之后,必须将它关闭,否则可能导致数据丢失
B. 打开一个已存在的文件并进行了写操作后,原有文件中的全部数据必定被覆盖
C. 在一个程序中当对文件进行了写操作后,必须先关闭该文件然后再打开,才能读到第1个数据
D. C语言中的文件是流式文件,因此只能顺序存取数据
解析:B选项中打开一个已存在的文件并进行了写操作后,原有文件中的全部数据不一定被覆盖,也可以对源文件进行追加操作等。C选项中在一个程序中当对文件进行了写操作后,不用先关闭该文件然后再打开,才能读到第1个数据,可以用fseek()函数进行重新定位即可。D选项中,C语言中的文件可以进行随机读写。
10.下列叙述中正确的是( )。(D)
A. 栈是“先进先出”的线性表
B. 队列是“先进后出”的线性表
C. 循环队列是非线性结构
D. 有序线性表既可以采用顺序存储结构,也可以采用链式存储结构
解析:栈是先进后出的线性表,所以A错误;队列是先进先出的线性表,所以B错误;循环队列是线性结构的线性表,所以C错误。
11.设有定义:int x=11,y=12,z=0;,以下表达式值不等于12的是( )。(D)
A. (z,x,y)
B. (z=x,y)
C. z=(x,y)
D. z=(x==y)
解析:逗号表达式的计算过程是从左到右逐个求每个表达式的值,取最右边一个子表达式的值作为该逗号表达式的值。赋值运算结合性为由右向左结合,赋值运算符左边为变量,右边为变量或常量,且左右两边数据类型相同才能实现赋值。逻辑表达式成立则返回1,不成立返回0。A项逗号表达式(z,x,y)取y值为12;B项逗号表达式x,y取y值为表达式值,然后赋值给z=12,表达式值为12;C项逗号表达式(x,y)取y值为表达式值,然后赋值给z=12,表达式值为12;D项逻辑表达式x==y不成立,则z=0,表达式值为0。
12.下列说法正确的是( )。(C)
A. auto和register将声明的对象说明为自动存储类对象,这些对象可用在函数中或函数外
B. 将变量其定义为static类型,则其初值默认为随机值
C. typedef说明符并不会为对象预留存留空间
D. 如果一个对象被声明为register,则对它应用一元运
本文档预览:3600字符,共15509字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载