1、国家二级(C 语言)机试模拟试卷 121 及答案解析(总分:86.00,做题时间:90 分钟)一、选择题(总题数:40,分数:80.00)1.算法的空间复杂度是指( )。(分数:2.00)A.算法程序的长度B.算法程序中的指令条数C.算法程序所占的存储空间D.算法执行过程中所需要的存储空间2.下列叙述中正确的是( )。(分数:2.00)A.个逻辑数据结构只能有一种存储结构B.逻辑结构属于线性结构,存储结构属于非线性结构C.个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数据处理的效率D.个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理的效率3.下列关于类、对象、属性和方法的叙
2、述中,错误的是( )。(分数:2.00)A.类是对一类具有相同的属性和方法对象的描述B.属性用于描述对象的状态C.方法用于表示对象的行为D.基于同一个类产生的两个对象不可以分别设置自己的属性值4.在软件开发中,需求分析阶段产生的主要文档是( )。(分数:2.00)A.数据字典B.详细设计说明书C.数据流图说明书D.软件需求规格说明书5.数据库设计的四个阶段是:需求分析、概念设计、逻辑设计和( )。(分数:2.00)A.编码设计B.测试阶段C.运行阶段D.物理设计6.在下列关系运算中,不改变关系表中的属性个数但能减少元组个数的是( )。(分数:2.00)A.并B.交C.除7.下列叙述中,正确的是
3、( )。(分数:2.00)A.软件交付使用后还需要进行维护B.软件一旦交付使用就不需要再进行维护C.软件交付使用后其生命周期就结束D.软件维护是指修复程序中被破坏的指令8.设一棵满二叉树共有 15 个结点,则在该满二叉树中的叶子结点数为( )。(分数:2.00)A.7B.8C.9D.109.设 R 是一个 2 元关系,有 3 个元组,S 是一个 3 元关系,有 3 个元组。如 TRS,则 T 的元组的个数为( )。(分数:2.00)A.6B.8C.9D.1210.下列选项中,不属于数据库管理的是( )。(分数:2.00)A.数据库的建立B.数据库的调整C.数据库的监控D.数据库的校对11.对于
4、一个正常运行的 C 程序,下列叙述中正确的是( )。(分数:2.00)A.程序的执行总是从 main 函数开始,在 ma1n 函数结束B.程序的执行总是从程序的第一个函数开始,在 main 函数结束C.程序的执行总是从 main 函数开始,在程序的最后一个函数中结束D.程序的执行总是从程序中的第一个函数开始,在程序的最后一个函数中结束12.以下选项中与 if(a=1)a+;else a=b;语句功能不同的语句是( )。(分数:2.00)A.switch(a) case 0:a=b;break; default: a+; B.switch(a=1) case 0:a+; default:a=b;
5、 C.switch(a) default: a=b; case 1:a+; D.a=(a=1)?(a+):b break;13.以下不合法的用户标识符是( )。(分数:2.00)A.804zhangB.hhC.yy614D.If14.已知 char a;int b;float c;double d;则表达式 ab+cd 结果为( )型。(分数:2.00)A.doubleB.floatC.intD.char15.假设有语句 sizeof(double),则它是( )。(分数:2.00)A.个整型表达式B.个双精度浮点型表达式C.种函数调用D.种函数定义16.若变量都己正确说明,则以下程序段输出结
6、果为( )。 #inc1ude main() char a=a; int b=2; printf(ab?“*a=d“:“#b=d“,a,b); (分数:2.00)A.*a=3B.#b=3C.*a=3#b=5D.全部错误17.若有以下定义(设 int 类型变量占 2 个字节) int i=8,j=9; 则以下语句: printf(“i=d,j=dn“,i,j); 输出的结果是( )。(分数:2.00)A.i=8,j=9B.i=d,j=8C.i=d,j=dD.8,918.设 a 和 b 均为 int 型变量,且 a=6,b=l1,则能使值为 3 的表达式是( )。(分数:2.00)A.b(a4)B
7、.b (aa5)C.baa5D.(ba)(a4)19.有关 return 语句说法不正确的是( )。(分数:2.00)A.系统默认的返回值类型为整型,故当函数的返回值为 int 型时,在函数定义时,返回值的类型说明可以省略。B.当函数有返回值时,凡是允许表达式出现的地方,都可以调用该函数。C.当函数没有返回值时,函数的返回值类型可以说明为 void 型,它表示“无类型”或“空类型”。D.函数的返回值类型必须与 return 语句中的表达式值的类型一致,但 C 语言也允许不同;这时,系统以函数定义时的返回值类型说明为准,并自动地将 retum 语句中表达式的值转换为函数的返回值类型。20.有以下
8、程序: #inc1ude main() int i0,a=0, while(1A.62B.63C.23D.3621.在下列选项中,没有构成死循环的程序段是( )。(分数:2.00)A.int i=100; for(;) i=i1 0+1; if(i10) break; B.while(1);C.int k=0; do+k;while(k12?x+10:x12; printf(“d/n“,y); (分数:2.00)A.0B.22C.12D.1027.运行下面程序时,从键盘输入字母 A,则输出结果是( )。 #inc1ude main() char ch; ch=getchar(); switch
9、(ch) caseA:printf(“AAAA/n“); caseB:printf(“BBBB/n“): default: printf(“CCCC/n“); (分数:2.00)A.AAAAB.AAAA BBBBC.AAAA BBBB CCCCD.AAAA CCCC28.以下叙述正确的是( )。(分数:2.00)A.只能在循环体内和 switch 语句体内使用 jbreak 语句B.contiune 语句的作用是结束整个循环的执行C.在循环体内使用 break 语句或 continue 浯句的作用相同D.从多层循环嵌套中退出时,只能使用 goto 语句29.下列叙述中错误的是( )。(分数:2
10、.00)A.在 C 语言中,对二进制文件的访问速度比文本文件快B.在 C 语言中,随机文件以二进制代码形式存储数据C.语句 FILE fp;定义了一个名为 fp 的文件指针D.C 语言中的文本文件以 ASCII 码形式存储数据30.若输入“abcdef”、“abdef“,以下程序的输出结果为( )。 #inc1ude #inc1ude main() int n; char s120,s220,*p1,*p2; scanf(“s“,s1); scanf(“s“,s2); pl=s1; p2=s2; n=strcmp(p1,p2); printf(“dn“,n);(分数:2.00)A.一 1B.0
11、C.abcdefD.abdef31.以下语句定义正确的是( )。(分数:2.00)A.int a14P1,2,3,4,5;B.noat a3=1,2),3);C.long a23=1,1,2,1,2,3,0,0);D.double a3=0;32.下述程序的输出结果是( )。 #inc1ude void main() int a5=1,2,3,4,5; int*p=a,*q=&p; printf(“d“,*(p+); printf(“d“,*q); (分数:2.00)A.22B.11C.34D.1233.字符串“ABCDEF“的长度是( )。(分数:2.00)A.11B.10C.5D.334.
12、若二维数组 a 有 m 列,则在 aij前的元素个数为( )。(分数:2.00)A.j*m+iB.i*m+jC.j*m+i+lD.i*m+j+l35.下列程序的运行结果是( )。 #inc1ude void fun (int*s,int*p) static int t=3; *p=st; t一一: void main() int a=2,3,4,5,k,x; for(k=0;kA.5,4,3,2,B.2,3,4,5,C.2,2,2,2,D.5,5,5,5,36.以下有关宏替换的叙述不正确的是( )。(分数:2.00)A.双引号中出现的宏名不替换B.使用宏定义可以嵌套C.宏定义仅仅是符号替换D.
13、宏名必须用大写字母表示37.设有定义:char *c;,以下选项中能够使字符型指针 c 正确指向一个字符串的是( )。(分数:2.00)A.char str=“string“;c=str;B.scanf(“s“,c);C.c=getchar();D.char str=“string“; strcpy(“c,str“)38.有以下程序: #inc1ude #inc1ude struct A int a;char b10;double c; void f(struct A*t); main() struct A a=1001,“ZhangDa“,10980; f(&a);print(“d,s,61
14、 f/u“,aa,ab,ac); void f(struct A*t) ta=1002;strcpy(tb,“ChangRong”);tc=12020;) 程序运行后的输出结果是( )。(分数:2.00)A.1001, zhangDa, 10980B.1002, ChangRong, 12020C.1001, ChangRong, 10980D.1002, zhangDa, 1202039.下述程序的输出结果是( )。 #inc1ude void main() char a=1,b=2; char c=a bintunsigned longfloatdouble; 赋值运算中最终结果的类型,以
15、赋值运算符左边变量的类型为准,即赋值运算符右端值的类型向左边变量的类型看齐,并进行相应转换。15.假设有语句 sizeof(double),则它是( )。(分数:2.00)A.个整型表达式 B.个双精度浮点型表达式C.种函数调用D.种函数定义解析:解析:sizeof(double)是 C 语言内部规定的一个计算参数( double)在计算机的内存中所占用的字节数量的函数,它返回一个整数值。16.若变量都己正确说明,则以下程序段输出结果为( )。 #inc1ude main() char a=a; int b=2; printf(ab?“*a=d“:“#b=d“,a,b); (分数:2.00)A
16、.*a=3B.#b=3C.*a=3#b=5D.全部错误 解析:解析:本题考查 printf 函数的格式和三目运算符“?:”的使用。printf 函数中格式说明符之前插入的任何字符都原样输出。本题中“ab”为真,所以返回 “*a=97”。17.若有以下定义(设 int 类型变量占 2 个字节) int i=8,j=9; 则以下语句: printf(“i=d,j=dn“,i,j); 输出的结果是( )。(分数:2.00)A.i=8,j=9B.i=d,j=8 C.i=d,j=dD.8,9解析:解析:本题考查 printf 函数的格式。printf 函数中格式说明符之前插入的任何字符都按原样输出。对于
17、 printf 函数,有两个说明,第一个后面的内容要按原样输出。18.设 a 和 b 均为 int 型变量,且 a=6,b=l1,则能使值为 3 的表达式是( )。(分数:2.00)A.b(a4)B.b (aa5)C.baa5D.(ba)(a4) 解析:解析:表达式“ab”表示的是求 a 除以 b 的余数。因此,选项 A):(64)=2,112=1; 选项B):(665)=5,115=1; 选项 C):11665=4;选项 D):(1 16)一(64)=3。19.有关 return 语句说法不正确的是( )。(分数:2.00)A.系统默认的返回值类型为整型,故当函数的返回值为 int 型时,在
18、函数定义时,返回值的类型说明可以省略。B.当函数有返回值时,凡是允许表达式出现的地方,都可以调用该函数。C.当函数没有返回值时,函数的返回值类型可以说明为 void 型,它表示“无类型”或“空类型”。D.函数的返回值类型必须与 return 语句中的表达式值的类型一致,但 C 语言也允许不同;这时,系统以函数定义时的返回值类型说明为准,并自动地将 retum 语句中表达式的值转换为函数的返回值类型。 解析:解析:函数的返回值类型一般与 return 语句中的表达式值的类型一致,但 C 语言也允许不同;这时,系统以函数定义时的返回值类型说明为准,并自动地将 return 语句中表达式的值转换为函
19、数的返回值类型。20.有以下程序: #inc1ude main() int i0,a=0, while(1A.62B.63C.23D.36 解析:解析:本题考查 while 循环。当 i20”,循环结束。21.在下列选项中,没有构成死循环的程序段是( )。(分数:2.00)A.int i=100; for(;) i=i1 0+1; if(i10) break; B.while(1);C.int k=0; do+k;while(k10 时,结束循环;选项 D)中,“while(s); ”后面没有任何表达式而是直接加了一个分号,会一直执行,形成死循环。22.若己定义的函数有返回值,则以下关于该函数
20、调用的叙述中错误的是( )。(分数:2.00)A.函数调用可以作为独立的语句存在B.函数调用可以作为一个函数的实参C.函数调用可以出现在表达式中D.函数调用可以作为一个函数的形参 解析:解析:本题考查函数调用的有关知识点。函数调用可以出现在表达式中;可以作为独立的语句存在;可以作为一个函数的实参。23.以下程序的输出结果是( )。 #inc1ude main() int a=1,b3; if(+a0”,因此“Ha12?x+10:x12; printf(“d/n“,y); (分数:2.00)A.0 B.22C.12D.10解析:解析:本题考查三目条件运算符“?:”。表达式“x12?x+10:x1
21、2”即,如果 x12 成立,则x+10 的值即为此表达式的值,否则 x12 即为此表达式的值。因为 x=12,所以 x12 不成立,所以执行“y=x12=0”。27.运行下面程序时,从键盘输入字母 A,则输出结果是( )。 #inc1ude main() char ch; ch=getchar(); switch(ch) caseA:printf(“AAAA/n“); caseB:printf(“BBBB/n“): default: printf(“CCCC/n“); (分数:2.00)A.AAAAB.AAAA BBBBC.AAAA BBBB CCCC D.AAAA CCCC解析:解析:本题考
22、查“switch”语句。因为“ch=A”,所以第一个 switch 语句,执行“case A”后面的语句,输出 AAAA,没有遇到 break 语句,所以接着再执行“case B“和 default,分别输出 BBBB和 CCCC。28.以下叙述正确的是( )。(分数:2.00)A.只能在循环体内和 switch 语句体内使用 jbreak 语句 B.contiune 语句的作用是结束整个循环的执行C.在循环体内使用 break 语句或 continue 浯句的作用相同D.从多层循环嵌套中退出时,只能使用 goto 语句解析:解析:本题考查循环的 4 个知识点:break 语句可以出现在循环体
23、内及 switch 语句体内,不能用于其他的语句;continue 语句的作用是结束本次循环,即跳过循环体中下面尚未执行的语句,而接着转去判定循环条件是否成立,从而确定下一次循环是否继续执行,也就是说执行 contiune 语句不会使整个循环终止;在循环体内使用 break 语句会使循环提前终止;从多层循环嵌套中退出时,可以使用goto 语句或者 break 语句。29.下列叙述中错误的是( )。(分数:2.00)A.在 C 语言中,对二进制文件的访问速度比文本文件快B.在 C 语言中,随机文件以二进制代码形式存储数据C.语句 FILE fp;定义了一个名为 fp 的文件指针 D.C 语言中的
24、文本文件以 ASCII 码形式存储数据解析:解析:在 C 语言中,文件指针实际上是指向一个结构体类型的指针,一般称这个结构体类型名为FILE,可以用此类型名来定义文件指针。定义文件类型指针变量的一般形式为:FILE *指针变量名;选项C)中少了“*”,所以选项 C)错误。30.若输入“abcdef”、“abdef“,以下程序的输出结果为( )。 #inc1ude #inc1ude main() int n; char s120,s220,*p1,*p2; scanf(“s“,s1); scanf(“s“,s2); pl=s1; p2=s2; n=strcmp(p1,p2); printf(“d
25、n“,n);(分数:2.00)A.一 1 B.0C.abcdefD.abdef解析:解析:本题考查两个知识点:字符串比较函数 strcmp(s1,s2),若 s1s2,则返回 1;若s1=s2,则返回 0;若 s1a=1002;strcpy(tb,“ChangRong”);tc=12020;) 程序运行后的输出结果是( )。(分数:2.00)A.1001, zhangDa, 10980B.1002, ChangRong, 12020 C.1001, ChangRong, 10980D.1002, zhangDa, 12020解析:解析:本题主要考查是的函数调用时参数之间的传递问题。在 C 语言
26、中参数之间的传递是传值,也就是把实参的值复制一份传递给形参,而实参的值不发生变化。但对于指针调用来说,函数直接对实参的地址操作,因此在这种情况下实参变化。39.下述程序的输出结果是( )。 #inc1ude void main() char a=1,b=2; char c=a bA.9 B.10C.12D.2解析:解析:本题主要考查 C 语言最基本的算术运算“左移()”和“异或()”。 “左移”或“右移”运算表达式的一般形式为:xn 或 xn。“左移()”运算的规则是将 x 的二进制位全部向左移动 n 位,将左边移动的高位舍弃,右边空出的位补 0: “右移()”运算的规则是将 x 的二进制位全
27、部向右移动 n 位,将右边移出的低位舍弃,左边高位空出要根据原来符号位的情况进行补充,对无符号数则补 0,对有符号数,若为正数则补 0,若为负数则补 1。 “异或”运算是当两个运算量的相应位相同时结果为 0,不相同时结果为 l。b=2 的二进制为(00000010) b2 后为 00001000,a=1 的二进制为00000001,所以 c=ab2 为 00001001,转化为十进制后为 9。40.已知一个文件中存放若干工人档案记录,其数据结构如下: struct a char number 100; int age; float p6; ; 定义一个数组:struct a b10; 假定文件
28、已正确打开,不能正确地从文件中读入 10 名工人数据到数组 b 中的是( )。(分数:2.00)A.fread(b,sizeof(structa),10,fp);B.for(i=0;iC.for(i=0;iD.for(i=0;i解析:解析:数据块输入/输出函数的调用格式为:fread(buffer,size,count,fp),其中:“buffer”是一个指针,对于 fread 来说,它是读入数据的存放地址。“size”是要读写的字节数; “count”是要进行读写多少个 size 字节的数据项; “fp”是指文件型指针。选项 B)中 bi是一个数组,不是指针,需改为&bi。二、程序填空题(总
29、题数:1,分数:2.00)41.函数 fun 的功能是:在有 n 个元素的结构体数组 std 中,查找有不及格科目的学生,找到后输出学生的学号;函数的返回值是有不及格科目的学生人数。 例如,主函数中给出了 4 名学生的数据,则程序运行的结果为: 学号:N1002 学号:N1006 共有 2 位学生有不及格科目 请在程序的下划线处填入正确的内容,并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1C 中。不得增行或删行,也不得更改程序的结构! #include typedef struct char num 8; double score 2; *fond*/ _(1)_; int fun(STU std ,int n) int i,k=0; if ( std i score 0