二级C语言笔试359
(总分:70.00,做题时间:90分钟)
一、{{B}}选择题{{/B}}(总题数:40,分数:40.00)
1.排序方法中,将整个无序序列分割成若干小的子序列并分别进行插入排序的方法,称为______。
(分数:1.00)
 A.希尔排序 
 B.冒泡排序
 C.插入排序
 D.选择排序
解析:[评析] 希尔排序法的基本思想是:将整个无序序列分割成若干小的子序列分别进行插入排序。
2.能将高级语言程序转换成目标语言程序的是______。
(分数:1.00)
 A.调试程序
 B.解释程序
 C.编译程序 
 D.编辑程序
解析:[评析] 用高级语言编写的程序称为“源程序”,而计算机只能识别和执行由O和1组成的二进指令,所以高级语言必须先用—种称为“编译程序”的软件,把源程序翻译成二进制形式的“目标程序”。
3.在顺序表(3,6,8,10,12,15,16,18,21,25,30)中,用二分法查关键码值11,所需的关键码比较次数为______。
(分数:1.00)
 A.2
 B.3
 C.4 
 D.5
解析:[评析] 二分法查是用关键码与线性表的中间元素比较,然后根据比较结果来判断是结束查,还是在左边或右边子表按相同的方法继续查。本题中,与11比较的关键码分别为15,8, 10,12四个。
4.已知下面的程序段,正确的判断是______。 #define A3 #define B(A) (A+1)*a) int a=3; …… X=3*(A+B(7));
(分数:1.00)
 A.程序错误,不允许嵌套定义
 B.X=93
 C.)X=81 
 D.程序错误,宏定义不允许有参数
解析:[评析] 本题的宏定义是合法的,宏定义展开为3*(3+((A+1)*a))=3*(3+(7+1)*3))=81
5.以下程序的输出结果是______。 #include<sulio.h> #defme SQR(x)x*x main() { int a,k=3; a=++SQR(k+1); printf("%d/n",a) ; }
(分数:1.00)
 A.8
 B.9 
 C.17
 D.20
解析:[评析] 本题宏替换中遇到形参x以实参k+l代替,其他字符不变。SQR(k+1)展开后应为字符串k+l*k+l。
6.已知形成链表的存储结构如下图所示,则下述类型描述中的空白处应填______。 struct 1ink { char data; }node;
(分数:1.00)
 A.struct link next
 B.link*next
 C.sluct next link
 D.struct link*next 
解析:[评析] 在单向链表中,由于每个结点需要存储下—个结点的地址,且下—个结点的数据类型与前—个结点的数据类型完全相同,故应为strect link*next。
7.下列程序的执行结果是______。 #lnClude<stdio.h> union un { int i; char c[2]; }; void main() { union un x; x.c[0]=10 x.c[l]=1; printf("/n%d,x.i); }
(分数:1.00)
 A.266 
 B.11
 C.265
 D.138
解析:[评析] 由于本题定义的是共用体,所以成员表列中的整型变量x与字符数组c共占用同—个存储单元,且此存储单元为 2个字节,通常c[0]位于低字节,c[1]位于高字节,所以x.i的值为266。
8.以下程序段的输出结果是______。 main() { char s1[10],s2[10],s3[10]; scanf("%s",s1);gets(s2);gets(s3); puts(s1);puts(s2)puts(s3) } 输入数据如下:(此处<CR>代表回车符) aaa<CR> bbb<CR>
(分数:1.00)
 A.aaa bbb
 B.aaa bbb 
最强编程语言 C.aaa/0bbb/0
 D.aaabbb
解析:[评析] scanf是标准输入函数,在输入字符串aaa时,实际的内容为“aaa/0”,“/0”是由系统自动加入的;gets的功能是从终端读入—行字符,即—直读到换行符为止,并由系统自动以“/0”代替换行符。
9.下面程序的输出结果是______。 #inc1ude<stdio.h> main() { char*p[]={"BOOL","OPK","H","SP"}; int i; for(i=3;i>=0;i-,i-) prinf("%c",*p[i]); print("/n") }
(分数:1.00)
 A.SO 
 B.SP
 C.SPOPK
 D.SHOB
解析:[评析] p[0]存放的是“BOOL/0”的首地址;p[1]存放的是“OPk/0”的首址等。在printf语句中输出的*p[i]表示p[i]字符串中的第一个字符。在for循环中,i的初值为3,那么输出的第—个字符为“S”,接着两次i--,则输出的值为*p[1],即字符“O”,所以本题的输出为SO。
10.在数据结构中,从逻辑可以把数据结构分为______。
(分数:1.00)
 A.动态结构和静态结构
 B.紧凑结构和非紧凑结构
 C.线性结构和非线性结构 
 D.内部结构和外部结构
