1、国家二级 C语言程序设计机试(选择题)模拟试卷 5及答案与解析 一、选择题 1 下列叙述中正确的是 ( )。 ( A)算法的效率只与问题的规模有关,而与数据的存储结构无关 ( B)算法的时间复杂度是指执行算法所需要的计算工作量 ( C)数据的逻辑结构与存储结构是一一对应的 ( D)算法的时间复杂度与空间复杂度一定相关 2 栈和队列的共同点是 ( )。 ( A)都是先进后出 ( B)都是先进先出 ( C)只允许在端点处插入和删除元素 ( D)没有共同点 3 对于现实世界中事物的特征,在实体 联系模型中使用 ( )。 ( A)属性描述 ( B)关键字描述 ( C)二维表格描述 ( D)实体描述 4
2、 下列关于队列的叙述中正确的是 ( )。 ( A)在队列中只能插入数据 ( B)在队列中只能删除数据 ( C)队列是 “先进先出 ”的线性表 ( D)队列是 “先进后出 ”的线性表 5 下列选项中属于面向对象设计方法主要特征的是 ( )。 ( A)继承 ( B)自顶向下 ( C)模块化 ( D)逐步求精 6 关系表中的每一横行称为一个 ( )。 ( A)元组 ( B)字段 ( C)属 性 ( D)码 7 下列对软件测试和软件调试叙述中错误的是 ( )。 ( A)严格执行测试计划,排除测试的随意性 ( B)软件调试的目的是改正软件错误 ( C)软件测试不需要考虑测试成本 ( D)正确的执行测试用
3、例 8 下列测试方法中, ( )均属于白盒测试的方法。 ( A)语句覆盖法和边界值分析法 ( B)条件覆盖法和基本路径测试法 ( C)边界值分析法和代码检查法 ( D)等价类划分和错误推测法 9 负责数据库中查询操作的数据库语言是 ( )。 ( A)数据定义语言 ( B)数据 管理语言 ( C)数据操纵语言 ( D)数据控制语言 10 一般情况下,当对关系 R和 S进行自然连接时,要求 R和 S含有一个或者多个共有的 ( )。 ( A)记录 ( B)行 ( C)属性 ( D)元组 11 以下说法中正确的是 ( )。 ( A) C语言程序总是从第一个定义的函数开始执行 ( B)在 C语言程序中,
4、要调用的函数必须放在 main()函数中定义 ( C) C语言程序总是从 main()函数开始执行 ( D) C语言程序中的 main()函数必须放在程序的开始部分 12 以下叙述中正确的是 ( )。 ( A)在算法设计时,可以把复杂任务分解成一些简单的子任务 ( B)在 C语言程序设计中,所有函数必须保存在一个源文件中 ( C)只要包含三种基本结构的算法就是结构化程序 ( D)结构化程序必须包含所有三种基本结构,缺一不可 13 以下叙述中正确的是 ( )。 ( A)字符变量在定义时不能赋初值 ( B)字符常量可以参与任何整数运算 ( C)同一英文字母的大写和小写形式代表的是同一个字符常量 (
5、 D)转义字符用符号开头 14 表达式 a+=a一 =a: 9的值是 ( )。 ( A) 0 ( B)一 9 ( C) 18 ( D) 9 15 以下各项中,当 x为大于 1的奇数时,值为 0的表达式是 ( )。 ( A) x 2=0 ( B) x 2 ( C) x 2!=0 ( D) x 2=1 16 若有定义语句: int x=12, y=8, Z; 在其后执行语句: z=0 9+x y; 则 z的值为 ( )。 ( A) 1 ( B) 1 9 ( C) 2 ( D) 2 4 17 有以下程序段: int m=33, n=66; m=mn; n=nm; m=mn; 执行上述语句后, m和
6、n的 值分别是 ( )。 ( A) m=66, n=33 ( B) m=33, n=66 ( C) m=66, n=66 ( D) m=33, n=33 18 设有定义: double x=2 12;,以下不能完整输出变量 X值的语句是 ( )。 ( A) prinff(“x= 5 0f n”, x); ( B) prinff(“x= f n”, x); ( C) prinff(“x= lf n”, x); ( D) prinff(“x= 0 5f n”, x); 19 有以下程序: #include main() int x=1, y=0; if(!x)y+; else if(X=0) if
7、(x)y+=2; else y+=3; prinff(“ d n”, y); 程序运行后的输出结果是 ( )。 ( A) 0 ( B) 2 ( C) 1 ( D) 3 20 有以下程序: #include void fun(int*P, int*q) P=P+1; *q=*q+1; main() int m=1, n=2, *r= m; fun(r, n); printf(“ d, d n”, m, n); 程序运行后的输出结果是 ( )。 ( A) 1, 3 ( B) 2, 3 ( C) 1, 4 ( D) 1, 2 21 有以下程序: #include #define S(x)x*x vo
8、id main() int k-5, j=2; prinff(“ d, d n”, S(k+j+2), S(+k+2); 程序的 运行结果是 ( )。 ( A) 21 18 ( B) 81, 81 ( C) 21, 21 ( D) 18 18 22 有以下程序 #include main() int i=1; for(printf(“ d”, i); i main() int i, array6=1, 5, 0, 4; for(i=0; i main() int b 33=0, 1, 2, 0, 1, 2, 0, 1, 2, i, j, t=1; for(i=0; i=0时没有任何输出 ( D
9、) printf函数调用语句总是被跳过 30 有以下程序: #include #define N 4 void fun(int aN) int i; for(i=0; i int a=1, b=2; void funl(int a, int b) printf(“ d d”, a, b); void flun2() a=3; b=4; main() funl(5, 6); fun2(); printf(“ d d n”, a, b); 程序运行后的输出结果是 ( )。 ( A) 5 6 3 4 ( B) 3 4 5 6 ( C) 1 2 5 6 ( D) 5 6 1 2 32 有以下程序: #
10、include void fun(char*a, char*b) while(*a=*)a+; while(*b=*a) b+; a+; main() char *s=“*a*b*” t80; fun(s, t); puts(t); 程序的运行结果是 ( )。 ( A) a*b* ( B) a*b ( C) *a*b ( D) ab 33 以下叙述中正确的是 ( )。 ( A)语句 P=NULL;执行后,指针 P指向 地址为 0的存储单元 ( B)指针变量只能通过求地址运算符 &来获得地址值 ( C)语句 P=NULL;与 P= 0;是等价的语句 ( D) int*p1;、 int*p2;、
11、int*p3;都是合法的定义指针变量的语句 34 设有定义: int a=64, b=8;,则表达式 (a b)和 (a I b) (a I I b)的值分别为( )。 ( A) 1和 1 ( B) 1和 0 ( C) 0和 1 ( D) 0和 0 35 有以下程序: #include main() int a=2, c=5; printf(“a= d, b= d n”, a, c); 程序的输出结果是 ( )。 ( A) a=2 b=5 ( B) a= 2 b= 5 ( C) a= ( D) b= d d.a= d.b= d 36 有以下程序: #include main() char*s=
12、“12134”: int k=0, a=0; while(sk+1) k+: if(k 2=0) a=a+(sk一 0+1); continue; a=a+(sk一 0); printf(“k= d a= d n”, k, a); 程序运行后的输出结果是 ( )。 ( A) k=5 a=15 ( B) k=4 a=12 ( C) k=6 a=11 ( D) k=3 a=14 37 有以下程序段: struct float weight; char sex; char name10; rec, *ptr; ptr=&rec; 从键盘读入 字符串给结构体变量 Fee的 name成员,错误的输入语句
13、是 ()。 ( A) scanf(“ s”, Fee一 name); ( B) scanf(“ s”, recname); ( C) scanf(“ s”, (*ptr) name); ( D) scanf(“ s”, ptr一 nallle); 38 若有以下程序: #include void fun(int a, int n) int i, j, t; for(i=1; iaj) t=ai; ai=aj; aj=t; main() int c10=10, 9, 8, 7, 6,5, 4,3, 2, 1, i; fun(e, 10); for(i=0; i int sum(int m) st
14、atic int n=1; return n+=m: main() int i; for(i=1; i=0时,程序执行 printf(” 4d n”, x);语句,所以C、 D选项错误。因为 for循环的循环次数 i是从 1到 100,如果先后输入 100个非负整数,则这些数将全部输出。 30 【正确答案】 A 【试题解析】 按照二维数组的访问方式逐个查找,然后总结规律是这种题型常用的解决方法。 31 【正确答案】 A 【试题解析】 在一个源文件中,如果外部变量和局部变量同名,则在该局部变量的作用域内,该外部变量会被 “屏蔽 ”,所以函数 funl()输出的是局部变量 a、 b的值: 5 6;
15、 fun2()改变的是全局变量 a、 b的值, 输出结果为 3 4,答案选 A。 32 【正确答案】 A 【试题解析】 注意两个 while,第一个是判断相等 “=”,第二个是赋值 “=”,第一个循环终止的条件是指针指向的字符不为 “*”,就会在遇到字符 “a”时停止,第二个循环把 a指针所指的内容依次赋给了 b指针指向的内容,直到字符串结束时终止。所以结果就是字符串的后半段,选项 A正确。 33 【正确答案】 D 【试题解析】 考查指针变量。指针变量的定义形式为:类型名 *指针变量名,表示指向某一个变量的指针,如果定义形式为:类型名 *指针变量名,则表 示指向某一个指针变量的指针,所以 D选
16、项正确。指针变量本身存储的是其指向的变量的地址值,不需要使用求地址运算符 &来获得地址, B选项错误。 p=NULL;是将空指针赋给指针变量,表示该指针变量当前未指向任何变量,语句 p= O;本身不正确,两者不等,故选项 A、 C错。答案选 D。 34 【正确答案】 A 【试题解析】 常用的位运算符有: “一 ”按位求反, “”右移, “&”按位与, “”按位异或, “1”按位或。逻辑或运算符 “I”,计算左表达式值,如果为真,则不计算右表达式值,而整个表达式为真;若左 表达式为假,再计算右表达式值,然后做或运算。逻辑与运算符 “ ”,计算左表达式值,如果为假,则不计算右表达式值,而整个表达式
17、为假;若左表达式为真,再计算右表达式值,然后做与运算。 a=64换算为二进制为 1000000, b=8换算为二进制为 1000, a&b=0为假, a&b为真, (a&b)(a& b)为真,值为 1。 a Ib=1001000为真, ab为真,则(a1b)&(ab)为真,值为 1。故 A选项正确。 35 【正确答案】 C 【试题解析】 c语言中用 “ ”输出字符 “ ”,所以 d输出为 d两个普通字符,而不是根据格式控制符 “ d”的含义来输出,故 C选项正确。 36 【正确答案】 B 【试题解析】 当 k=0时,执行 while一次,得到 k=1, a为 2;当 k=1时,执行while一
18、次,得到 k=2, a为 4;当 k=2时,执行 while一次,得到 k=3, a为 7;当 k=3时,执行 while一次,得到 k=4, a为 12。故 B选项正确。 37 【正确答案】 A 【试题解析】 本题中声明了一个结构体类型 person,定义了两个结构体变量,分别是 rec和指针变量 ptr。 A选项中, rec是一个结构 体变量,结构体变量访问结构成员的方式应该是 rec.name,故答案选 Ao 38 【正确答案】 D 【试题解析】 该题首先对一维数组进行初始化, c0到 c9依次赋值为 10到 1。fun(c, 10);语句调用 fun函数, fun函数的功能是将一维数组偶数位元素的数值由小到大排序,最后将排好序的新的一维数组进行输出。故 D选项正确。 39 【正确答案】 A 【试题解析】 在输出函数中,调用 sum函数, sum函数的作用是定义一个常数n=1,对 n进行叠加主函数传递的 m值,随后将和返回给主函数,因此 输出为2,。 40 【正确答案】 A 【试题解析】 文件打开方式为 “w”表示只写不读,选项 A正确。