1、二级 C 语言笔试-307 及答案解析(总分:90.00,做题时间:90 分钟)一、选择题(总题数:50,分数:50.00)1.C 语言中不合法的字符串常量是(分数:1.00)A.“/121“B.YC.“/n/n“D.“ABCD/x6d“2.对长度为 n 的线性表进行顺序查找,在最坏情况下所需要的比较次数为(分数:1.00)A.log2nB.n/2C.nD.n+13.在位运算中,操作数左移一位,其结果相当于(分数:1.00)A.操作数乘以 2B.操作数除以 2C.操作数除以 4D.操作数乘以 44.以下叙述正确的是(分数:1.00)A.在 C 语言中,只能用“/*“和“*/“对程序进行注释B.
2、在 C 语言注释语句中,“/“和“*“之间不可以有空格C.注释语句只能使用西文D.在 C 程序中,注释说明只能位于一条语句的后面5.以下程序段的执行结果为#define PLUS(X,Y)X+Ymain()int x=1,y=2,z=3,sum;sum=PLUS(x+y,z)*PLUS(y,z);printf(“SUM=%d“,sum);(分数:1.00)A.SUM=9B.SUM=12C.SUM=18D.SUM=286.下面程序段的运行结果是char *p=“abcdefgh“;p+=3;printf(“%d/n“,strlen(strcpy(p,“ABCD“);(分数:1.00)A.8B.1
3、2C.4D.77.在结构化程序设计思想提出之前,在程序设计中曾强调程序的效率。与程序的效率相比,人们更重视程序的(分数:1.00)A.安全性B.一致性C.可理解性D.合理性8.数据库设计包括两个方面的设计内容,它们是(分数:1.00)A.概念设计和逻辑设计B.模式设计和内模式设计C.内模式设计和物理设计D.结构特性设计和行为特性设计9.下列程序的输出结果为main()union uchar*name;int age;int income;ss.name=“WANGLIONG“;s.age=28;s.income=1000;printf(“%d/n“,s.age);(分数:1.00)A.28B.
4、1000C.0D.不确定10.以下正确的程序段是(分数:1.00)A.char str1 =“12345“,str2 =“abcdef“;B.char str10,*st=“abcde“;strcat(str,st);C.char str10=“ “。*st=“abcde“;strcat(str,st);D.char*st1=“12345“,*st2=“abcde“;strcat(st1,st2);11.以下不正确的定义语句是(分数:1.00)A.double x5=2.0,4.0,6.0,8.0,10.0;B.int y5.3=0,1,3,5,7,9;C.char c1=1,2,3,4,5;
5、D.char c2=/x10,/xa,/x8;12.下列是用户自定义标识符的是(分数:1.00)A._w1B.3_xyC.intD.LINE-313.现有如下程序段#include“stdio.h“#include“string.h“main()char a=“acfijk“; /*这里是有序的字符序列*/char b=“befijklqswz“; /*这里是有序的字符序列*/char c80,*p;int i=0,j=0,k=0;while(ai!=/0for(i=1;i7;i+)t=ci;j=i-1;while(j=0 j-;cj+1=t;for(i=0;i7;i+)printf(“%d“
6、,ci);putchar(/n);(分数:1.00)A.对数组元素的升序排列B.对数组元素的降序排列C.对数组元素的倒序排列D.对数组元素的随机排列26.若有说明语句:char c=/72;则变量 c(分数:1.00)A.包含 1 个字符B.包含 2 个字符C.包含 3 个字符D.说明不合法,c 的值不确定27.有如下程序段int a=14,b=15,x;char c=A;x=(aif(i100)break;B.for(;);C.int k=10000; dok+;while(k10000);D.int s=36;while(s)-s;41.下列对 C 语言字符数组的描述中正确的是(分数:1.
7、00)A.任何一个一维数组的元素在引用时,其下标可以是整型、实型或字符型常量B.一维数组的元素实质上就是一个变量,代表内存中的一个存储单元C.如果要引用数组中的每一个元素,则直接使用该数组名称即使D.以上都不对42.语句 int(*ptr)();的含义是(分数:1.00)A.ptr 是指向一个维数组的指针变量B.ptr 是指向 int 型数据的指针变量C.ptr 是指向函数的指针,该函数返回一个 int 型数据D.ptr 是一个函数名,该函数的返回值是指向 int 型数据的指针43.若有定义:int a23;则才 a 数组的第 i 行第 j 列(假调 i,j 已正确说明并赋值)元素值的正确引用
8、为(分数:1.00)A.*(*(a+i)+j)B.(a+i)jC.*(a+i+j)D.*(a+i)+j44.若有语句 int*point,a=4;和 point=i+)if(*max 【13】 )*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,【15】 ;main()int x,aa1000,n,i;clrscr();printf(“/nPleas enter an integer number :/n
9、“);scanf(“%d“,for(i=0;in;i+)printf(“%d“,aai);printf(“/n“);(分数:2.00)填空项 1:_65.下面程序的功能是从键盘输入一行字符,统计有多少个单词,单词间用空格分隔。补充所缺语句。#includestdio.hmain()chars s80,c1,c2= ;int i=0,num=0;gets(s);while(si!=/0)c1=si;if(i=0)c2= ;else c2=si-1;if( 【16】 )num+;i+;printf(“There are%d words,/n“,num);(分数:2.00)填空项 1:_66.以下程
10、序的输出结果是 【17】 。void fun()static int a;a+=2;printf(“%d“,a);main()int cc;for(cc=1;cc=4;cc+)fun();printf(“/n“);(分数:2.00)填空项 1:_67.已有定义:double *p;,请写出完整的语句,利用 malloc 函数使 p 指向一个双精度型的动态存储单元 【18】 。(分数:2.00)填空项 1:_68.下列程序输出的结果是 【19】 。fun(int x)static int a=3;a+=x;return(a);main()int k=2,m=1,n;n=fun(k);n=fun(
11、m);printf(“%d/n“,n);(分数:2.00)填空项 1:_69.下面程序的功能是:将字符数组 a 中下标值为偶数的元素从小到大排列,其他元素不变。请填空。#includestdio.h#includestring.hmain()char a=“clanguage“,t;int i,j,k;k=strlen(a);for(i=0;i=k-2;i+=2)for(j=i+2;j=k;j+=2;)if( 【20】 )t=ai;ai=aj;aj=t;puts(a);printf(“/n“);(分数:2.00)填空项 1:_二级 C 语言笔试-307 答案解析(总分:90.00,做题时间:9
12、0 分钟)一、选择题(总题数:50,分数:50.00)1.C 语言中不合法的字符串常量是(分数:1.00)A.“/121“B.Y C.“/n/n“D.“ABCD/x6d“解析:解析 字符串常量是由双引号括起来的一串字符,其中的双引号不可缺少。由此可知,选项 A)、C)、D)都是含法的字符串常量,而选 B)是一个字符常量。2.对长度为 n 的线性表进行顺序查找,在最坏情况下所需要的比较次数为(分数:1.00)A.log2nB.n/2C.n D.n+1解析:解析 对于长度为 n 的有序线性表,在最坏情况下,二分查找只需要比较 log2n 次,而顺序查找需要比较 n 次。3.在位运算中,操作数左移一
13、位,其结果相当于(分数:1.00)A.操作数乘以 2 B.操作数除以 2C.操作数除以 4D.操作数乘以 4解析:解析 左移运算符“ ”是双目运算符。其功能把“ ”左边的运算数的各二进位全部左移若干位,由“ ”右边的数指定移动的位数,高位丢弃,低位补 0。例如:a 4 指把 a 的各二进位向左移动 4 位。如 a=00000011(+进制 3),左移 4 位后为 00110000(+进制 48)。4.以下叙述正确的是(分数:1.00)A.在 C 语言中,只能用“/*“和“*/“对程序进行注释B.在 C 语言注释语句中,“/“和“*“之间不可以有空格 C.注释语句只能使用西文D.在 C 程序中,
14、注释说明只能位于一条语句的后面解析:解析 在 C 语言程序段中可以对程序进行注释,注释部分必须用“/*”和“*/”括起来,其中,“/”和“*”之间不可有空格,注释可以是西文,也可以是中文,注释说明语同步以出现在程序的任意位置。综上所述,本题的答案为 B)。5.以下程序段的执行结果为#define PLUS(X,Y)X+Ymain()int x=1,y=2,z=3,sum;sum=PLUS(x+y,z)*PLUS(y,z);printf(“SUM=%d“,sum);(分数:1.00)A.SUM=9B.SUM=12 C.SUM=18D.SUM=28解析:解析 本题考查带参数的宏定义及应用方法,这种
15、宏不只是进行字符串的替换,还要进行参数的替换。格式为:#define 宏名(参数表)字符串我们先看一个简单的带参数的宏定义:#define X (A,B)A*B*B 并且在程序中有语句:y=X(4,3);经过替换后变为 y=4*3*3;这就是带参数的宏定义的使用方法。注意:宏是按原形替换,本题替换后为 sun=1+2+3*2+3;。6.下面程序段的运行结果是char *p=“abcdefgh“;p+=3;printf(“%d/n“,strlen(strcpy(p,“ABCD“);(分数:1.00)A.8B.12C.4 D.7解析:解析 本题考查两个知识点:strlen 函数的功能是求字符串的长
16、度,并返回字符个数,不计最后的/0,strcpy 函数的功能是把后面的字符串复制到前面字符串所指向的空间。7.在结构化程序设计思想提出之前,在程序设计中曾强调程序的效率。与程序的效率相比,人们更重视程序的(分数:1.00)A.安全性B.一致性C.可理解性 D.合理性解析:解析 结构化程序设计方法设计出的程序具有明显的优点。其一,程序易于理解、使用和维护;其二,提交了编程工作的效率,降低了软件开发成本。其中,人们更重视前者。8.数据库设计包括两个方面的设计内容,它们是(分数:1.00)A.概念设计和逻辑设计 B.模式设计和内模式设计C.内模式设计和物理设计D.结构特性设计和行为特性设计解析:解析
17、 数据库设计包括数据库概念设计和数据库逻辑设计两个方面的设计内容。9.下列程序的输出结果为main()union uchar*name;int age;int income;ss.name=“WANGLIONG“;s.age=28;s.income=1000;printf(“%d/n“,s.age);(分数:1.00)A.28B.1000 C.0D.不确定解析:解析 本题对共用体的使用进行了考查。由于共用体所有成员共同占据一段存储空间。所以对成员变量的赋值,后面的赋值会覆盖掉前面的赋值,因为 s.income=1000;是最后一次成员变量赋值,变量age 与变量 income 共同占据一段存储
18、空间,所以 age 的值也为 1000。10.以下正确的程序段是(分数:1.00)A.char str1 =“12345“,str2 =“abcdef“;B.char str10,*st=“abcde“;strcat(str,st);C.char str10=“ “。*st=“abcde“;strcat(str,st); D.char*st1=“12345“,*st2=“abcde“;strcat(st1,st2);解析:解析 本题考查了一维字符数组的定义和初始化。选项 C 中 str10初始化为空,可以不必进行类似“ “的空赋值,字符数组若没有进行初始化赋值,默认的字符为空。并且定义完 st
19、r 数组后,应该用“,”分隔而不是“。”,所以选项 C 错误。11.以下不正确的定义语句是(分数:1.00)A.double x5=2.0,4.0,6.0,8.0,10.0;B.int y5.3=0,1,3,5,7,9; C.char c1=1,2,3,4,5;D.char c2=/x10,/xa,/x8;解析:解析 在一维数组中要注意的是下标表达式的常量表达式的值必须是大于等于零,并且小于自身元素的个数,既数组长度,选项 B)的下标不是整数,所以错误。12.下列是用户自定义标识符的是(分数:1.00)A._w1 B.3_xyC.intD.LINE-3解析:解析 C 语言规定用户标识符由英文字
20、母、数字和下划线组成,且第一个字符必须是字母或下划线,由此可见选项 B),D)是错的;此外,C 语言不允许用户将关键字作为标识符,而选项 C)选项项中的int 是 C 语言的关键字。13.现有如下程序段#include“stdio.h“#include“string.h“main()char a=“acfijk“; /*这里是有序的字符序列*/char b=“befijklqswz“; /*这里是有序的字符序列*/char c80,*p;int i=0,j=0,k=0;while(ai!=/0for(i=1;i7;i+)t=ci;j=i-1;while(j=0 j-;cj+1=t;for(i=
21、0;i7;i+)printf(“%d“,ci);putchar(/n);(分数:1.00)A.对数组元素的升序排列B.对数组元素的降序排列 C.对数组元素的倒序排列D.对数组元素的随机排列解析:解析 读懂两个循环的关系,是解这个题目的关键,本题的第一个 for 循环的作用是实现对数组元素的遍历,第二个循环的作用是排序。while(j=0 if(i100)break;B.for(;);C.int k=10000; dok+;while(k10000);D.int s=36;while(s)-s; 解析:解析 选项 A)的循环表达式的条件永久为 1,并且小于 100 的数与 100 取余不超过 9
22、9,所以在循环体内表达式 i%100+1 的值永远不大于 100,break 语句永远不会执行,所以是死循环;选项 B)的括号内没有能使循环停下来的变量增量,是死循环;选项 C)中先执行 k+,使 k=10001,从而使循环陷入死循环。41.下列对 C 语言字符数组的描述中正确的是(分数:1.00)A.任何一个一维数组的元素在引用时,其下标可以是整型、实型或字符型常量B.一维数组的元素实质上就是一个变量,代表内存中的一个存储单元 C.如果要引用数组中的每一个元素,则直接使用该数组名称即使D.以上都不对解析:解析 本题考查了字符数组的基本概念。选项 A,因为数组元素的下标只能为整数,所以选项 A
23、错误。选项 C,引用数组中的元素,可以通过数组名和下标的方式来引用,只使用数组名不可以。42.语句 int(*ptr)();的含义是(分数:1.00)A.ptr 是指向一个维数组的指针变量B.ptr 是指向 int 型数据的指针变量C.ptr 是指向函数的指针,该函数返回一个 int 型数据 D.ptr 是一个函数名,该函数的返回值是指向 int 型数据的指针解析:解析 本题考查的是函数指针的定义。定义一个函数指针的形式为:类型标识符(*指针变量名)()。函数指针的值等于函数的入口地址,通过这个指针变量能够调用它所指向的函数。43.若有定义:int a23;则才 a 数组的第 i 行第 j 列
24、(假调 i,j 已正确说明并赋值)元素值的正确引用为(分数:1.00)A.*(*(a+i)+j) B.(a+i)jC.*(a+i+j)D.*(a+i)+j解析:解析 本题考查了二维数组元素的引用方法。选项 A 中 a 引指向了数组 a 的第 i+1 行,*(a +i)则是第 i+1 行第 0 列的地址值,*(a+i)+j 指向了数组 a 第 i+1 行,j+1 列,*(*(a+i)+j)取到的是数组 a 的aij的元素。44.若有语句 int*point,a=4;和 point=i+)if(*max 【13】 )*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,【15】 ;main()int x,aa1000,n,i;clrscr();printf(“/nPleas enter an integer number :/n“);scanf(“%d“,for(i=0;in;i+)printf(“%d“,aai);printf(“/n“);(分数:2.00)填空项 1:_ (正确答案:*n=j)