国家二级(C语言)机试模拟试卷475
选择题
1.下列叙述中,正确的是( )。(A)
A. 软件交付使用后还需要进行维护
B. 软件一旦交付使用就不需要再进行维护
C. 软件交付使用后其生命周期就结束
D. 软件维护是指修复程序中被破坏的指令
解析:软件的运行和维护是指将已交付的软件投入运行,并在运行使用中不断地维护,根据新提出的需求进行必要而且可能的扩充和删改。而软件生命周期是指软件产品从提出、实现、使用维护到停止使用退役的过程。
2.下列叙述中正确的是( )。(B)
A. 有一个以上根节点的数据结构不一定是非线性结构
B. 只有一个根节点的数据结构不一定是线性结构
C. 循环链表是非线性结构
D. 双向链表是非线性结构
解析:线性结构应满足:①有且只有一个根节点;②每个节点最多有一个前件,也最多有一个后件,所以有一个以上根节点的数据结构一定是非线性结构,所以A错误,B正确。循环链表和双向链表都是线性结构的数据结构。
3.有以下程序:
#include<stdio.h>
typedef struct{int b,p;}A;
void f(A c)/*注意:c是结构变量名*/
{int j;
c.b+=1;c.p+=2;
}
main()
{int i:
A a={1,2};
f(a);
pfinff(\\(B)
A. 2,4
B. 1,2
C. 1,4
D. 2,3
解析:结构体变量可以作为函数的参数和返回值。作为函数的实参时,可以实现函数的传值调用。当使用结构体变量作为函数的形参时,实参也应该是结构体变量名以实现传值调用,实参将拷贝副本给形参,在被调用函数中改变形参值对于调用函数中的实参没有影响。所以选择B。
4.以下叙述中不正确的是( )。(D)
A. 在不同的函数中可以使用相同的名字的变量
B. 函数中的形式参数是局部变量
C. 在一个函数内定义的变量只在本函数范围内有效
D. 在一个函数内的复合语句中定义的变量在本函数范围内有效
解析:此题考查的是变量的作用范围。选项D)qp,在一个函数的复合语句中定义的变量是局部变量,只在定义此变量的复合语句内有效,并不是在整个函数体内都有效。
5.有以下程序:
#include<stdio.h>
main()
{
int k,n=0;char c,str[]=\\(C)
A. Ne1NN
B. e1a2e3
C. Ne1Nc2N
D. Na1NNNN
解析:k=0时,选择default分支,输出N;k=1时,c=str[1]=e,选择case1分支,因为没有遇到break语句,故继续执行case3、case5分支,输出c和++n,即输出e和1,依次往下执行,最终输出Ne1Nc2N。
6.union dt
{
int a;char b;double c;
}data;
以下叙述中错误的是( )。(C)
A. data的每个成员起始地址都相同
B. 变量data所占内存字节数与成员C所占字节数相等
C. 程序段:data.a=5;printf(\\
D. data可以作为函数的实参
解析:输出不会是5.00000的,因为单精度浮点数和双精度浮点数在内存中的存储形式不一样。
7.若有定义语句:int x=10; ,则表达式x-=x+x的值为( )。(C)
A. 0
B. -20
C. -10
D. 10
解析:算术运算符+的优先级高于-= ,且-=的结合方向为自右向左,所以表达式x-=x+x可以表示成x=x-(x+x)=10-(10+10)=-10,选择C。
8.以下选项中,当x为大于l的奇数时,值为0的表达式是( )。(A)
A. x%2==0
B. x/2
C. x%2!1=0
D. x%2==1
解析:算术运算符的优先级高于关系运算符的优先级,所以当x为大于1的奇数时,A选项的值为假,即0。B选项的值为不定值,但绝对不是0。C选项的值为真,即1。D选项的值为真,即1。
9.若函数调用时的实参为变量时,以下关于函数形参和实参的叙述中正确的是( )。(A)
A. 函数的形参和实参分别占用不同的存储单元
B. 形参只是形式上的存在,不占用具体存储单元
C. 同名的实参和形参占同一存储单元
D. 函数的实参和其对应的形参共占同一存储单元
解析:本题重点考察的是函数的形参和实参。在定义函数时函数名后面括弧中的变量名称为“形式参数”(简称形参),在主调函数中调用一个函数时,函数名后面括弧中的参数(可以是一个表达式)称为“实际参数”(简称实参)。C语言规定,实参变量对形参变量的数据传递是“值传递”,即单向传递,只由实参传给形参,而不能由形参传回来给实参。在内存中,实参单元与形参单元是不同的单元。因此A选项正确。
10.以下数组定义中错误的是( )。
A
解析:二维数组的第一维数据表示行数,第二维数据表示列数,所以x[2][3]中的数据应为两行三列,和定义内容不符,选项A)错误,答案选A)。
11.以下程序的输出结果是( )。
#include<stdio.h>
void prt(int *x,int *y,int *z)
{printf(’’%d,%d,%d\n’’,++ * x,++*y,*(z++));}
main()
{int a=10,b=40,c=20;
prt(&a,&b,&c);
prt(&a,&b,&c);}(B)
A. 11,42,31
12,22,41
B. 11,41,20
12,42,20
C. 11,21,40
11,21,21
D. 11,41,21
12,42,22
解析:本题考查的是函数参数的传递及自加运算符。主函数中第一次调用函数“prt(&a,&b,&C;”,此函数中的输出语句“printf(’’%d,%d,‰\n’’,++*x,++*y,*(z++));”使得a和b的值均加1,而“*(z++)”由于先执行“z++”所以c的值不变;第二次调用函数“pn(&a,&b,&c);”使得a和b在上一次的基础上再各自加1(因为形参和实参进行的是地址传递),而c的值仍不变。
12.有以下程序:
#include<stdio.h>
#include<string.h>
typedef struet{char name[9];char sex;float score[2];}STU;
void f(STU a)
{
STU b={\\(D)
A. Zhao,m,85,90
B. Qian,m,85,90
C. Zhao,f,95,92
D. Qian,f,95,92
解析:本题考查结构体
本文档预览:3600字符,共16643字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载