国家二级(C语言)笔试模拟试卷6_第1页
国家二级(C语言)笔试模拟试卷6_第2页
国家二级(C语言)笔试模拟试卷6_第3页
国家二级(C语言)笔试模拟试卷6_第4页
国家二级(C语言)笔试模拟试卷6_第5页
已阅读5页,还剩123页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

国家二级(C语言)笔试模拟试卷第1

套

一、公共基础选择题(本题共10题,每题7.0分,共

10分。)

1、算法的空间复杂度是指

A、算法程序的长度

B、算法程序中的指令条数

C、算法程序所占的存储空间

D、算法执行过程中所需要的存储空间

标准答案:8

知识点解析:算法的空间复杂度一般是指这个算法执行时所需要的内存空间,其中

包括算法程序所占的空间、输入的初始数据所占的存储空间以及算法执行过程中所

需要的额外空间,其中额外空间还包括算法程序执行过程的工作单元以及某种数据

结构所需要的附加存储空间。

2、数据的存储结构是指

A、数据所占的存储空间量

B、数据的逻辑结构在汁算机中的表示

C、数据在计算机中的顺序存储方式

D、存储在外存中的数据

标准答案:2

知识点解析:数据的存储结构是数据元素在计算机存储器内的表示。数据的存储结

构是逻辑结构用计算机语言的实现,即建立数据的机内表示。

3、设有下列二叉树:对此二叉树后序遍历的结果为

A、ABCDEF

B、BDAECF

C、ABDCEF

D、DBEFCA

标准答案:8

知识点解析:二叉树的遍历分为先序、中序、后序三种不同方式.本题要求后序遍

历,其遍历顺序应该为:后序遍历左子树,后序遍历右子树,访问根结点。按照定

义,后序遍历序列是DBEPCA,故答案为D。

4、源程序中应包含一些内部文档,以帮助阅读和理解程序,源程序的内部文档通

常包括选择合适的标识符、注释和

A、程序的视觉组织

B、尽量不用或少用GOTO语句

C、检查输入数据的有效性

D、设计良好的输出报表

标准答案:1

知识点解析:源程序文档化主要包括三个方面的内容:标识符的命名、程序中添加

注释以及程序的视觉组织。

5、对于长度为n的线性表,在最坏情况下,下列各排序法所对应的比较次数中正

确的是

A、冒泡排序为n/2

B、冒泡排序为n

C、快速排序为n

D、快速排序为n(n-l)/2

标准答案:8

知识点解析:假设线性表的长度为n,在最坏情况下,冒泡排序和快速排序需要的

比较次数为n(n-4)/2。由此可见,选项D正确。

6、下面不属于软件设计原则的是

A、抽象

B、模块化

C、自底向上

D、信息隐藏

标准答案:4

知识点解析:软件设计的原则包括:抽象、模块化,信息隐蔽和模块独立性。所以

自底向上不是软件设计原则。答案为C。

7、在数据库管理系统提供的数据语言中,负责数据的完整性、安全性的定义与检

查以及并发控制、故障恢复等功能的是

A、数据定义语言

B、数据转换语言

C、数据操纵语言

D、数据控制语言

标准答案:8

知识点解析:在数据库管理系统提供的数据语言中,数据控制语言负责数据的完整

性、安全性的定义与检查以及并发控制、故障恢复等功能。

8、下列对于线性链表的描述中正确的是

A、存储空间不一定是连续,且各元素的存储顺序是任意的

B、存储空间不一定是连续,且前件元素一定存储在后件元素的前面

C、存储空间必须连续,且前件元素一定存储在后件元素的前面

D、存储空间必须连续,且各元素的存储顺序是任意的

标准答案:1

知识点解析:在链式存储结构中,存储数据的存储空间可以不连续,各数据结点的

存储顺序与数据元素之间的逻辑关系可以不一致,数据元素之间的逻辑关系,是由

指针域来确定的。由此可见,选项A的描述正确。

9、以下叙述中正确的是

A、C程序中注释部分可以出现在程序中任意合适的地方

B、花括号“{”和“}”只能作为函数体的定界符

C、构成C程序的基本单位是函数,所有函数名都可以由用户命名

D、分号是C语句之间的分隔符,不是语句的一部分

标准答案:1

知识点解析:与"*尸之间的信息称为注释信息,在C语言中,允许在任何能够

插入空格符的位置插入注释,但C语言的注释不能进行嵌套,故选项A正确;在

C语言中,函数体是从花括号“{”开始,到花括号“}”结束.但没有规定花括号气”和

只能作为函数体定界符,故选项B错误;选项C中前半句是正确的,在C程序

中由有一个或多个函数所组成,但不是所有的函数都由用户自己命名,有些函数比

如库函数,主函数main。就不能由用户来命名,故选C不正确:在C语言中明确

规定每条语句以分号结束,分号是语句不可缺少的一部分,故选项D不正

确。所以,4个选项中选项A符合题意。

10、以下选项中合法的实型常数是

A、5E2.0

B、E-3

C、2E0

D、I.3E

标准答案:4

知识点解析•:在C语言中,实数有两种表示形式:十进制数形式与指数形式。

般形式的实数:小数形式的实数由整数部分、小数点和小数部分组成(必须要有小

数点),指数形式的小数;指数形式的实数由尾数部分、e(E)和指数部分组成(字母

e或E的前后必须要有数字,且其后面的指数必须为整数)。选项A中,5E2.0中E

后面的2.0不是整数;选项B中,E前面没有数字:选项D中,E后面没有数字。

最终可以判断选项C正确。

二、选择题(1分)(本题共10题,每题1.0分,共10

分。)

11、以下叙述中正确的是()。

A、构成c程序的基本单位是函数

B、可以在一个函数中定义另一个函数

C、main函数必须放在其他函数之前

D、C函数定义的格式是K&R格式

标准答案:1

知识点解析:构成C程序的基本单位是函数,A)正确;函数的定义是互相平行、

