1、二级 C 语言笔试 68 及答案解析(总分:96.00,做题时间:90 分钟)一、B选择题/B(总题数:50,分数:60.00)1.若变量 a 是 int 类型,并执行了语句:a=A+1.6;则正确的叙述是( )。(分数:1.00)A.a 的值是字符CB.a 的值是浮点型C.不允许字符型和浮点型相加D.a 的值是字符A的 ASCII 码值加上 12.已知函数的调用形式:fread(buf,size,count,fp),参数 buf 的含义是( )。(分数:1.00)A.一个整型变量,代表要读入的数据项总数B.一个文件指针,指向要读的文件C.一个指针,指向要读入数据的存放地址D.一个存储区,存放
2、要读的数据项3.数据流图用于抽象地描述一个软件的逻辑模型,数据流图由一些特定的图符构成。下列图符名标识的图符不属于数据流图合法图符的是( )。(分数:1.00)A.控制流B.加工C.数据存储D.源和潭4.以下正确的函数头定义形式是( )。(分数:1.00)A.double fun(int x,intB.double fun(int x;intC.double fun(int x,int ;D.double fun(int x,;5.数据结构中,与所使用的计算机无关的是数据的( )。(分数:1.00)A.存储结构B.物理结构C.逻辑结构D.物理和存储结构6.结构化程序设计主要强调的是( )。(分
3、数:1.00)A.程序的规模B.程序的效率C.程序设计语言的先进性D.程序的易读性7.用链表表示线性表的优点是( )。(分数:1.00)A.便于随机存取B.花费的存储空间较顺序存储少C.便于插入和删除操作D.数据元素的物理顺序与逻辑顺序相同8.函数 fun 的返回值是( )。 fun(char *a,char *b) int num=0,n=0; while( * (a+num)! =/0) num+; while(bn) *(a+num)=bn;num+;n+; return num; (分数:1.00)A.字符串 a 的长度B.字符串 b 的长度C.字符串 a 和 b 的长度之差D.字符串
4、 a 和 b 的长度之和9.若 fp 是指向某文件的指针,且已读到文件末尾,则库函数 feof(fp)的返回值是( )。(分数:1.00)A.EOFB.-1C.1D.NULL10.以下正确的说法是( )。(分数:1.00)A.用户若需调用标准库函数,调用前必须重新定义B.用户可以重新定义标准库函数,若重新定义,该函数将失去原有含义C.系统根本不允许用户重新定义标准库函数D.用户若需调用标准库函数,调用前不必使用预编译命令将该函数所在文件包括到用户源文件中,系统会自动调用11.执行语句 for(i=1; i+4;);后变量 i 的值是( )。(分数:1.00)A.3B.4C.5D.不定12.下面
5、四个选项中,均是不合法的用户标识符的选项是( )。(分数:1.00)A.A P_0 doB.float la0_AC.b-a goto intD._123 temp int13.能正确表示逻辑关系“a)10 或 a0”的 C 语言表达式是( )。(分数:1.00)A.a =10 or a=0B.a =0|a=10C.a=1022.调用 gets 和 puts 函数时,必须包含的头文件是( )。(分数:1.00)A.stdihB.stdlihC.defineD.以上都不对23.下列数据中,不合法的 C 语言实型数据的是( )。(分数:1.00)A.0.123B.123e3C.2.1e3.5D.7
6、89.024.有一堆零件(个数在 100 到 200 之间),如果分成 4 个零件一组,则多 2 个零件;若分成 7 个零件一组,则多 3 个零件;若分成 9 个零件一组,则多 5 个零件。下面的程序是求这堆零件的总数,请选择填空。 #includestdioh main() int i; for(i=100; i200;i+) if(i-2)%4=0) if(! (i-3)%7) if(_) printf(“%d“,i); (分数:1.00)A.i%9=5B.i%9!=5C.(i-5)%9!=0D.(i-5)%9= =025.在 C 语言中,char 型数据在内存中的存储形式是( )。(分数
7、:1.00)A.补码B.反码C.原码D.ASCII 码26.算法的空间复杂度是指( )。(分数:1.00)A.算法程序的长度B.算法程序中的指令条数C.算法程序所占的存储空间D.执行算法所需要的存储空间27.以下程序段的输出结果是( )。 int a=1234; printf(“%2d/n“,a);(分数:1.00)A.12B.34C.1234D.提示出错,无结果28.若有以下结构体,则正确的定义或引用的是( )。 struct Test int x; int y; vl;(分数:1.00)A.Tesx=10;B.Test v2;v2.x=10;C.struet v2;v2.x=10;D.st
8、ruct Test v2=10;29.C 语言规定,在一个源程序中,main 函数的位置( )。(分数:1.00)A.必须在最开始B.必须在系统调用的库函数的后面C.可以任意D.必须在最后30.下面判断正确的是( )。(分数:1.00)A.char *a=“china“;等价于 char *a;*a=“ghina“;B.char str5=“china“;等价于 char str=“china“;C.char*s=“china“;等价于 char*s;s=“china“;D.charc4=“abc“,d4=“abc“;等价于 char c4=d4=“abc“;31.下列程序的输出结果是( )。
9、 #include stdioh int f(int a,int b); main() int i=2,p,j,k; j=i; k=+i; p=f(j,k); printf(“%d“,p); int f(int a,int b) int c; if(ab)c=1; else if(a= =b) c=0; else c=-1; return(c); (分数:1.00)A.-1B.1C.2D.编译出错,无法运行32.有如下程序: #define N 2 #define M N+1 #define NUM 2*M+1 main() int i; for(i=1; i=NUM;i+)printf(“%
10、d/n“,i); 该程序中的 for 循环执行的次数是( )。(分数:1.00)A.5B.6C.7D.833.下列程序的输出结果是( )。 #inelude stdioh main() int a5=2,4,6,8,10,*p,*k; p=a; k=(分数:2.00)填空项 1:_64.下面程序中函数 fun 的功能是:找出一维数组元素中的最大值和它所在的下标,并将最大值和其下标通过形参传回。数组元素中的值已在主函数中赋予。主函数中 x 是数组名,n 是 x 中的数据个数,max 存放最大值,index 存放最大值所在元素的下标。请填空。 #include stdlibh #include s
11、ldioh void fun(int a,int n, int * max,int *d) int i; *max=a0; *d=0; for(i=0;U 【15】 /U;i+) if(*maxU 【16】 /U) *max=ai;*d=i; main() int i, x20, max, index, n=10; randomize(); for(i=0;in;i+) xi=rand()%50;printf(“%4d“,xi); printf(“/n“); fun(x,n,cc4;cc+)fun(); printf(“/n“);(分数:2.00)填空项 1:_66.以下程序的输出结果是U 【
12、18】 /U。 #include stdioh #define MAX(x,y)(x),(y)?(x):(y) main() int a=5,b=2,c=3,d=3,t; t=MAX(a+b,c+d)*10; printf(“%d/n“,t); (分数:2.00)填空项 1:_67.用以下语句调用库函数 malloc,使字符指针 st 指向具有 11 个字节的动态存储空间,请填空。 st=(char*)U 【19】 /U;(分数:2.00)填空项 1:_68.以下程序段打开文件后,先利用 fseek 函数将文件位置指针定位在文件末尾,然后调用 ftell 函数返回当前文件位置指针的具体位置,从
13、而确定文件长度。请填空。 FILE * myf;long f1; myf=U 【20】 /U(“test.t“,“rb“); fseek(myf,0,SEEK END) ; f1=ftell(myf); fclose(myf); printf(“%d/n“,f1);(分数:2.00)填空项 1:_二级 C 语言笔试 68 答案解析(总分:96.00,做题时间:90 分钟)一、B选择题/B(总题数:50,分数:60.00)1.若变量 a 是 int 类型,并执行了语句:a=A+1.6;则正确的叙述是( )。(分数:1.00)A.a 的值是字符CB.a 的值是浮点型C.不允许字符型和浮点型相加D.
14、a 的值是字符A的 ASCII 码值加上 1 解析:解析 字符“A”要转换成相应的 ASCII 码值,由于运算结果要赋值给 int 型变量,所以对 1.6进行取整运算,最后 a 的值应是 66。2.已知函数的调用形式:fread(buf,size,count,fp),参数 buf 的含义是( )。(分数:1.00)A.一个整型变量,代表要读入的数据项总数B.一个文件指针,指向要读的文件C.一个指针,指向要读入数据的存放地址 D.一个存储区,存放要读的数据项解析:解析 buf 是一个指针。对函数 fread 来说,它是读入数据的存放地址(指起始地址)。对 fwrite来说,是要输出数据的地址。3
15、.数据流图用于抽象地描述一个软件的逻辑模型,数据流图由一些特定的图符构成。下列图符名标识的图符不属于数据流图合法图符的是( )。(分数:1.00)A.控制流 B.加工C.数据存储D.源和潭解析:解析 数据流图包括四个方面,即加工(输入数据经加工变换产生输出)、数据流(沿箭头方向传送数据的通道,一般在旁边标注数据流名)、存储文件(数据源)(表示处理过程中存放各种数据的文件)、源和潭(表示系统和环境的接口,属系统之外的实体),不包括选项中的控制流。4.以下正确的函数头定义形式是( )。(分数:1.00)A.double fun(int x,int B.double fun(int x;intC.d
16、ouble fun(int x,int ;D.double fun(int x,;解析:解析 函数的形式参数之间以逗号“,”隔开,且每个变量均需说明其数据类型,圆括号后面不能有分号。只有选项 A) 符合要求。5.数据结构中,与所使用的计算机无关的是数据的( )。(分数:1.00)A.存储结构B.物理结构C.逻辑结构 D.物理和存储结构解析:解析 数据结构一般包括三个方面的内容:数据的逻辑结构、存储结构及数据上的运算集合。数据的逻辑结构只抽象的反映数据元素之间的逻辑关系,而不管它在计算机中的存储表示形式。6.结构化程序设计主要强调的是( )。(分数:1.00)A.程序的规模B.程序的效率C.程序
17、设计语言的先进性D.程序的易读性 解析:解析 结构化程序设计方法的主要原则可以概括为自顶向下、逐步求精、模块化及限制使用 goto语句,总的来说可使程序结构良好、易读、易理解、易维护。7.用链表表示线性表的优点是( )。(分数:1.00)A.便于随机存取B.花费的存储空间较顺序存储少C.便于插入和删除操作 D.数据元素的物理顺序与逻辑顺序相同解析:解析 链式存储结构的结点空间可以动态申请和释放,其数据元素的逻辑次序靠结点的指针来指示,在进行插入和删除操作时不需要移动数据元素,故链式存储结构下的线性表便于插入和删除操作。8.函数 fun 的返回值是( )。 fun(char *a,char *b
18、) int num=0,n=0; while( * (a+num)! =/0) num+; while(bn) *(a+num)=bn;num+;n+; return num; (分数:1.00)A.字符串 a 的长度B.字符串 b 的长度C.字符串 a 和 b 的长度之差D.字符串 a 和 b 的长度之和 解析:解析 本题首先通过第一个 while 循环计算字符串 a 的长度,再通过第二个循环,将字符串 b 连接到字符 a 的后面,最后返回连接后的总长度。9.若 fp 是指向某文件的指针,且已读到文件末尾,则库函数 feof(fp)的返回值是( )。(分数:1.00)A.EOFB.-1C.1
19、 D.NULL解析:解析 EOF 是文本文件的文件结束标志,NULL 是打开文件错误的返回值。foef(fp)用来判断文件位置指针是否在文件末尾,文本文件和二进制文件均可以使用此函数。如果遇到文件结束就返回 1,否则返回 0。10.以下正确的说法是( )。(分数:1.00)A.用户若需调用标准库函数,调用前必须重新定义B.用户可以重新定义标准库函数,若重新定义,该函数将失去原有含义 C.系统根本不允许用户重新定义标准库函数D.用户若需调用标准库函数,调用前不必使用预编译命令将该函数所在文件包括到用户源文件中,系统会自动调用解析:解析 用户调用标准库函数前不必重新定义,而只需使用预编译命令将该函
20、数所在文件包括到用户源文件中即可。而且,系统允许用户重新定义标准库函数,但此时该函数将失去原有含义。因此,正确答案为选项 B) 。11.执行语句 for(i=1; i+4;);后变量 i 的值是( )。(分数:1.00)A.3B.4C.5 D.不定解析:解析 for 语句的循环体语句为空语句,循环结束时 i 值为 5。12.下面四个选项中,均是不合法的用户标识符的选项是( )。(分数:1.00)A.A P_0 doB.float la0_AC.b-a goto int D._123 temp int解析:解析 C 语言规定的标识符只能由字母、数字和下划线三种字符组成,第一个字符必须为字母或下划
21、线,并且不能使用 C 语言中的关键字作为标识符。选项 C) 中 goto 和 int 是关键字,b-a 中的“-“不是组成标识符的三种字符之一,所以,均是不合法用户标识符的选项是 C) 。13.能正确表示逻辑关系“a)10 或 a0”的 C 语言表达式是( )。(分数:1.00)A.a =10 or a=0B.a =0|a=10C.a=10解析:解析 在一维数组中要注意的是下标常量表达式的值必须是大于等于零,并且小于自身元素的个数,选项 B) 的下标不是整数,所以错误。22.调用 gets 和 puts 函数时,必须包含的头文件是( )。(分数:1.00)A.stdih B.stdlihC.d
22、efineD.以上都不对解析:解析 gets 函数和 puts 函数是库函数,必须包含的头文件是 stdio.h。23.下列数据中,不合法的 C 语言实型数据的是( )。(分数:1.00)A.0.123B.123e3C.2.1e3.5 D.789.0解析:解析 在 C 语言中,实数有两种表示形式。即十进制数形式和指数形式,在指数形式中,字母 e的前面必须有数字,且 e 的后面必须是整数。e3,2.1e3.5,e3,e 等都是不合法的指数形式,而 123e3或 123E3 都代表 123 乘以 10 的 3 次方。24.有一堆零件(个数在 100 到 200 之间),如果分成 4 个零件一组,则
23、多 2 个零件;若分成 7 个零件一组,则多 3 个零件;若分成 9 个零件一组,则多 5 个零件。下面的程序是求这堆零件的总数,请选择填空。 #includestdioh main() int i; for(i=100; i200;i+) if(i-2)%4=0) if(! (i-3)%7) if(_) printf(“%d“,i); (分数:1.00)A.i%9=5B.i%9!=5C.(i-5)%9!=0D.(i-5)%9= =0 解析:解析 本题中需要填空的是第三个条件,即“若分成 9 个零件一组,则多 5 个零件”,当总零件数减去 5 后,并与 9 取余为 0 即可满足本题的条件。25
24、.在 C 语言中,char 型数据在内存中的存储形式是( )。(分数:1.00)A.补码B.反码C.原码D.ASCII 码 解析:解析 在 C 语言中,将一个字符常量放到一个字符变量中,实际并不是把该字符本身放到内存单元中,而是将与该字符相对应的 ASCII 码放到存储单元中。26.算法的空间复杂度是指( )。(分数:1.00)A.算法程序的长度B.算法程序中的指令条数C.算法程序所占的存储空间D.执行算法所需要的存储空间 解析:解析 算法的复杂度主要包括算法的时间复杂度和算法的空间复杂度。所谓算法的时间复杂度是指执行算法所需要的计算工作量;算法的空间复杂度一般是指执行这个算法所需要的内存空间
25、。27.以下程序段的输出结果是( )。 int a=1234; printf(“%2d/n“,a);(分数:1.00)A.12B.34C.1234 D.提示出错,无结果解析:解析 在 C 语言中,对于不同类型的数据用不同的格式字符输出,其中,“%d”是按整型数据的实际长度输出,在“%md”中,m 为指定的输出字段的宽度,如果实际数据的位数小于 m,则左端补以空格;若大于 m,则按实际位数输出。28.若有以下结构体,则正确的定义或引用的是( )。 struct Test int x; int y; vl;(分数:1.00)A.Tesx=10;B.Test v2;v2.x=10;C.struet
26、v2;v2.x=10;D.struct Test v2=10; 解析:解析 此题考查结构体的定义和引用。选项 A) 的错误是通过结构体名引用结构体成员;选项 B) 的错误是将结构体名作为类型名使用;选项 C) 的错误是将关键字 struct 作为类型名使用;选项 D) 是定义变量 v2 并对其初始化的语句,初始值只有前一部分,这是允许的。29.C 语言规定,在一个源程序中,main 函数的位置( )。(分数:1.00)A.必须在最开始B.必须在系统调用的库函数的后面C.可以任意 D.必须在最后解析:解析 C 程序总是从 main 函数开始执行,但 main 函数在程序中的位置可以是任意的。30
27、.下面判断正确的是( )。(分数:1.00)A.char *a=“china“;等价于 char *a;*a=“ghina“;B.char str5=“china“;等价于 char str=“china“;C.char*s=“china“;等价于 char*s;s=“china“; D.charc4=“abc“,d4=“abc“;等价于 char c4=d4=“abc“;解析:解析 选项 A) char * a;*a=“china“应改为 char*a;a=“china“;选项 B) 应该将 str5改为str6;选项 D) 表述方法错误,c,d 两个数组定义时不能连续赋值。31.下列程序的
28、输出结果是( )。 #include stdioh int f(int a,int b); main() int i=2,p,j,k; j=i; k=+i; p=f(j,k); printf(“%d“,p); int f(int a,int b) int c; if(ab)c=1; else if(a= =b) c=0; else c=-1; return(c); (分数:1.00)A.-1 B.1C.2D.编译出错,无法运行解析:解析 函数调用相当于 f(2,3),程序运算结果为-1。32.有如下程序: #define N 2 #define M N+1 #define NUM 2*M+1
29、main() int i; for(i=1; i=NUM;i+)printf(“%d/n“,i); 该程序中的 for 循环执行的次数是( )。(分数:1.00)A.5B.6 C.7D.8解析:解析 该题关键要注意在不带参数的宏中对 2*M+1 进行宏替换时,要将宏名 M 原封不动地代进去,得到 NUM 的形式为 2*N+1+1(千万不要随意给 N+1 加上括号,使 NUM 变为 2*(N+1)+1,这就是宏名和变量名之间的区别),再将 N 代进去,得到 NUM 的值为 6。33.下列程序的输出结果是( )。 #inelude stdioh main() int a5=2,4,6,8,10,*
30、p,*k; p=a; k=(分数:2.00)填空项 1:_ (正确答案:10)解析:解析 该 for 语句以 i 为 0,j 为 10 作为初始值,循环条件是 i=j,每次循环后 i 增 1、j 减 1,循环体是将 i 与 j 的和赋给 k,这样变量 k 将保存的是最后一次赋给它的值。一次循环后 i 为 1、j为 9,二次循环后 i 为 2、j 为 8,五次循环后 i 为 5、j 为 5,第六次循环,将 i 与 j 的和 10 赋给k 后,i 为 6、j 为 4,循环结束,k 值为 10。64.下面程序中函数 fun 的功能是:找出一维数组元素中的最大值和它所在的下标,并将最大值和其下标通过形
31、参传回。数组元素中的值已在主函数中赋予。主函数中 x 是数组名,n 是 x 中的数据个数,max 存放最大值,index 存放最大值所在元素的下标。请填空。 #include stdlibh #include sldioh void fun(int a,int n, int * max,int *d) int i; *max=a0; *d=0; for(i=0;U 【15】 /U;i+) if(*maxU 【16】 /U) *max=ai;*d=i; main() int i, x20, max, index, n=10; randomize(); for(i=0;in;i+) xi=rand
32、()%50;printf(“%4d“,xi); printf(“/n“); fun(x,n,cc4;cc+)fun(); printf(“/n“);(分数:2.00)填空项 1:_ (正确答案:246)解析:解析 本题考查静态(static)局部变量的使用。fun 函数中的静态局部变量 a 所占用的存储单元在程序运行过程中始终不释放,即当下一次调用该函数时,该变量仍然保留上一次函数调用结束时已有的值,3 次调用 fun 函数分别得到 2,4,6。66.以下程序的输出结果是U 【18】 /U。 #include stdioh #define MAX(x,y)(x),(y)?(x):(y) mai
33、n() int a=5,b=2,c=3,d=3,t; t=MAX(a+b,c+d)*10; printf(“%d/n“,t); (分数:2.00)填空项 1:_ (正确答案:7)解析:解析 本题综合考查带参数的宏以及三目运算符的计算方法。三目运算符的一般形式是:表达式 1?表达式 2:表达式 3。“?:”运算符的含义是:先求表达式 1 的值,如果为真,则求表达式 2 的值,并把它作为整个表达式的值;如果表达式 1 的值为假,则求表达式 3 的值,并把它作为整个表达式的值。 注意,在本题中宏替换时可采用逐步求解,最终为 76? 7:6*10,即 t=76? 7:60,其值为 t=7。67.用以下
34、语句调用库函数 malloc,使字符指针 st 指向具有 11 个字节的动态存储空间,请填空。 st=(char*)U 【19】 /U;(分数:2.00)填空项 1:_ (正确答案:malloc(11)或 malloc(11*sizeof(char))解析:解析 malloc 函数的参数可以是一个具体的常数,也可以是一个表达式。本题可以是 malloc(11),也可以用 sizeof 运算符来表示。68.以下程序段打开文件后,先利用 fseek 函数将文件位置指针定位在文件末尾,然后调用 ftell 函数返回当前文件位置指针的具体位置,从而确定文件长度。请填空。 FILE * myf;long
35、 f1; myf=U 【20】 /U(“test.t“,“rb“); fseek(myf,0,SEEK END) ; f1=ftell(myf); fclose(myf); printf(“%d/n“,f1);(分数:2.00)填空项 1:_ (正确答案:fopen)解析:解析 函数 fopen 的原型为 FILE *fopen(char * filename,char * mode),功能为以 mode 指定的方式打开名为 filename 的文件;函数 fseek 的原型为 int fseek(FILE *fp,long offset,int base),功能为将 fp 所指向的文件的位置指针移到以 base 所指出的位置为基准,offset 为位移量的位置;函数ftell 的原型为 long ftell(FILE*fp),功能为返回 fp 所指向的文件中当前的读写位置;函数 fclose 的原型为 int fclose(FILE *fp),功能为关闭 fp 所指的文件,释放文件缓冲区。