1、国家二级( C语言)机试模拟试卷 91及答案与解析 一、选择题 1 下列关于栈叙述正确的是 ( )。 ( A)栈顶元素最先能被删除 ( B)栈顶元素最后才能被删除 ( C)栈底元素永远不能被删除 ( D)栈底元素最先被删除 2 下列叙述中正确的是 ( )。 ( A)在栈中,栈中元素随栈底指针与栈顶指针的变化而动态变化 ( B)在栈中,栈顶指针不变,栈中元素随栈底指针的变化而动态变化 ( C)在栈中,栈底指针不变,栈中元素随栈顶指针的变化而动态变化 ( D)以上说法都不正确 3 某二叉树共有 7个结点,其中叶子结点只有 1个,则该二叉树的深度为 (假设根结点在第 1层 )( ) ( A) 3 (
2、 B) 4 ( C) 6 ( D) 7 4 软件按功能可以分为应用软件、系统软件和支撑软件 (或工具软件 )。下面属于应用软件的是 ( )。 ( A)学生成绩管理系统 ( B) C语言编译程序 ( C) UNIX操作系统 ( D)数据库管理系统 5 结构化程序所要求的基本结构不包括 ( )。 ( A)顺序结构 ( B) GOTO跳转 ( C)选择 (分支 )结构 ( D)重复 (循环 )结构 6 下面描述中错误的 是 ( )。 ( A)系统总体结构图支持软件系统的详细设计 ( B)软件设计是将软件需求转换为软件表示的过程 ( C)数据结构与数据库设计是软件设计的任务之一 ( D) PAD图是软
3、件详细设计的表示工具 7 负责数据库中查询操作的数据库语言是 ( )。 ( A)数据定义语言 ( B)数据管理语言 ( C)数据操纵语言 ( D)数据控制语言 8 一个教师可讲授多门课程,一门课程可由多个教师讲授。则实体教师和课程间的联系是 ( )。 ( A) 1: 1联系 ( B) 1: m联系 ( C) m: 1联系 ( D) m-n联系 9 有三个关系 R、 S和 T如下: 则由关系R和 s得到关系 T的操作是 ( )。 ( A)自然连接 ( B)并 ( C)交 ( D)差 10 定义无符号整数类为 UInt,下面可以作为类 UInt实例化值的是 ( )。 ( A)一 369 ( B)
4、369 ( C) 0 369 ( D)整数集合 1, 2, 3, 4, 5 11 以下叙述中错误的是 ( )。 ( A) C程序在运行过程中所有计算都以二进制方式进行 ( B) C程序在运行过程中所有计算都以十进制方式进行 ( C)所有 C程序都需要编译 链接无误后才能运行 ( D) C程序中字符变量存放的是字符的 ASCII码值 12 以下关于 C语言的叙述中正确的是 ( )。 ( A) C语言的数值常量中夹带空格不影响常量值的正确表示 ( B) C语言中的变量可以在使用之前的任何位置进行定义 ( C)在 C语言算术表达式的书写中,运算符两侧的运算数类型必须一致 ( D) C语言中的注释不可
5、以夹在变量名或关键字的中间 13 以下不合法的字符常量是 ( )。 ( A) ( B) ( C) 018 ( D) xcc 14 以下选项中 正确的定义语句是 ( )。 ( A) double, a, b; ( B) double a=b=7; ( C) double a; b; ( D) double a=7, b=7; 15 若有定义语句: int a=3, b=2, c=1;以下选项中错误的赋值表达式是 ( )。 ( A) a=(b=4): 3; ( B) a=b=c+l; ( C) a=(b=4) +c; ( D) a=1+(b=c=4); 16 若有定义: int a,b; 通过语句
6、: scanf(“ d; d”, &a, &b); 能把整数 3赋给变量 a, 5赋给变量 b的输入数据是 ( )。 ( A) 3 5 ( B) 3, 5 ( C) 3; 5 ( D) 35 17 已知大写字母 A的 ASCII码值是 65,小写字母 a的 ASCII码值是 97。以下不能将变量 c 中的大写字母转换为对应小写字母的语句是 ( )。 ( A) c=(A+c) 26一 a ( B) c=c+32 ( C) c=c一 A+a ( D) c=(c一 A) 26+a 18 在以下给出的表达式中,与 while(E)中的 (E)不等价的表达式是 ( )。 ( A) (E0 Eb?(bc?
7、1: 0): 0;功能相同的是 ( )。 ( A) if(ab) (bc)k=1; else k=0; ( B) if(ab)&(bc)k=1; else k=0; ( C) if(ab)k=1; else if(bc)k=1; else k=0; 20 有以下程序: #include main() int a=1, b=2; for(; a main() int i, j, m=55; for(i=l; i main() int x=8: for(; X0; X一一 ) if(x 3) printf(“ d, ”, X一一 ); continue; printf(“ d, ”,一一 X);
8、程序运行后的输出结果是 ( )。 ( A) 7, 4, 2, ( B) 8, 7, 5, 2, ( C) 9, 7, 6, 4, ( D) 8, 5, 4, 2, 23 以下叙述中错误的是 ( )。 ( A) C程序必须由一个或一个以上的函数组成 ( B)函数调用可以作为一个独立的语句存在 ( C)若函数有返回值,必须通过 return语句返回 ( D)函数形参的值也可以传回给对应的实参 24 有以下程序: #include main() int a=1, b=3, e=5; int*p1=&a, *p2=&b, *P=&e; *P=*p1*(*p2); printf(“ d n”, c);
9、程序执行后的输出结果是 ( )。 ( A) 1 ( B) 2 ( C) 3 ( D) 4 25 有以下程序: #include void f(int*P, int*q); main() int m=1, n=2, *r=&m; f(r, &n); prinff(“ d, d”, m, n); void f(int*P, int*q) P=P+1: *q=*q+1: 程序运行后的输出结果是 ( )。 ( A) 2, 3 ( B) 1, 3 ( C) 1, 4 ( D) 1, 2 26 若有定义语句: int a 23, *P3;则以下语句中正确的是 ( )。 ( A) P=a; ( B) p0=
10、a; ( C) p0=&a12; ( D) P1= a; 27 以下程序中函数 f的功能是:当 flag为 1时,进行由小到大排序;当 flag为 0时,进行由大到小排序。 #include void f(int b, int lq, int flag) int i, j, t; for(i=0; ibj: bi main() int s12=1, 2, 3, 4, 4, 3, 2, 1, 1, 1, 2, 3, c5=0, i; for(i=0; i void fun(char.a, ehar*b) while(*a=*)a+; while(*b=*a)b+; a+; main() ehar
11、 *s=*1*a*b*” , t80; fun(s, t); puts(t); 程序运行后的输出结果是 ( )。 ( A) ab ( B) a*b ( C) *a*b ( D) a*b* 32 下列函数的功能是 ( )。 void fun(char: *a, char*b) while(*b=*a)!= 0) a+; b+; ( A)将 a所指字符串赋给 b所指空间 ( B)使指针 b指向 a所指字符串 ( C)将 a所指字符串和 b所指字符串进行比较 ( D)检查 a和 b所指字符串中是否有 0 33 有以下程序: #include int fun(int X) int P; if(x=0
12、x=1) return(3); P=xfun(x一 2); return P; main() printf(“ d n”, fun(7); 程序执行后的输出结果是 ( )。 ( A) 2 ( B) 3 ( C) 7 ( D) 0 34 有以下程序: #include int fun() static int x: 1; X*=2; retum x; main() int i, s=1; for(i=l; inext=q一 next; free(q); ( B) P=q一 next; free(q); ( C) p=q; free(q); ( D) (*P) next=(*q) next; fr
13、ee(P); 37 有以下程序: #include #include struct A int a; char b10; double c; ; void f(struct A t); main() struet A a=1001, “ZhangDa”, 1098 0; f(a); printf(“ d, s, 6 if n”, a a, a b, a c); void f(struet A t) t a=1002: strepy(t b, “ChangRong”); t e=1202 0; 程序运行后的输出结果是 ( )。 ( A) 1002, ZhangDa, 1202 0 ( B) 10
14、02, ChangRong, 1202 0 ( C) 1001, ChangRong, 1098 0 ( D) 1001, ZhangDa, 1098 0 38 有以下程序: #include #define N 5 #define M N+l #deftile f(x)(x*M) main() int i1, i2: i1=f(2); i2=f(1+1): printf(“ d d n”, i1 i2); 程序运行后的输出结果是 ( )。 ( A) 12 7 ( B) 12 12 ( C) 1 1 11 ( D) 1 1 7 39 有以下程序: #include main() int a=5
15、, b=1, t; t=(a void fun(char* s) int i, j=0, k=0; char tl80, t280; for(i: 0; si!= 0; i+) if(si=0&si void fun(int 13 ) int j, b, c, m, flag=0; for(b=1; b=c) *found* m=mC: C+ *found* if(m!=0) prinff(“ d=”, n); for(j=b; j #define N 8 typedef struet char num10; double sN; double ave; STREC; void fun(STR
16、EC*a) main() STREC s= GA005”, 85 5, 76, 69 5, 85, 91, 72, 64 5, 87 5; int i; void NONO(); fun(&s); prinff(“The ss student data: n”, s num); for(i=0; ib且 bc, k值结果为 1,如果 ab,且 bh与bc中只要有一个条件不成立, k的值就为 0,所以选择 B选项。 20 【正确答案】 D 【试题解析】 第一次循环 a的值为 1,满足条件,执行 b+=a,与 a+=2,则 b的值变为 3, a的值变为 3。执行 a+, a的值为 4,满足条件进入
17、第二次循环。执行完循环体后 b的值为 7, a的值为 6。执行 a+, a的值为 7,满足条件进入第 三次循环,执行完循环体后 b的值为 14, a的值为 9。执行 a+, a的值变为 10,不满足条件,循环结束。所以选择 D选项。 21 【正确答案】 B 【试题解析】 第一次执行外循环 i的值为 1,满足条件,判断第一次内循环, j的值为 3,不满足条件,跳出内循环。第二次执行外循环 i的值为 2,同理也不满足内循环条件,跳出内循环。第三次执行外循环 i的值为 3,此时进入内循环判断条件时,条件成立,执行 m=m j, m的值为 1,跳出内循环,跳出外循环打印 m的值。 22 【正确答案】
18、D 【试题解析】 coutinue的作用是跳出循环体中剩余的语句而进行下一次循环。第一次循环 x的值为 8,循环体中 if条件成立,打印 x的值 8后将 x减 1,再执行continue语句,跳出本次循环。第二次判断循环条件时, x的值变为 6,不满足循环体内 if条件,执行打印一一 x的操作,即打印 5后跳出循环。第二三次判断循环条件时 x的值为 4,满足循环体中 if条件,执行打印 x一一的操作,即打印 4,后将 x值减一,执行 continue语句,跳出本次循环。第四次判断循环条件时 x的为 2,满足循环体中 if条件,打印 x一一,即打印 2后将 x减一,执行 continue语句 ,
19、跳出本次循环。在进行 for条件表达式中第三个表达式 x一一的操作后 x的值为 0,不满足条件结束循环。所以打印结果为 8, 5, 4, 2,。 23 【正确答案】 D 【试题解析】 形参是函数定义时由用户定义的形式上的变量,实参是函数调用时,主调函数为被调函数提供的原始数据。在 C语言中,实参向形参传送数据的方式是 “值传递 ”。因此 D选项正确。 24 【正确答案】 C 【试题解析】 该程序中 int*p1=&a, *p2=&b, *p= c;指定义三个指针变量,并赋值,即使 p1指向 a; p2指向 b; p指向 c。 *p=*p1*(*p2);该条语句是给 p所指的存储单元 c赋值,就
20、是 p1所指的存储单元的值,即 a的值,与 p2所指的存储单元 b的值相乘,也就是 c=a*b,等价于 c=1*3=3;因此 C选项正确。 25 【正确答案】 B 【试题解析】 在 f(int*p, int*q)函数中,执行 p=p+l是将 p所对应的地址加 1,而 *q=*q+1是将 q所指向的 n的地址所对应的值加 1,所以 m的得知所对应的值没有变,而 n的值则为 3了。因此 B选项正确。 26 【正确答案】 C 【试题解析】 A选项错误,因为 p是指向一个指针 数组,作为数组名,不能指向别的地方。 B选项错误,因为 p0是一个 int指针,也就是 int*;而 a是一个指向指针的指针
21、int*。 c选项正确,因为 p0是一个 int*, a12是 int, &a12是int*,类型吻合。 D选项错误,因为 a作为数组名,不能取地址。即使能取, p1是 int*, &a是 int*,类型不对。因此 C选项正确。 27 【正确答案】 B 【试题解析】 本题重点考察函数的参数传递,函数的参数传递分为传值和传地址两种情况。本题就是结合数组考查参数传递的情形。函数 f完 成的功能是对数据进行排序,语句 f(&a2, 5, 0)的作用是对从 a2开始的 5个元素进行从大到小排序。注意:这里传递的是地址 &a2,所以排序操作可看作是直接对数组 a操作,执行后的结果为 5, 4, 7, 6, 3, 2, 1, 8, 9, 10。语句 f(a, 5, 1)对数组 a的前5个元素从小到大排序,排序后数组为: 3, 4, 5, 6, 7, 2, 1, 8, 9, 10。因此B选项正确。 28 【正确答案】 B 【试题解析】 在 f10r(i=0; iave=0 0: for(i=0; iave=a一 ave+a一 si; *求各门成绩的总和 * a一 ave =N; *求平均分 *