国家二级(C语言)机试模拟试卷436
选择题
1.下列叙述中正确的是( )。(A)
A. 程序执行的效率与数据的存储结构密切相关
B. 程序执行的效率只取决于程序的控制结构
C. 程序执行的效率只取决于所处理的数据量
D. 以上说法均错误
解析:程序执行的效率与数据的存储结构、数据的逻辑结构、程序的控制结构、所处理的数据量等有关。
2.有以下程序:
#include
main()
{ int i,j,k,a=5,b=6;
i=(a==b)?++a:–b;
j=a++;k=b;printf(\\(B)
A. 7,6,5
B. 5,5,5
C. 7,5,5
D. 5,6,5
解析:条件表达式i=(a==b)?++a:–b;中先执行a==b,值为假,根据三元运算符语法规则,执行–b,此时b为5,赋给i,i=5;j=a++,将a=5先赋给j,再进行a++,j=5,a=6,k=b=5,故最后输出的是5,5,5。
3.以下关于return语句的叙述中正确的是( )。(B)
A. 一个自定义函数中必须有一条return语句
B. 一个自定义函数中可以根据不同情况设置多条return语句
C. 定义成void类型的函数中可以有带返回值的return语句
D. 没有return语句的自定义函数在执行结束时不能返回到调用处
解析:在函数中允许有多个return语句,但每次调用只能有一个return语句被执行,因此只能返回一个函数值。定义成void类型的函数.不允许从该函数取得返回值,也不允许使用return语句,C选项描述错误。没有return语句的函数在执行到函数的最后一条语句后会自动返回到调用处,A、D选项描述错误。因此B选项正确。
4.有以下程序:
#include
typedef struct{int b,P;}A;
void f(A C)/*注意:C是结构变量名*/
{int j;
c.b+=1;e.p+=2;
}
main()
{int i;
A a={1,2};
f(a);
printf(“%d,%d\n”,a.b,a.P);
}
程序运行后的输出结果是( )。(B)
A. 2,4
B. 1,2
C. 1,4
D. 2,3
解析:结构体变量可以作为函数的参数和返回值。作为函数的实参时,可以实现函数的传值调用。当使用结构体变量作为函数的形参时,实参也应该是结构体变量名以实现传值调用,实参将拷贝副本给形参,在被调用函数中改变形参值对于调用函数中的实参没有影响。所以选择B。
5.开发软件所需高成本和产品的低质量之间有着尖锐的矛盾,这种现象称做( )。(B)
A. 软件矛盾
B. 软件危机
C. 软件耦合
D. 软件产生
解析:随着计算机软件规模的扩大,软件本身的复杂性不断增加,研制周期显著变长,正确性难以保证,软件开发费用上涨,生产效率急剧下降,从而出现了入门难以控制软件发展的局面,即所谓的“软件危机”。
6.有以下定义语句,编译时会出现编译错误的是( )。(C)
A. char a=’a’
B. char a=’\n’;
C. char a=’aa’;
D. char a=’\x2d’
解析:本题中a为一个字符型变量,只能为其赋值一个字符常量。C项中’aa’不是字符常量,所以会编译错误。BD两项为转义字符,编译可以通过。
7.if语句的基本形式为:if(表达式)语句,其中“表达式\\(A)
A. 可以是任意合法的表达式
B. 必须是逻辑表达式
C. 必须是逻辑表达式或关系表达式
D. 必须是关系表达式
解析:本题考查if表达式。if(表达式)中的表达式可以为任何合法的表达式,一般情况下为逻辑、条件表达式,需要注意的是,当等号(==)误写为赋值号(=)时不会报错的,但是其值恒为1。
8.若有定义语句:int a=3,b=2,c=1;,以下选项中错误的赋值表达式是( )。(A)
A. a=(b=4)=3;
B. a=b=c+1;
C. a=(b=4)+c;
D. a=1+(b=c=4);
解析:这道题目主要考察赋值表达式,对于赋值表达式来说,赋值号“=”的左边一定为变量名,右边为一个C语言合法的表达式。
9.已知一个文件中存放若干工人档案记录,其数据结构如下:
struct a
{ char number[100];
int age;
float p[6];};
定义一个数组:struct a number[10];
假定文件已正确打开,不能正确地从文件中读入 10名工人数据到数组b中的是( )。(B)
A. fread(b,sizeof(struct a),10,fp);
B. for(i=0;i<10;i++)
fread(b[i],sizeof(struct a),1,fp);
C. for(i=0;i<10;i++)
fread(b+i,sizeof(struct a),1,fp);
D. for(i=0;i<5;i+=2)
fread(b+i,sezeof(struct a),2,fp);
解析:数据块输入/输出函数的调用形式为:fread(buffer,size,count,fp)。fread函.数参数说明:“buffer”是一个指针,对fread来说,它是读入数据的存放地址。对fwrite来说,是要输出数据的地址。“size”是要读写的字节数;“count”是要进行读写多少个size字节的数据项;“fp”是指文件型指针。选项B)中b[i]是一个数组,不是指针,需改为&b[i]。
注意:完成一次读操作(fread())后,如果没有关闭流(felose()),则指针(FILE*fp)自动向后移动前一次读写的长度,不关闭流则继续下一次读操作,接着上次的输出继续输出。
10.下列一维数组说明中,不正确的是( )。(A)
A. int N;
scanf(“%d”,&N);
int b[N];
B. float a[]={1,6,6,0,2};
C. #define S 10
int a[S];
D. #define S 10
int a[S+5];
解析:本题考查一维数组的赋值。一维数组的一般定义格式为:类型说明符数组名[常量表达式]。其中,“[]”中的内容可以是整型常量,也可以是整型表达式。选项A)中的N是一个变量,所以错误。
11.已知char**s,下面正确的语句是( )。(C)
A. s=\\
B. *s=\\
C. **s=\\
D. *s=’A’;
解析:“s”是代表数组首地址的地址常量,不是变量,“=”左边不能出现常量,因此s=\\
本文档预览:3600字符,共15673字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载