1、计算机二级(C)10 及答案解析(总分:645.00,做题时间:120 分钟)一、选择题(1-10 题每题 2 分,11-50 题(总题数:40,分数:60.00)1.有以下程序: int f(int a) return a%2; main( ) int s8=1,3,5,2,4,6,i,d=0; for (i=0;f(si);i+) d+=si; printf(“%d/n“,d); 程序运行后的输出结果是( )。 (分数:1.50)A.9B.11C.19D.212.C 语言中,函数值类型的定义可以缺省,此时函数值的隐含类型是( )。(分数:1.50)A.voidB.intC.floatD.d
2、ouble3.有以下程序: prt(int *m,int n) int i; for(i=0;iA.1,2,3,4,5,B.2,3,4,5,6,C.3,4,5,6,7,D.2,3,4,5,1,4.有以下程序 main() int i,t3=9,8,7,6,5,4,3,2,1; for(i=0;iA.7 5 3B.3 5 7C.3 6 9D.7 5 15.有以下程序: main( ) int a=7,b=8,*p,*q,*r; p=q= r=p; p=q;q=r; printf(“%d,%d,%d,%d/n“,*p,*q,a,b); 程序运行后的输出结果是( )。 (分数:1.50)A.8,7,
3、8,7B.7,8,7,8C.8,7,7,8D.7,8,8,76.有以下程序 main( ) int k=4,n=0; for( ; nk ; ) n+; if(n%3!=0) continue; k-; printf(“%d,%d/n“,k,n); 程序运行后的输出结果是( )。 (分数:1.50)A.1,1B.2,2C.3,3D.4,47.有以下程序: #include string.h main( ) char str20=“Hello“,“Beijing“,*p=str; printf(“%d/n“,strlen(p+20); 程序运行后的输出结果是( )。 (分数:1.50)A.0B.
4、5C.7D.208.现有以下结构体说明和变量定义,如图所示,指针 p、q、r 分别指向一个链表中连续 的三个结点。 struct node char data; struct node *next; *p,*q,*r; (分数:1.50)A.q-next=r-next; p-next=r;r-next=q;B.p-next=r; q-next=r-next;r-next=q;C.q-next=r-next;r-next=q;p-next=r;D.r-next=q;p-next=r;q-next=r-next;9.有以下程序: void f(int *x,int *y) int t; t=*x;
5、*x=*y;*y=t; main() int a8=1,2,3,4,5,6,7,8,i,*p,*q; p=a;q= while(pA.8,2,3,4,5,6,7,1,B.5,6,7,8,1,2,3,4,C.1,2,3,4,5,6,7,8,D.8,7,6,5,4,3,2,1,10.以下四个程序中,完全正确的是_。 (分数:1.50)A.B.C.D.11.有以下程序 int fun(int n) if(n=1) return 1; else return(n+fun(n-1); main() int x; scanf(“%d“,x=fun(x);printf(“%d/n“,x); 执行程序时,给变
6、量 x 输入 10,程序的输出结果是_。 (分数:1.50)A.55B.54C.65D.4512.有以下程序: main( ) int aa44= 1,2,3,4,5,6,7,8,3,9,10,2,4,2,9,6 ; int i,s=0; for(i=0;i4;i+) s+=aai1; printf(“%d/n“,s); 程序运行后的输出结果是( )。 (分数:1.50)A.11B.19C.13D.2013.设有定义 int a=2,b=3,c=4;,则以下选项中值为 0 的表达式是_。 (分数:1.50)A.(!a=1) p-next=r;r-next=q;B.p-next=r; q-nex
7、t=r-next;r-next=q;C.q-next=r-next;r-next=q;p-next=r;D.r-next=q;p-next=r;q-next=r-next; 解析:选项 D 中首先将 q 赋给 r-next,也就是将结点 q 的地址存放在结点 r 的指针域中;接着将 r 赋给 p-next, 也就是将结点 r 的地址存放在结点 p 的指针域中,此时完成了 q 和 r 所指结点的交换。q-next=r-next 的目 的是想将 q 的指针域指向下一个结点的数据地址,但由于一开始执行了 r-next= q,即已将 r 的指针域中存 放了 q 结点的地址,所以再做操作“q-next=
8、r-next”就相当于将 q 指向了其本身,也就是和下一个结点断开了,所以选项 D 操作错误。9.有以下程序: void f(int *x,int *y) int t; t=*x;*x=*y;*y=t; main() int a8=1,2,3,4,5,6,7,8,i,*p,*q; p=a;q= while(pA.8,2,3,4,5,6,7,1,B.5,6,7,8,1,2,3,4,C.1,2,3,4,5,6,7,8,D.8,7,6,5,4,3,2,1, 解析:本程序中函数 f 的作用是交换指针变量 x 和 y 所指向的存储单元的值。10.以下四个程序中,完全正确的是_。 (分数:1.50)A.B
9、.C. D.解析:C 程序中注释用“/*”和“*/”括起来,它可以出现在程序中任何合适的地方。选项 A 中“main();” 是一个函数声明语句,下面的大括号及其内容作为一个语句块,应放在程序的大括号中,故选取项 A 错误; 选项 B 中的注释语句不正确,因为程序在编译时认别到两次“/*”作为注释的开始,但未识别到“*/”作 为注释的结束,故选项 B 错误;选项 D 的“include”前缺少“#”,故选项 D 错误。11.有以下程序 int fun(int n) if(n=1) return 1; else return(n+fun(n-1); main() int x; scanf(“%d
10、“,x=fun(x);printf(“%d/n“,x); 执行程序时,给变量 x 输入 10,程序的输出结果是_。 (分数:1.50)A.55 B.54C.65D.45解析:此题考核的知识点是函数的递归调用,即在调用一个函数的过程中又出现直接或间接地调用该函数 本身。函数调用中因为实参 x=10 不符合条件语句 n=1,所以执行 else 语句,调用 fun 函数。fun 函数共被 调用 8 次,即 fun(9)、fun(8)、fun(7)、fun(6)、fun(5)、fun(4) 、fun(3) 、fun(2),n=10+9+8+7+6+5+4+3+2+1=55,所以 x=55。12.有以下
11、程序: main( ) int aa44= 1,2,3,4,5,6,7,8,3,9,10,2,4,2,9,6 ; int i,s=0; for(i=0;i4;i+) s+=aai1; printf(“%d/n“,s); 程序运行后的输出结果是( )。 (分数:1.50)A.11B.19 C.13D.20解析:13.设有定义 int a=2,b=3,c=4;,则以下选项中值为 0 的表达式是_。 (分数:1.50)A.(!a=1) printf(“%d/n“,S(i+j); (分数:40.00)填空项 1:_ (正确答案:81)解析:带参数的宏定义是按#define 命令行中指定的字符串从左到右
12、进行转换。本题中替换的式子为:4*i+j*i+j+1,代入 i,j 的值得 81。55.以下程序中,for 循环体执行的次数是 1。 #define N 2 #define M N+1 #define K M+1*M/2 main( ) int i; for(i=1;i K;i+) . . (分数:40.00)填空项 1:_ (正确答案:4)解析:56.以下 sstrcpy1 函数实现字符串复制,即将 t 所指字符串复制到 s 所指向内存空间中,形成一个新的字符串 s。请填空。 void sstrcpy(char *s,char *t) while(*s+= 2); main( ) char
13、str1100,str2 =”abcdefgh”; sstrcpy(str1,str2); printf(“%s/n”,str1); (分数:40.00)填空项 1:_ (正确答案:*t+)解析:57.已有文本文件 test.txt,其中的内容为:Hello,everyone!。以下程序中,文件 test.txt 已正确为“读”而打开,由此文件指针 fr 指向文件,则程序的输出结果是 1。 #include stdio.h main( ) FILE *fr; char str40; fgets(str,5,fr); printf(“%s/n“,str); fclose(fr); (分数:40.
14、00)填空项 1:_ (正确答案:Hell)解析:58.以下函数 rotate 的功能是:将 a 所指 N 行 N 列的二维数组中的最后一行放到 b 所指二维数组的第 0 列中,把 a 所指二维数组中的第 0 行放到 b 所指二维数组的 最后一列中,b 所指二维数组中的其他数据不变。 # define N 4 void rotate(int aN,int bN) int i,j; for(i=0;i1 ; 2 =aN-1i; (分数:40.00)填空项 1:_ (正确答案:a0i , bi0)解析:根据题意,语句“biN-1= -|_|-;”的作用是把 a 所指二维数组中的第 0 行放到 b
15、所指二维数组的 最后一列中,在 a 数组中,第 0 行用 a0来表示,所以第 19 空填 a0i;语句“ -|_|- =aN-1i;”的作用 是将 a 所指二维数组中的最后一行放到 b 所指二维数组的第 0 列中,b 数组中第 0 列用 b0来表示,所以,第 20 空填 bi0。59.Internet 的信息服务方式分为基本服务和扩展服务,电子邮件属于 1。(分数:40.00)填空项 1:_ (正确答案:基本服务)解析:60.若有以下程序 main( ) int a44=1,2,-3,-4,0,-12,-13,14 ,-21,23,0,-24,-31,32,-33,0; int i,j,s=0
16、; for(i=0;i4;i+) for(j=0;j4;j+) if(aij0) continue; if(aij=0) break; s+=aij; printf(“%d/n“,s); 执行后输出结果是 1。 (分数:40.00)填空项 1:_ (正确答案:61)解析:61.数据结构分为逻辑结构和存储结构,循环队列属于 1 结构。(分数:40.00)填空项 1:_ (正确答案:逻辑)解析:所谓数据的逻辑结构,是指反映数据元素之间逻辑关系的数据结构;而数据的逻辑结构在计算机存 储空间中的存放形式称为数据的存储结构(也称数据的物理结构)。在数据的存储结构中,不仅要存放各 数据元素的信息,还需要存
17、放各数据元素之间的前后件关系的信息。而所谓循环队列,就是将队列存储空 间的最后一个位置绕到第一个位置,形成逻辑上的环状空间,供队列循环使用。所以循环队列不需要存放 元素之间的前后件关系,故它属于逻辑结构。62.若 fp 已正确定义为一个文件指针,d1.dat 为二进制文件,请填空,以便为“读”而打开此文件:fp=fopen 1;。 (分数:40.00)填空项 1:_ (正确答案:“dl.dat“,“rb“ 或“dldat“,“r+b“ 或“dl.dat“,“rb+“。)解析:63.以下程序中给指针 p 分配三个 double 型动态内存单元,请填空。 # include stdlib.h ma
18、in ( ) double *p; p=(double *) malloc( 1); p0=1.5;p1=2.5;p2=3.5; printf(“%f%f%f/n”,p0,p1,p2); (分数:40.00)填空项 1:_ (正确答案:sizeof(double)*3)解析:64.在 Windows 环境下,只要在“开始”菜单中单击 1 选项,就可以查阅最近打开过的文档清单。(分数:40.00)填空项 1:_ (正确答案:文档)解析:65.以下程序运行后的输出结果是 1。 main( ) char a =“123456789“,*p; int i=0; p=a; while(*p) if(i%
19、2=0) *p=*; p+;i+; puts(a); (分数:40.00)填空项 1:_ (正确答案:*2*4*6*8*)解析:66.在面向对象的程序设计中,类描述的是具有相似性质的一组 1。(分数:-1.00)填空项 1:_ (正确答案:对象)解析:将属性、操作相似的对象归为类,也就是说,类是具有共同属性、共同方法的对象的集合。67.在算法正确的前提下,评价一个算法的两个标准是 1。(分数:-1.00)填空项 1:_ (正确答案:时间复杂度和空间复杂度)解析:68.用的黑箱测试有等价分类法、 1、因果图法和错误推测法 4 种。(分数:-1.00)填空项 1:_ (正确答案:边值分析法)解析:
20、黑箱测试方法完全不考虑程序的内部结构和内部特征,而只是根据程序功能导出测试用例。常用的黑箱测试有等价分类法、边值分析法、因果图法和错误推测法 4 种。 69.软件开发环境是全面支持软件开发全过程的 1 集合。(分数:-1.00)填空项 1:_ (正确答案:软件工具)解析:70.长度为 n 的顺序存储线性表中,当在任何位置上插入一个元素概率都相等时,插入一个元素所需移动元素的平均个数为 1。(分数:-1.00)填空项 1:_ (正确答案:n/2)解析:在线性表的任何位置插入一个元素的概率相等,即概率为 p=1/(n+1),则插入一个元素时所需移动元素的平均次数为 E=1/(n+1)(n-i+1)=n/2。