解析:[评析] 逻辑结构反映数据元素之间的逻辑关系,线性结构表示数据元素之间—对—的关系,非线性结构表示数据元素之间—对多或多对—的关系。
11.模块本身的内聚是模块独立性的重要性度量因素之—。在7类内聚中,具有最强内聚的—项是______。
(分数:1.00)
 A.顺序性内聚
 B.过程性内聚
 C.逻辑性内聚
 D.功能性内聚 
解析:[评析] 内聚性是—个模块内部各元素间彼此结合的紧密程度的度量。内聚共有7类,它们之间的内聚性由弱到强排列顺序为:偶然内聚、逻辑内聚,时间内聚、过程内聚、通信内聚、顺序内聚和功能内聚。
12.数据的完整性是指数的正确性、有效性和______。
(分数:1.00)
 A.可维护性
 B.独立性
 C.安全性
 D.相容性 
解析:[评析] 数据模型的完整性规则是始定的数据模型中数据及其联系所具有的制约和依存规则,用以限定符合数据模型的数据库状态及其状态的变化,以保证数据的正确性、有效性和相容性。
13.若有以下结构体定义,则______是正确的引用或定义。 struct example { int x; int y; }v1;
(分数:1.00)
&lx=10
&le v2.x=10
&lx=10
 D.struct example v2={10}; 
解析:[评析] 在定义结构体变量时,不能只用结构体名example或关键字struct进行定义,必需要用结构体类型名struct example定义,在引用结构体成员变量时,需要用结构体变量名进行引用,所以选D。
14.以下程序的输出结果是______。 #include<stdio.h> void prt(int*x,int*y,int*z) { printf("%d,%d,%d/n",++*x,++*y,*(z++));} int a=10,b=40,c=20; main() { prt(&a,&b&c) prt(&a,&b,&c); }
(分数:1.00)
 A.11,42,31 12,22,41
 B.11,41,20 12,42,20 
 C.11,21,40 11,21,41
 D.11,41,21 12,42,22
解析:[评析] 由于实参传送的是变量的地址,所以对形参指针所指向的单元内容的改变,即对实参内容的改变。
15.关系代数运算是以______为基础的运算。
(分数:1.00)
 A.关系运算
 B.谓词运算
 C.集合运算 
 D.代数运算
解析:[评析] 关系代数运算是以关系代数作为运算对象的—组高级运算的集合。它的基本操作是并、交、差、笛卡尔积,另外还包括垂直分割(投影)、水平分割(选择)、关系的结合(连接)等。
16.下述程序文件输出的结果是______。 #inelude<stdio.h> void main() { FILE*fp=fopen("TEST","wb"); fprintf(fp,"%d5.of%c%d",58,76273.0,'-',2278); fclose(fp); }
(分数:1.00)
 A.58 76273-2278
 B.5876273.000000-2278
 C.5876273-2278 
 D.因文件为二进制文件而不可读
解析:[评析] fprintf函数工作时,多个数据间不会自动加分隔符,选项A错误;浮点数的搞出格式是“%5.0f”表明其小数部分输出0位,即没有输出,所以选项B也是错误的。
17.下列程序的输出结果是______。 #define A 100 main() { int i=0,sum=0; do{ if(i=(i/2)*2)continue; sum+=i; }while(++i<A); print("%d/n",sum); }
(分数:1.00)
 A.2500 
 B.2050
 C.4
 D.0
解析:[评析] 本题程序的功能是求1到99之间(包括1和99)所有奇数之和。程序中的while循环的终止条件为++i=100,在 while循环体内,如果i是偶数,则执行continue,跳过这一次循环,执行下—次循环,否则求和。最后输出的值是1到 99之间(包括1和99)所育奇数之和(1+99)*50/2=2500。
18.下列程序执行后输出的结果是______。 int d=l; fun(int p) { int d=5; d+=p++; printf("%d,",d); } main() { int a=3; fun(a); d+=a++; printf("%d/n",d); }
(分数:1.00)
 A.8,12
 B.9,13
 C.8,4 
 D.9,5
解析:[评析] 本题执行过程如下:首先调用fun函数,使得实参a的值3传递绐形参p,得到局部变量d=8,打印出局部变量d的值8返回主函数执行“d+=a++””,此处的d为全局变量,所以d=1+3=4(由于本题是值传递,所以在函数fun中对p值的改变并不能引起a的改变),故本题的输出是8,4。
19.对于n个结点的单向链表(无表头结点),需要指针单元的个数至少为______。
(分数:1.00)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。