独立的,一个函数内不能定义另一个函数,B)错误;main函数可以在其他函数之

前定义,也可以在其他函数之后定义,。错误;C函数定义的一般格式分为传统

格式和现代格式,传统格式也称K&R格式,是早期编译系统使用的格式,现代格

式又称ANSI格式,是现代编译系统使用的格式。

12、结构化程序所规定的三种最基本控制结构是(),

A、输入、处理、输出

B、树形、网形、环形

C、顺序、选择、循环

D、主程序、子程序、函数

标准答案:4

知识点解析:结构化程序设计方法采用顺序、选择和循环三种基本程序控制结构编

写程序,从而使程序具有好的结构。

13、一个C语言程序是由()。

A、一个主程序和若干子程序组成

B、函数组成

C、若干过程组成

D、若干子程序组成

标准答案:2

知识点解析:一个C源程序是由一个main函数和若干个其他函数组成的。函数是

C程序的基本单位,被调用的函数可以是系统提供的库函数,也可以是用户根据需

要自己定义的函数。

14、请选出可用作C语言用户标识符的是()。

A、void,define,WORD

B、a3_b3,_123,IF

C、FOR,-abc,Case

D、2a,Do,$izeof

标准答案:2

知识点解析:C语言规定用户标识符由字母、数字和下划线组成,且第一个字符必

须是字母或下划线,可见选项C),D)是错误的;此外,C语言不允许用户将关键

字作为标识符,而选项A)中的void是C语言的关犍字。

15、下列各数据类型不属于构造类型的是()。

A、枚举型

B、共用型

C、结构型

D、数组型

标准答案:1

知识点解析:本题考查高级语言的数据类型。

16、在16位C编译系统中,若定义longa:则能给a赋值40000的正确语句是

()。

A、a=2000p+20000;

B、a=4000*10;

C、a=30000+10000;

D、a=4000L*10L;

标准答案:8

知识点解析:40000已经超过了C语言规定的短整型的范围。要将这样的数赋值给

一个长整型变量,需要在整型常量后面加字母L。

17、以下不正确的叙述是()。

A、在C程序中,逗号运算符的优先级最低

B、在C程序中,APH和aph是两个不同的变量

C、若变量a和b类型相同,执行了赋值表达式a=b后b中的值将放入a中,用b

中的值不变

D、当从键盘输入数据时,对于整型变量只能输入整型数值,而实型变量只能输入

实型数值

标准答案:8

知识点解析:在C语言的所有运算符中,逗号运算符的优先级最低;C语言中的字

母区分大小写,所以APH和aph是两个不同的变量:赋值表达式a=b表示将b的

值赋给a,而b本身的值保持不变;当从键盘输入数据时、对于整型变量可以输入

整型数值和字符,对于实型变量可以输入实型数和整型数值等,选项D)错。

18、sizeof(float)是()。

A、一个双精度型表达式

B、一个整型表式

C、一种函数调用

D、一个不合法的表达式

标准答案:2

知识点解析:sizeof是长度运算符,或称字节数运算符,用于计算数据类型和变量

的长度。

19、若x,i,j和k都是int型变量,则计算表达式x=(i=4,j=16,k=32)后,x的值

为()。

A、4

B、16

C、32

D、52

标准答案:4

知识点解析:逗号表达式的形式如下:表达式1,表达式2,表达式3,……,表

达式n逗号表达式作为一个整体,其运算过程是从左往右逐个计算表达式,它的值

为最后一个表达式(也即表达式n)的值。逗号运算符的优先级别在所有运算符口最

低。

20、下面程序的功能是卫316表示为两个加数的和,使两个加数分别能被13和11

整除,请选择填空。#include<stdio.h>main(){inti=0,j,k;do{i++;k=316-

13*i}while();j=k/ll;printf("316=13*%d+ll,%d”,i,j);)

A、k/11

B、k%II

C、k/ll==0

D、k%ll==0

标准答案:2

知识点解析:本题的关键是两个加数分别能被13和11整除。当k%ll的值为0

时,则退出循环,将执行j=k/U:语句,输出结果,所以该表达式合理的条件是

k%llo

三、选择题(2分)(本题共30题,每题7.0分,共30

分。)

21、以下选项中可以作为C语言合法常旱的是

A、-80

B、-80

C、-8el.O

D、-80.0e

标准答案:1

知识点解析:本题考查的是C语言中整型常量与实型常量的部分表示方法。选项

A用的是整型常量的十进制表示法,是正确的。以0或-0开头的整数是八进制数表

示法,八进制数的原则是“逢八进一”它只可能包含。〜7这8个符号,故选项B是

错误的。选项C和D椰是实型常量的指数表示法,其规则是用字母。(或E)将一个

实数的小数部分和指数部分分隔开。字母e(或E)之前是小数部分,之后是指数部

分,这两部分都不能省略,且指数部分必须为整数。故选项C和D都不正确。所

以,4个选项中选项A符合题意。

22、下列条件语句中,功能与其他语句不同的是

A、if(a)printf("%d\n",x);elseprinff("%d\nn,y);

B、if(a==O)printf("%d\n,\y);elseprintf("%d\nM,x);

C、fi(a!=O)prinff("%d\n"x);elseprintf("%d\n",y);

D、if(a==O)prinff("%d\n,\x);elseprintf("%d\n",y);

标准答案:8

知识点解析:本题考核的知识点是计语句的用法。选项A、选项B和选项C都是

在a的值为。的时候输出y,a不为。的时候输出x,而选项D是在a为0的时候

输出x,a不为0的时候输出y,所以,4个选项中选项D符合题意。

23、以下不能定义为用户标识符是

A、Main

B、_0

C、_int

D、sizeof

标准答案:8

知识点解析:本题考查的是C语言中的标识符与关键字。合法的标识符由字母,

数字和下划线组成,并且第一个字符必须为字母或下划线。另外,C语言规定了一

批关键字,它们在程序中都代表着固定的含义,不能另作它用,所以合法的标识符

也不能是C语言的任一关键字。本题中,选项A、B、C都符合上述条件,只有选

项Dsizeof是C语言中的关键字,所以,4个选项中选项D符合题意。

24、有以下程序main(){inti,n=0;for(i=2;i<5;i++){do{if(i%3)continue;n++;}

while(!i);n++;}printf("n=%d\n",n);}程序执行后的输出结果是

A、n=5

B、n=2

C、n=3

D、n=4

标准答案:8

知识点解析:本题考核的知识点是do…while结构和算术运算符%的应用。

do…while的结构形式为:do循环体while(条件表达式),当程序执行到do后,先

执行循环体一次,然后才对条件表达式进行计算、判断。若条件表达式的值为真,

则重复执行一次循环体;否则退出,与while结构相比,do…while结构至少要执

行一次循环体;运算符%是求模运算,即求两个数相除的余数。continue语句的作

用时结束本次循环,即跳过本次循环中余下尚未执行的语句,接着再一次进行循环

的条件判定。本题中,当i=2时,执行如循环。由于if表达式的条件为真,执行

continue语句,结束本次循环,判断while循环条件为假,故退出while循环,执行

n++,此时n的值为1,当i=3时,执行do循环.曰于if(3%3)为假,执行下面的

n++语句,此时n的值为2,结束本次循环,继续判断while循环条件为假,故退

出while循环,执行n++语句,此时n的值为3;当i=4时,执行如循环。由于

if(4%3)为真,执行continue语句,结束本次循环,继续判断whHe循环条件为假,

故退出while循环,执行n++,此时n的值为4;当i=5时,退出for循环,因此最

后输出的n的值为4,所以,4个选项中选项D符合题意。

25、有以下程序main(){inta=15,b=21,m=0;switCh(a%3){case0:m++;break;

casel:m++;switch(b%2){default:m++;case0:m++;break;})printf("%d\n",m);

程序运行后的输出结果是

A、1

B、2

C、3

D、4

标准答案:1

知识点解析:在switch语句中break语句的作用是退出分支语句,若没有break语

句则一直向下执行。本题中首先计算switch后面括号里的表达式a%3,印15%3为

0:执行case。:后面的语句m++;m自加1,即m为1遇到break语句;然后跳出

switch语句,所以最后输出的m的值为1,所以选项A正确。

26、以下程序的输出结果是main(){inta=4,b=5,c=0,d;d=!a&&!h||!c;printf

("%d\n",d);)

A、1

B、0

C、非0的数

D、-1

标准答案:1

知识点解析:本题考核的知识点是逻辑运算符的运用。由于单目运算符优先级高

于“&&”和“II”、运算,所以先计算!a、!b和!c分别为“假”、“假”、“真”,然后是

&&运算和“II”运算,原表达式就等价于“假”&&“假F“真”又由于“&&”的优先级

高于“II”运算符,所以先计算“假"&&"假",还是为假,最后是“假”11,"真''为

真。因此最后d被赋值为1,故最后输出为1。所以,4个选项中A为所选。

27、若有说有:intn=2,*p=&n,*q=p;,则以下非法的赋值语句是

A^P=q;

B、*p=*q;

C、n=*q;

D、p=n;

标准答案:8

知识点解析:本越考查的知识点是指针的赋值。本题中首先定义了一整型变量n并

赋初值为2,接着定义了一个整型指针变量p并让它指向n,接着又定义了一指向

指针的指针变量q,选项A中给指针变量p赋值小故这个赋值语句正确;选项B中

*p=*q就是将*q的值赋给指针变量p所指向的变量n,故这个赋值语句不是非法的

赋值语句;选项C中是将*q的值赋给变量n,故这个表达式不是非法的赋值语

句:选项D中p为一指针变量应该杵一地址赋给它,而在此选项的表达式中将变

量n而不是n的地址赋给它,故这个表达式不合法,

28>以下程序的输出结果是charcchar(charch){if(ch>='A,&&ch<=,Z,)

ch=ch-,A,+,a,;returnch;}main(){chars[]=nABC+abc=defDEFn,*p=s;while(*p)

{*p=cchar(*p);p++;)printf{"%$\n",s);}

A、abc+ABC=DEFdef

B、abc+abc=defdef

C、abcABCDEFdef

D、abcabcdefdef

标准答案:2

知识点解析:本题考核的知识点是字符型指针变量与函数的综合应用。本题首先定

义了一个函数cchar(),有一个字符型参数ch。在函数中首先判断该字符是否为大

写字母,如果是则把它转换成小写字符再赋值给cb,把ch作为函数值返回。在主

函数中定义了一个字符数组s并初始化,然后定义了一个指针变量并使它指向数组

so接着通过一个while循环利用指针变量p,依次取出字符数组的字符(直到遇到

字符串结束标志「\0'为止),并调用cchar。函数,把大写字母转换成小写字母,其

他字符不变。最后输出字符数组为s中的内容,结果为“abc+abc=defdeF"。所以,4

个选项中B为所选3

29、有以下程序main(){inta=7,b=8,*p,*q,*r;p-&a;q=&b;r=p;p=q;q=r;printf

(”%d,%d,%d,%d\n”,*p,*q,a,b);程序运行后的输出结果是

A、8,7,8,7

B、7,8,7,8

C、8,7,7,8

D、7,8,8,7

标准答案:4

知识点解析:本题考核的知识点是指针变量的基本应用。程序中定义了两个变量a

和b,并分别赋初值为7和8,定义了三个指针变量p、q、r,并让指针p指向变

量a,让Q指向变量b,然后通过一个中间指针变量r,使指针变量p和q互换,

互换后p指向q所指的内容即b,Q指向开始p所指向的内容即a,因此最后输出

的*p,*q的值为8,7,a,b的值没有改变仍为7,8,所以,4个选项中选项C符

合题意。

30、以下程序的功能是:给r输入数据后计算半径r圆面积s。程序在编译时出错。

main()/*Beginning*/{intr;floats;scanf(n%dn,&r);s=*7t*r*r;printf(,,s=%f\n'\s);

出错的原因是

A、注释语句书写位置错误

B、存放圆半径的变量r不应该定义为整型

C、输出语句中格式描达符非法

D、计算圆面积的赋值语句中使用了非法变量

标准答案:8

知识点解析:在C语言源程序中了注释部分、字符串常量部分可以使用任意字符

外,其余部分只能由52个大小写:字母、10个阿拉伯数字以及'心〜

|!#%&()[「V>“空格”30个特殊符号组成。所以在计算圆面积的赋值语句中出现的

兀是非法字符,将引起编译出错.应该选择D。

31、有以下程序main(){intx[8]={8,7,6,5,0,0},*s;s=x+3;printf(M%d\n",s[2]);)

执行后输出结果是

A、随机值

B、0

C、5

D、6

标准答案:2

知识点解析:本题考核的知识点是指向一维数组的指针变量,通过赋值语句

“s=x+3”,使指针变量s指向数组元素x[3],输出语句中的s[2]等价于*(s+2),即

x[5]僖为0。所以,B选项为所选。

32>有以下程序main(){chara[inti,j;i=sizcof

(a);j=strlen(a);printf(”%d,%d\n"ij);}程序运行后的输出结果是

A、9,9

B、8,9

C、1,8

D、9,8

标准答案:8

知识点解析:本题中首先定义了字符数组a,由于它的长度省略,所以其长度由初

值个数确定,为9。接着将sizeof。函数返回的值赋给i(SIZeof()函数的作用是返回

运算对象占用的字符数),所以i值为9。然后将strlcn。函数的返回值赋给j(strlcn()

函数的作用是返回字符串的长度,不包括字符串的结束标记所以j值为3,

所以最后输出的i.j的值为9.Xc所以4个选项中D正确.

33、有以下程序main(){chara[7]="a0\0a0\0";inti.j;i=sizcof(a);j=strlcn(a);printf

("%d%d\n",i,j);)程序运行后的输出结果是

A、22

B、76

C、72

D、62

标准答案:4

知识点解析:本题主要考查的是C语言中的数组长度和字符串长度。数组长度指

的是一个数组所占内存空间的字节数,数组长度可以通过sizeof(V数组名〉)来求

得;字符串长度是指从指定内存地址开始直到碰到第一个‘\0'字符为止所经过的字

符数(不包括'\0'字符),字符串长度可以通过字符串函数sirlen(〈字符串首地址值

〉)来求得。所以本题程序运行后,变量i中是数组a的长度7,变量j中是数组a

中第一个、(T字符之前的字符数2:选项C符合题意。

34、有以下定义:#include<stdio.h>chara|10|,*b=a;不能给数组a输入字符串的语

句是

A、gets(a)

B>gets(a|O])

C、gets(&a[O]);

D、gets(b);

标准答案:2

知识点解析:本题考核的知识点是函数gets。的应用。函数gets。的调用形式为

gcts(stjadr);stjadr是存放字符串的起始地址。可以是字符数组名、字符指针或

字符数组元素的地址。gels函数用来从终端键盘读入字符串(包括空格符),直到读

入一个换行符为止。换行符读入后,不作为字符串的内容。本题中定义一个长度为

10的字符数组,和一个指针变量b,并且通过赋值让它指向数组a;选项A。选项

Bo选项C和选项D中只有选项B中gets函数的参数a|0]不能表示数组a的首地

址,故选项B不正确。所以,4个选项中选项B符合题意。

35、有以下程序:main(){char*p[10]={',abcu,naabdfgn,"dcdbc","abbd","cd"};

printf("%d\n",strten(p|4|));}执行后输出结果是

A、2

B、3

C、4

D、5

标准答案:1

知识点解析:本题考核的知识点是指针数组的定义和strlen。函数的应用。本题中

首先定义了一个长度为10的指针数组,并赋初值,因此执行stHen(p[4]后的返回值

为字符串“cd”的长度为2。所以,4个选项中选项A符合题意。

36、下列函数定义中,会出现编译错误的是

A、max(intx,inty,int*7.){*z=x>y?x:y;)

B、intmax(intx,y){intz;z=x>y?x:y;returnz;}

C、max(intx,inty){intz;z=x>y?x:y;return(z);

D^intmax(intx,inty){return(x>y?x:y);)

标准答案:2

知识点解析:本题考核的知识点是函数的定义方法。选项B中在说明形参时,省

略了第二个参数的类型,故选项B编译不能通过。所以,4个选项中选项B符合

题意。

37、设有定义:intnl=0.n2,*p=&n2,*q=&nl;,以下赋值语句中与n2=nl;语

句等价的是

A、*p;*q;

B、p=q;

C^*p=&nl;

D、p=*q;

标准答案:1

知识点解析:本题考查的是指针的运算。题目中定义了两个变量nl和n2,又定义

了两个指针p和q分别指向变量n2和nl。要通过指针实现n2=nl,就是要将q所

指内容赋给p所指内容,即*p*q。所以应该选择A。

38、以下叙述中正确的是

A、局部变量说明为stmic存储类,其生存期将得到延长

B、全局变量说明为sioic存储类,其作用域将被扩大

C、任何存储类的变量在未赋初值时,其值都是不确定的

D、形参可以使用的存储类说明符与局部变量完全相同

标准答案:1

知识点解析:静态局部变量在整个程序运行期间,静态局部变量在内存的静态存储

区中占据着永久性的存储单元。由此可知静态局部变量的生存期将一直延长到程序

运行结束。故选项A正确;而全局变量的只有一种静态存储类别,故全局变量说

明为static存储类,和没有说明为static存储类其生存期都是一直延长到程序运行

结束,故选项B不正确;未赋初值的auto型变量的初值是随机的,未赋初值的

stalic型变量的初值是0(故选项C和选项D不正确)。所以;4个选项中选项A符合

题意。

39、设函数fun的定义形式为voidfun(charch,floatx){…}则以下对函九fun的调

节器用语句中,正确是

A、fun(nabc,r,3.0);

B、t=fun(,D\16.5);

C、fun(,65\2.8):

D、fun(32,32);

标准答案:8

知识点解析:本题考查了函数的定义。题目中定义的函数「un()有两个参数,一个

是字符型变量ch.另一个是浮点型变量x,函数类型是void即无返回值-选项A

调用fun的第1个参数是字符串常量与字符变量不匹配,所以不正确。选项B是有

返回值函数的调用形式,不正确。选项C的第1个参数是错误的字符常量,字符

常量是用单引号括起来的一个字符(是转义字符可能有多个字符),故也不正确。选

项D使用两个整型常量调用fun这在C语言中是允许的。因为整型到字符型可以

自动转换,整型到浮点型也可以自动转换。故应该选择D。

40、有以下程序main()inta[10]={l,2,3,4,5,6,7,8,9,10),*p=.&a[3],*q=p+2;printf

("%d\n",*p+*q);程序运行后输出结查是

A、16

B、10

C、8

D、6

标准答案:2

知识点解析:本题考查的是指针的简单应用。题目中首先定义了一个血型数组a

并初始化了,然后定义了两个指针变量p和q,并分别初始化p为指向数组元素

a[3]、q指向p后面的第2个元素即指向a[5].所以最终输出的值为a[3]+a[5]的值

10o应该选B。

41、有以下程序main(){charp[]={,a,;b,,,c},q[]=nabcH;printf("%d%d\nH,sizeof

(p),sizeof(q));)程序运行后输出结果是

A、44

B、33

C、34

D、43

标准答案:4

知识点解析:本题考查的是字符数组的初始化。字符数组即可以用{初始化列裹}来

初始化,也可以用一个字符串常量来初始化。但字符串常量系统会自动为其添加结

束标记、(T,故比实际长度要多一位,所以本题输出为34,应该选择C。

42、有以下程序#definef(x)(x'x)main(){intil,i2;il=f(8)/f(4);i2=f(4+4)/f(2+2);

printf("%d,%d\n”,ilj2);}程序运行后的输出结果是

A、64,28

B、4,4

C、4,3

D、64,64

标准答案:4

知识点解析:本题考查的是带参数的宏。宏替换与函数调用不同,前者是字面上

的,在编译期间完成,后者是内容上的,在运行期间才进行。题目中第1条要替换

的语句il=(8)/f(4);展开后是il=(8*)/(4*4);结果使il=4.而第2条语句

i2=f(4+4)/f(2+2);展开后为i2=(4+4*4+4)/(2+2*2+2);结果使i2=24/8=3。故应该选

择U

43、有以下程序main(){charal='M',a2='m';printf(H%c\n",(al,a2));}以下叙述

中正确的是

A、程序输出大写字母M

B、程序输出小写字母m

C、格式说明符不足,编译出错

D、程序运行时产生错信息

标准答案:2

知识点常析:本题考查的是逗号表达式。因为整个逗号表达式的值为逗号表达式最

后一个于表达式的值,所以本题输出的是a2的值,故应该选择B。

44>有以4程序main(){unsignedinta;intb=-l;a=b;printf(M%u",a);}程序运行后的

输出结果是

A、-1

B、65535

C、32767

D、-32768

标准答案:2

知识点编析:本题考核的知识点是无符号整型数据的简单运用。程序中定义了一个

无符号整型变量a和一个整型变量b,并且给它赋初值为-1,整型在计算机中都以

二进制表示的,-I在二进制表示为1000000000000001,所以当表示为无符号整

数时转换为十进制为32767,故最后输出的无符号型a的值为32767。所以,4个

选项中选项B符合题意

45、有以4程序:#include<string.h>main(){char

str[][20]={"Hello","Beijing")*p=str;printf("%\n,',strlen(p+20));}程序运行后的输出结

果是

A、0

B、5

C、7

D、20

标准答案:4

知识点解析:本题考核的知识点是二维数组的初始化及库函数s〔rlcn()的应用。主

函数中定义了一个二维字符数组并初始化,初始化后的结果为str[0|="Hello%

str[l]="Beijing'\然后定义一个字符指针变量p并让它指向数组的首地址,即指向

str[O],而在C语言中无论是一维还是多维数组,其元素在内存中都是顺序存放

的,故p+20后指针指向所以stHen(P+20);返回的是中的字符串的长

度,即Beijing的长度为7,所以最后输出的值为7,所以,4个选项中选项C符合

题意。

46、有以卜程序:#include<string.h>main(intargc,char*argv||){intiJen-0;

for(i=l;i<argc;i+=2)len+=strlen(argv[i]);printf("%d\nH,len);}经编译链接后生成的可

执行文件是cx.cxc,若运行时输入以下带参数的命令行exabedcfgh3k44执行后输

出的结果是

A、14

B、12

C、8

D、6

标准答案:8

知识点解析:本题考核的知识点是带寥数的主函数的应用。主函数的第一个参数

argc为整形参数,记下从命令行输入的参数的个数;第二个参数argv是一个字符

型的指针数组,它的每一个元素指向命令行输入的参数字符数。在本例中argc的

值为5,argv[0]指向字符串“ex”,argv[l]指向参数字符串“abed",argv⑵指向字符

串“efg”,argv[3]指向参数字符串“h3”,argv[4]指向参数字符串“K44”。在main。函

数中,for循环执行了2次,当i-1时,len=O+strlen〔argv[1]),而其中

argv[l]=<4abcd,\故此时len的值为4;当i=3时,len=4+strlen(argv[3]),而其小

argv[3]-th3,\故此时len的值为6;当i=5时,退出循环,故最后输出的len的住

为6。所以,4个选项中选项D符合题意。

47、在说明语句:中,标识符f代表的是

A、一个用于指向整型数据的指针变量

B、一个用于指向一维数组的行指针

C、一个用于指向函数的指针变量

D、一个返回值为指针型的函数名

标准答案:8

知识点解析:本题考核的知识点是指针作为函数返回值的定义方式。定义指向整型

元素的指针变量形式为:hat*指针变量名。定义指向整型一维数组的行指针形式

为:int(*指针变量名[长度],定义指向返回值为整型的函数的指针变量的形式为:

int(*函数名)(),定义返回值为指向整型的指针型函数的形式为:int*函数名(),本

题定义的是一个返回值为指针型的函数f()。所以,4个选项中D为所选。

48、有如下程序#inckide<stdio.h>main(){FILE旺pl;fpl;fopen("ftxt","w'');

fprintf(fpl,"abc")fclose(fpl);)若文本文件fl.txt中原看内容为:good,则运行以

上:程序后文件fl.Ml中的内容为

A、goodabc

abed

C、abc

D^abegood

标准答案:4

知识点解析:本题考核的知识点是操作文件的几个基本函数。主函数中定义了一个

文件指针中1,然后通过fopen()函数,以写的方式打开文件“fl.tx「,并让指针印

1指向它,接着调用fptind。函数将“abc”写到文件fpl所指的文件里,由于开始fpl

指向文件的“fl.tx「的开始位置,因此“abc”将把文件“fl.txt”里原来的内容“good”覆

盖掉,故文件F.txt”里最后的内容为“ahc”,所以,4个选项中选项C符合题意°

49、下列关于C语言数据文件的叙述中正确的是

A、文件由ASCII码字符序列组成,C语言只能读写文本文件

B、文件由二进制数据序列组成,C语言只能读写二进制文件

C、文件由记录序列组成,可按数据的存放形式分为二进制文件和文本文件

D、文件由数据流形式组成,可按数据的存放形式分为二进制文件和文本文件

标准答案:8

知识点解析:本题考核的知识点是文件的基本概念。C语言可以读写二进制文件和

文本文件两种,故选项A和选项B不正确;文件按数据的存放格式可分为二进制

文件和文本文件两种,其中二进制文件中数据都是以二进制的形式存放,故选项C

不正确。所以,4个选项中选项D符合题意。

50、以下叙述中不正确的是

A、C语言中的文本文件以ASCII码形式存储数据

B、C语言中对二进制位的防问速度比文本文件快

C、C语言中,随机读写方式不使用于文本文件

D、C语言中,顺序读写方式不使用于二进制文件

标准答案:8

知识点解析:本题考核的知识点是文件的读写方式。在C语言中文本文件是以

ASCH码形式存放的,每个字符占一个字节。由于数据在计算机中是以;进制形式

存放的,因此二进制文件中的数据可以直接读出,而不需要像文本文件那样把

ASCH码转换成二进制,因此速度较快。在文本文件中,数据以ASCII码形式存放

的,用户很难判定一个数据到底占几个字节,所以不适合使用随机读写方式。数据

以二进制形式存放,占有的字节数是固定的,所以可以进行随机读写,当然也可以

顺序读写。所以,D选项为所选。

四、公共基础填空题(本题共5题,每题1.0分,共5

分。)

51、算法执行过程中所需要的基本运算次数称为算法的o

标准答案:时间复杂度

知识点解析:算法在执行过程中所执行的基本运算的次数,也就是执行算法所需要

的计算工作量,称为算法的时间复杂度。

52、数据的结构在计算机存储空间中的存放形式称为数据的存储结构或物理

结构。

标准答案:逻辑

知识之解析:数据的逻辑结构在计算机存储空间中的存放形式称为数据的存储结构

或物理结构。

53、数据流图的类型有和事务型。

标准答案:变换型

知识点解析:典型的数据流出有两种,印变换型和事务型。

54、在关系数据库中,将数据表示成二维表,每一个二维表称为o

标准答案:关系或关系表

知识点解析:在关系模型中,把数据看成一个二维表,每一个二维表称为一个关

系.表中的每一列称为一个属性,相当于记录中的一个数据项,对属性的命名称为

属性名,表中的一行称为一个元组,相当于记录值。

55、在数据库理论中,数据库总体逻辑结构的改变,如修改数据模式、增加新的数

据类型、改变数据间联系等,不需要相应修改应用程序,称为o

标准答案:逻辑独立性

知识点解析:数据库总体逻辑结构改变,而不需要相应修改应用程序叫做逻辑独立

性。

五、填空题(本题共12题,每题1.0分,共12分。)

56、以下程序运行后的输出结果是[]。main(){intx=0210;

printf("%X\nH,x);}

标准答案:88

知识点解析:C语言规定,以0开头的整型常量为八进制。另外,在primf()函数

中,%X表示以十六进制无符号形式输出一个整数,且十六进制中的ABCDEF为

大写字母。本题的输出应该是八进制210的十六进制形式。将八进制转换为十六进

制,可以先将其转换为二进制。因为1位八进制表示3位二进制,4位二进制表示

1位十六进制。(210)8=(10001000)2=(88)16,故本题输出为880

57、若有程序:main(){intij;scanq("i=%d,j=%d",&i,&j);printf("i=%d,j=%d\n",

ij);)要求给i赋10,给j赋20,则应该从键盘输入【】。

标准答案:i=0,j=20

知识点解析:该函数的第一个参数是格式字符串,主要由两类字符组成,一类是非

格式符要求原样输入,一类是格式符对应要输入的变量,所以说本题中应该原样输

入口,户,后面分别给变量0和20,所以说空格处应该填入i=0,户20。

58、若有以下程序:main(){int,p,a=5;if(P=a!=O)printf("%d\n",p);else

printf("%d\n",p+2);}执行后输出结果是【】。

标准答案:1

知识点解析:首先计算if语句后面的表达式,根据运算符的优先级可知,先算

“a!=0",该值为1,再把1赋值给p,结果为1(真),执行其后的printf语句,输出

的值为1。

59、当运行以下程序时,输入abed,程序的输出结果是:【】。insert(charstr[])

{intii=strlen(str);while(i>0)(str[2*i]=str[i];str[2*-l]=,*,ji—;)printf("%s\nH,

str);)main(){charstr|40|;scanf(,,%s",sB);inscrt(str);}

标准答案:a*b*c*d,

知识点解析:在insert。函数,因为题目要求输入的字符串为abed,所以执行完“i=

strlen(str);”后,i中存放的是字符串abed的长度值4。所以接F来的while循环会

循环4次,每次让i减1,故4次循环中i的值依次为4、3、2、1。每次循环会执

行两条语句str[2*i]=str[i];str[2*i-l]=,*\当i=4时为:str[8]=str[4];

str[7=^\o执行结果是将字符串abed末尾的结束符、(T复制到其下标值2倍的位

置,并在其前1位插入一个哼符。接下来i=3,执行str[6]=str[3];str[5]='*',执

行后会将字符串abed最后--个字符,d复制到其下标值2倍的位置,并在其前1位

插入一个,*,字符。依次类推,直到i=1,执行sir⑵二将字符

tb,往后移动了1位,并在原位置插入,字符。所以,循环结束后,字符串sir会

变为a*b*c*d*。这就是程序的输出结果。

60、以下程序运行后的输出结果是[1omain(){inta[4][4]={{1,2,3,4},{5,6,

7,8),{11,12,13,14},{15,16,17,18}};inti=0,j=0,s=0;while(i++<4)

{if(i==2||=4)continue;j=0;do{s+=a|i]|j|;j++;)while(j<4);}

Printf(H%d\n",s);)

标准答案:92

知识点解析:主函数中首先定义了一个4行4列的二维数组,然后执行一个while

循环,该循环中又嵌套了一个do-while循环。现看while循环,该循环通过i++的

值来判断是否结束循环当i++的值为4的时候结束循环,当i=0时,执行while的

循环体,显然if语句条件不满足不执行,接着让i=0,然后执行do-while循环体,

我们不难看出do-whilo循环的功能是将第i+1行的所有元素加起来,所以这时s的

值为s=a[l][O]+a[l][l]+a[l]⑵+a[l][3)=26,当i=l时,i+l=2,uf后面括号里的表达

式的值为真执行后面的continue语句,结束该次循环;当i=2时,i加1变为3,把

第3+1行的所有元素的加到s上,此时s=s+a⑵⑼-a⑵⑴+a⑵⑵+a⑵[3]=92,当

i=3时,3+1=4,if后面括号里的表达式的值为真执行后面的continue语句,结束该

次循环,当i=3时,if后面括号里的表达式的值为真执行后面的conlinue语句,结

束该次循环当i=4时while循环结束,所以最后输Hi的s的值为92。

61、己定义定arch='$';inti=l,j;,执行j=!ch&&ii++以后,i的值为[】。

标准答案:1

知识点解析•:本题中的ch是一个字符变量,其初始值为芍,(非0值即为真),所

以!ch的结果为假,此时&&右边的i十十被“短路,、,即不会被订算。由此可见,i的

值不会改变,故本题应该填1。

62、以下程序运行后的瑜出结果是。mam(){chara[]="12345678917:p;int

i=0;p=a;while(*p){if(i%2=0)p++;i++;}puts(A);}

标准答案:*2*4*6*8*

知识点解析:程序中定义了一个字符数组a,并初始化为123456789,接着定义了

一个指针p并让它指向数组a,紧接着执行了一个while循环,此循环的作用是:

当i为偶数时,将"*''赋给a[i],p指向数组末尾,循环结束,此时数组中a[0]、

a⑵、a[4]、a[6]和a[用的值都为“*”.所以最后调用puts。函数输出的a的值为

*2*4*6*8*

63、以下程序运行后的输出结果是[]omain(){inti,n[]=(0,0,0,0,0);

for(i=l;i<=4;i++){n[i]=n[i-l]*2+l;printfi["%d",n[i]);)}

标准答案:13715

知识点解析:本题中,定义了个整型数组n并初始化,在for循环语句中,再对数

组中各元素重新赋值。循环执行第一次时,n[l]=n[0]*2+l=0+l=l,primf函数输出

1,然后i的值加1,比较iV=4成立,继续执行循环体语句,相应输出3、7、

15,直至i<=4不成立,退出循环。所以最后输出为1、3、7、150

64、以下程序运行后的输出结果是[1ostructNODE{intnum;stmetNODE

*next;};main(){structNODEs[3]=({I,{2,{3,'\0'}),*p,*q,

*r;intsum=0;s[0].next=s+l;s[l].next=s+2;s[2].next=s;p=sq=p->

next;r=q->next;sum+=q->next->num;sum+=r->next->next->num;

printf("%d\n",sum);)

标准答案:5

知识点解析:主函数首先声明了一个结点数组s[3],并分别初始化其成员num为

1、2、3,而成员next全部被初始化为、(T也就是0。下面又用三条语句

s[0].ncxt=s+l;s[l].ncxt=s+2;s[2].ncxt=s;分别将三个结点指向其后面一个结点,

而最后一个结点指向第1个结点,构造出一条单向循环链表。接下来用结点指针

p=s即让其指向s[0],然后让q=p->next,即指向了s[l],r=q->next即让r指向

s[2],然后让一个累计变量sum累加q->next->num和r->ncxt->next->nm,因

为q指向s[l]所以它的next指针指向的是s[2],故第1次累加的是s[2].num=3,而

r指向的是s⑵所以它的next是s[0],s[0]的next指向s[l],故第2次累加的是

s[l].num=2o所以程序最终输出结果为5。

65、下面程序的运行结果是[]。intf(inta[],intn){if(n>l)retuma[0]+f(&a[l],n-

1);elsereturna[0];)main(){intaa[3]=[1»2,3},s;s=f(&aa[0]»3);

printf("%d\n",s);)

标准答案:6

知识点解析•:经过分析将递归函数写成其数学表达式如下:

f(&a,n)=a⑼+f(&a[l],n-I)n>l

f(&a.n)=a[0]。本题中定义了一个长度为3的数组aa并初始化。接着

调用递归函数f,由上面的数学表达式以计算其返回值s=l+2+3=6,所以空格处应

该填6。

66、以下程序中函数f的功能是在数组x的n个数(假定n个数互不相同)小找出最

大最小数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。请填

空。#include<stdio.h>voidf(intx[],intn){intp0»pl,i,j»t,m;i=j=x|O];

pO=pl=O;for(m=O:m<n;m++){if(x[m]>i){i=x[m];p0=m;)elseif(x[m]<j)

{j=x[m]:pi=m:))t=x[pO]:x[pO]=x[n-l];x[n-l]=t;t=x[pl]:x[pl]=[1;[1=t}

main())inta|10],u;for(u=0;u<10;u++)scamp(n%d",&a|u]);f(a,10);

for(u=0;u<10;u++)printf("%d",a[u]);ptintf("\nH);}

标准答案:x[O]x[O]

知识点解析:根据题意,f()函数要“将其中最小的数与第一个数对换,把最大的数

与最后一个数对换“,而填空处的上一行语句正是使用交换算法,将下标为pO的元

素与数组x的最后一个元素(n个元素的数组,其最后一个元素的下标为n-1)交换。

所以不难得知,填空所在行的语句是要将下标为pl的元素与数组x的第1个元素

交换。故两个空都应该填x[0]。

67>以下程序中,函数SumColumMin的功能足:求出M行N列二维数组每列元

素中的最小值,并计算它们的和值。和值通过形参传回主函数输出。请填空。

#defineM2#defineN4voidSumColumMm(inta[M][N],int*sum){inti,j,k,s=O;

for(i=0;i<N;i++){k=0;for(j=l;j<M;j++)if(a[k][i]>a[j][i])k=j;s+=[];)

[]=s;}main(){intx[M][n])={3;,5,L4,1,8,3},s;

SumC01umMm([]);ptintf("%d\nu,s);)

标准答案:a[k][i]*sumx,&s

知识点解析:本题定义了一个函数SumColumMin(),该函数有两个参数,第一个

参数为数组名,第二个参数为一个指针,用来访问存放数组中每列元素中的最小值

的存储空间的变量。所以在主函数中调用SumColunMin。函数,应该将数组x和

sam作为实参传给SumColumMin。中的形参,故第20个空格处应该填x,&s。在

SumColumMin。函数中用了两重循环,用N记录数组的列,M记录数组的行。内

循环共循环了M次,每循环一次将a[k][i]比较(当k=0时,a[k皿第一行第一

列的值,然后将该值依次和第一列中的每个值比较,让a[k][i]表示较小的值,那么

比较到最后一个元素后a[k][i]就是改列中最小元素的值),让k记录较小值元素的

行下标,这样通过M次循环得到每列中的最小元素,然后退出内循环,继续执行

该次外循环里的其他语句,即将刚求得第i列的最小值a[k][i]累加到s中,故第一

个空格处应该填最后外循环共循环N次,将每列得最小值累加到s中,退

出循环,然后让指针sum所指向得存储空间得值为s故第二个空格处应该填

*sum。

因家二级(C语言)笔试模拟试卷第2

套

一、公共基础选择题(本题共70题,每题7.0分,共

70分。)

1、算法的时间复杂度是指

A、执行算法程序所需要的时间

B、算法程序的长度

C、算法执行过程中所需要的基本运算次数

D、算法程序中的指令条数

标准答案:C

知识点解析:算法的复杂度主要包括算法的时间复杂度和空间复杂度。所谓算法

的时间复杂度是指执行算法所需要的计算工作量,即算法执行过程中所需要的基本

运算的次数;算法的空间复杂度一般是指执行这个算法所需要的内存空间。

2、常采用的两种存储结构是()。

A、顺序存储结构和链式存储结构

B、散列方法和索引方式

C、链表存储结构和数组

D、线性存储结构和非线性存储结构

标准答案:A

知识点解析:线性表的存储通常要用两种存储结构:顺序存储结构和链式存储结

构。

3、下列叙述中,不属于软件需求规格说明书的作用的是

A、便于用户、开发人员进行理解和交流

B、反映出用户问题的结构,可以作为软件开发工作的基础和依据

C、作为确认测试和验收的依据

D、便于开发人员进行需求分析

标准答案:D

知识点解析:软件需求规格说明书(SRS,SoftwareRequirementSpecification)是需求

分析阶段的最后成果,是软件开发中的重要文档之一。它具有以下儿个方面的作

用:①便于用户、开发人员进行理解和交流;②反炽出用户问题的结构,可以作为软

件开发工作的基础和依据;③作为确认测试和验收的依据。

4、线性表的链式存储结构是一种的存储结构。

A、随机存储

B、顺序存储

C、索引结构

D、散列结构

标准答案:2

知识点解析:线性表的链式存储结构中的每一个存储结点不仅含有一个数据元素,

还包括指针,每一个指针指向一个与本结点有逻辑关系的结点。此类存储方式属于

顺序存储。

5、下列叙述中正确的是()。

A、黑箱(盒)测试方法完全不考虑程序的内部结构和内部特征

B、黑箱(盒)测试方法主要考虑程序的内部结构和内部特征

C、白箱(盒)测试不考虑程序内部的逻辑结构

D、上述3种说法都不对

标准答案:1

知识点解析:黑箱测试方法完全不

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论