2008年4月-7月计算机二级C语言试题及答案(共22页).doc
精选优质文档-倾情为你奉上2008年4月全国计算机等级考试二级笔试试卷 C语言程序设计 (考试时间90分钟,满分100分) 一、 选择题(共70分) 下列各题A),B),C),D)四个选项中,只有一个选项是正确的,请将正确选项涂写在答题卡相应位置上,答在试卷上不得分。 (1)程序流程图中指有箭头的线段表示的是 A)图元关系 B)数据流 C)控制流 D)调用关系 (2)结构化程序设计的基本原则不包括 A)多态性 B)自顶向下 C)模块化 D)逐步求精 (3)软件设计中模块划分应遵循的准则是 A)低内聚低耦合 B)高内聚低耦合 C)低内聚高耦合 D)高内聚高耦合 (4)在软件开发中,需求分析阶段产生的主要文档是 A)可行性分析报告 B)软件需求规格说明书 C)概要设计说明书 D)集成测试计划 (5)算法的有穷性是指 A)算法程序的运行时间是有限的 B)算法程序所处理的数据量是有限的 C)算法程序的长度是有限的 D)算法只能被有限的用户使用 (6)对长度为n的线性表排序,在最坏情况下,比较次数不是n(n-1)/2的排序方法是 A)快速排序 B)冒泡排序 C)直接插入排序 D)堆排序 (7)下列关于栈的叙述正确的是 A)栈按“先进先出”组织数据 B)栈按“先进后出”组织数据 C)只能在栈底插入数据 D)不能删除数据 (8)在数据库设计中,将E-R图转换成关系数据模型的过程属于C A)需求分析阶段 B)概念设计阶段 C)逻辑设计阶段 D)物理设计阶段 (9)有三个关系R、S和T如下: T B C D a 0 k1 R S B C D a 0 k1 b 1 n1 B C D f 3 h2 a 0 k1 n 2 x1 有关系R和S通过运算得到关系T,则所使用的运算为 A)并 B)自然连接 C)笛卡尔积 D)交 (10)设有表示学生选课的三张表,学生S(学号,姓名,性别,年龄,身份证号),课程C(课号,课名),选课SC(学号,课号,成绩),则表SC的关键字(键或码)为 A)课号,成绩 B)学号,成绩 C)学号,课号 D) 学号,姓名,成绩 (11)以下叙述中正确的是 A)C程序中的注释只能出现在程序的开始位置和语句的后面 B)C程序书写格式严格,要求一行内只能写一个语句 C)C程序书写格式自由,一个语句可以写在多行上 D)用C语言编写的程序只能放在一个程序文件中 (12)以下选项中不合法的标识符是 A)print B)FOR C)&a D)_00 (13)以下选项中不属于字符常量的是 A)'C' B)"C" C)'xCC0' D)'072' (14)设变量已正确定义并赋值,以下正确的表达式是 A)x=y*5=x+z B)int(15.8%5) C)x=y+z+5,+y D)x=25%5.0 (15)以下定义语句中正确的是 A)int a=b=0 ; B)char A=65+1,b='b' C)float a=1,*b=&a,*c=&b ; D)double a=0.0,b=1.1; (16)有以下程序段 char ch; int k; ch='a' k=12; printf("%c,%d,",ch,ch,k); printf("k=%dn",k); 已知字符a的ASCll十进制代码为97,则执行上述程序段后输出结果是 A)因变量类型与格式描述符的类型不匹配输出无定值 B)输出项与格式描述符个数不符,输出为零值或不定值 C)a,97,12k=12 D)a,97,k=12 (17)已知字母A的ASC代码值为65,若变量kk为char型,以下不能正确判断出kk中的值为大写字母的表达式是 A)kk>='A'&&kk<='Z' B)!(kk>='A'kk<='Z') C)(kk+32)>='a'&&(kk+32)<='z' D)isalpha(kk)&&(kk<91) (18)当变量c的值不为2、4、6时,值也为“真”的表达式是 A)(c=2)(c=4)(c=6) B)(c>=2&&c<=6)(c!=3)(c!=5) C)(c>=2&&c<=6)&&!(c%2) D)(c>=2&&c<=6)&&(c%2!=1) (19)若变量已正确定义,有以下程序段 int a=3,b=5,c=7; if(a>b) a=b; c=a; if(c!=a) c=b; printf("%d,%d,%dn",a,b,c); 其输出结果是 A)程序段有语法错 B)3,5,3 C)3,5,5 D)3,5,7 (20)有以下程序 #include <stdio.h> main() int x=1,y=0,a=0,b=0; switch(x) case 1: switch(y) case 0: a+; break; case 1: b+; break; case 2: a+; b+; break; case 3: a+; b+; printf(“a=%d,b=%dn”,a,b); 程序的运行结果是 A)a=1,b=0 B)a=2,b=2 C)a=1,b=1 D)a=2,b=1 (21)有以下程序 #include <stdio.h> main() int x=8; for( ; x>0; x-) if(x%3) printf(“%d,”,x-); continue; printf(“%d,”,-x); 程序的运行结果是 A)7,4,2 B)8,7,5,2 C)9,7,6,4 D)8,5,4,2 (22)以下不构成无限循环的语句或者语句组是 A)n=0; B)n=0; do+n;while(n<=0); while(1)n+; C)n=10; D)for(n=0,i=1; ;i+) n+=i; while(n);n-; (23)有以下程序 #include <stdio.h> main() int a =1,2,3,4,y,*p=&a3; -p; y=*p; printf(“y=%dn”,y); 程序的运行结果是 A)y=0 B)y=1 C)y=2 D)y=3 (24)以下错误的定义语句是 A)int x3=0,1,1,2,3; B)int x43=1,2,3,1,2,3,1,2,3,1,2,3; C)int x4=1,2,3,1,2,3,1,2,3,1,2,3; D)int x3=1,2,3,4; (25)设有如下程序段 char s20= “Bejing”,*p; p=s; 则执行p=s;语句后,以下叙述正确的是 A)可以用*p表示s0 B)s数组中元素的个数和p所指字符串长度相等 C)s和p都是指针变量 D)数组s中的内容和指针变量p中的内容相等 (26)若有定义:int a23;,以下选项中对a数组元素正确引用的是 A)a2!1 B)a23 C)a03 D)a1>2 !1 (27)有定义语句:char s10;,若要从终端给s输入5个字符,错误的输入语句是 A)gets(&s0); B)scanf(“%s”,s+1); C)gets(s); D)scanf(“%s”,s1); (28)以下叙述中错误的是 A)在程序中凡是以“”开始的语句行都是预处理命令行 B)预处理命令行的最后不能以分号表示结束 C)#define MAX是合法的宏定义命令行 D)C程序对预处理命令行的处理是在程序执行的过程中进行的 (29)以下结构体类型说明和变量定义中正确的是 A)typedef struct B)struct REC; int n; char c;REC; int n; char c; REC t1,t2; REC t1,t2; C)typedef struct REC ; D)struct int n=0; char c=A;t1,t2; int n;char c;REC t1,t2; (30)以下叙述中错误的是 A)gets函数用于从终端读入字符串 B)getchar函数用于从磁盘文件读入字符 C)fputs函数用于把字符串输出到文件 D)fwrite函数用于以二进制形式输出数据到文件 (31)有以下程序 #include <stdio.h> main() int s12=1,2,3,4,4,3,2,1,1,1,2,3,c5=0,i; for(i=0;i<12;i+) csi+; for(i=1;i<5;i+) printf(“%d”,ci); printf(“n”); 程序的运行结果是 A)1 2 3 4 B)2 3 4 4 C)4 3 3 2 D )1 1 2 3 (32)有以下程序 #include <stdio.h> void fun(int *s,int nl,int n2) int i,j,t; i=nl; j=n2; while(i<j) t=si;si=sj;sj=t;i+;j-; main() int a10=1,2,3,4,5,6,7,8,9,0,k; fun(a,0,3); fun(a,4,9); fun(a,0,9); for(k=0;k<10;k+)printf(“%d”,ak); printf(“n”); 程序运行的结果是 A) B) C) D) (33)有以下程序 #include <stdio.h> #include <string.h> void fun(char *s ,int n) char *t; int i,j; for(i=0;i<n-1;i+) for(j=i+1;j<n;j+) if(strlen(si)>strlen(sj) t=si;si=sj;sj=t; main() char *ss=“bcc”,”bbcc”,”xy”,”aaaacc”,”aabcc”; fun(ss,5); printf(“%s,%sn”,ss0,ss4); 程序的运行结果是 A)xy,aaaacc B)aaaacc,xy C)bcc,aabcc D)aabcc,bcc (34)有以下程序 #include <stdio.h> int f(int x) int y; if(x=0|x=1) return (3); y=x*x-f(x-2); return y; main() int z; z=f(3); printf(“%dn”,z); 程序的运行结果是 A)0 B)9 C)6 D)8 (35) 有以下程序 #include <stdio.h> void fun(char *a,char *b) while(*a=*) a+; while(*b=*a) b+;a+; main() char *s=”*a*b*”,t80; fun(s,t); puts(t); 程序的运行结果是 A)*a*b B) a*b C) a*b* D) ab (36) 有以程序 #include <stdio.h> #include <string.h> typedef struct char name9; char sex; float score2; STU; void f( STU a) STU b=“Zhao” ,m,85.0,90.0 ; int i; strcpy(a.name,b.name); a.sex=b.sex; for(i=0;i<2;i+) a.scorei=b.scorei; main() STU c=“Qian”,p,95.0,92.0; f(c); printf(“%s,%c,%2.0f,%2.0fn”,c.name,c.sex,c.score0,c.score1); 程序的运行结果是 A)Qian,f,95,92 B) Qian,m,85,90 C) Zhao,f,95,92 D) Zhao,m,85,90 (37) 有以下程序 #include <stdio.h> main() FILE *fp; int a10=1,2,3,i,n; fp=fopen(“dl.dat”,”w”); for(i=0;i<3;i+) fprintf(fp,”%d”,ai); fprintf(fp,”n”); fclose(fp); fp=fopen(“dl.dat”,”r”); fscanf(fp,”%d”,&n); fclose(fp); printf(“%dn”,n); 程序的运行结果是 A)12300 B) 123 C) 1 D) 321 (38)变量a中的数据用二进制表示的形式是,变量b中的数据用二进制表示的形式是。若要求将a的高4位取反,低4位不变,所要执行的运算是 A)ab B)a|b C)a&b D)a<<4 (39)在C语言中,只有在使用时才占用内存单元的变量,其存储类型是 A)auto和register B)extern和register C) auto和static D) static和register (40)设有定义语句int(*f)(int);,则以下叙述正确的是 A)f是基类型为int的指针变量 B) f是指向函数的指针变量,该函数具有一个int类型的形参 C) f是指向int类型一维数组的指针变量 D) f是函数名,该函数的返回值是基类型为int类型的地址 二、填空题(每空2分,共30分) 请将每一个空的正确答案些在答题卡【1】至【15】序号的横线上,答在试卷上不得分。 (1)测试用例包括输入值集和【1】值集。 (2)深度为5的满二叉树有【2】个叶子结点。 (3)设某循环队列的容量为50,头指针front=5(指向队头元素的前一位置),尾指针rear=29(指向队尾元素),则该循环队列中共有【3】个元素。 (4)在关系数据库中,用来表示实体之间联系的是【4】。 (5) 在数据库管理系统提供的数据定义语言、数据操纵语言和数据控制语言中,【5】负责数据的模式定义与数据的物理存取构建。 (6)已有定义:char c= ;int a=1,b;(此处c的初值为空格字符),执行b=!c&&a;后b的值为【6】。 (7)设变量已正确定义为整型,则表达式n=i=2,+i,i+的值为【7】。 (8)若有定义:int k;,以下程序段的输出结果是【8】。 for(k=2;k<6;k+,k+) printf(“#%d”,k); (9)以下程序段的定义语句中,x1的初值是【9】,程序运行后输出的内容是【10】。 #include<stdio.h> main() int x=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,*p4,i; for(i=0;i<4;i+) pi=&x2*i+1; printf(“%d ”,pi0); printf(“n”); (10)以下程序的输出结果是【11】。 #include<stdio.h> void swap(int *a,int *b) int *t; t=a; a=b; b=t; main() int i=3,j=5,*p=&i,*q=&j; swap(p,q); printf(“%d %dn”,*p,*q); (11)以下程序的输出结果是【12】。 #include<stdio.h> main() int a5=2,4,6,8,10, *p; p=a; p+; printf(“%d”,*p); (12)以下程序的输出结果是【13】。 #include<stdio.h> void fun(int x) if(x/2>0) fun(x/2); printf(“%d ”,x); main() fun(3); printf(“n”); (13)以下程序中函数fun的功能是:统计person所指结构体数组中所有性别(sex)为M的记录的个数,存入变量n中,并做为函数值返回。请填空: #include<stdio.h> #define N 3 typedef struct int num;char nam10; char sex;SS; int fun(SS person) int i,n=0; for(i=0;i<N;i+) if(【14】=M ) n+; return n; main() SS WN=1,”AA”,F,2,”BB”,M,3,”CC”,M; int n; n=fun(W); printf(“n=%dn”,n); (14)以下程序从名为filea.dat的文本文件中逐个读入字符并显示在屏幕上。请填空: #include<stdio.h> main() FILE *fp; char ch; fp=fopen(【15】); ch=fgetc(fp); whlie(!feof(fp) putchar(ch); ch=fgetc(fp); putchar(n); fclose(fp); 参考答案: 一、选择题 1-10: CABBA DBCDC 11-20: CCBCB DBBBD 21-30: DADCA DDDAB 31-40: CCACC ABAAB 二、填空题: 1、输出 2、16 3、24 4、关系 5、数据定义语言 6、0 7、3 8、24 9、2 10、2 4 6 8 11、3 5 12、4 13、1 3 14、personi.sex 15、“filea.dat”,”r” 2008年9月全国计算机等级考试二级笔试试卷C语言程序设计(考试时间90分钟,满分100分)一、选择题 下列各题A)、B)、C)、D)四个选项中,只有一个选项是正确的。请将正确选项涂写在答题卡相应位置上,答在试卷上不得分。(1)一个栈的初始状态为空。现将元素1、2、3、4、5、A、B、C、D、E依次入栈,然后再依次出栈,则元素出栈的顺序是A)12345ABCDE B)EDCBA54321C)ABCDE12345 D)54321EDCBA(2)下列叙述中正确的是A)循环队列有队头和队尾两个指针,因此,循环队列是非线性结构B)在循环队列中,只需要队头指针就能反应队列中元素的动态变化情况C)在循环队列中,只需要队尾指针就能反应队列中元素的动态变化情况D)循环队列中元素的个数是由队头和队尾指针共同决定(3)在长度为n的有序线性表中进行二分查找,最坏情况下需要比较的次数是A)O(N) B)O(n2) C)O(log2n) D)O(n log2n)(4)下列叙述中正确的是A)顺序存储结构的存储一定是连续的,链式存储结构的存储空间不一定是连续的B)顺序存储结构只针对线性结构,链式存储结构只针对非线性结构C)顺序存储结构能存储有序表,链式存储结构不能存储有序表D)链式存储结构比顺序存储结构节省存储空间(5)数据流图中带有箭头的线段表示的是A)控制流 B)事件驱动 C)模块调用 D)数据流(6)在软件开发中,需求分析阶段可以使用的工具是A)N-S图 B)DFD图 C)PAD图 D)程序流程图(7)在面向对象方法中,不属于“对象”基本特点的是A)一致性 B)分类性 C)多态性 D)标识唯一性(8)一间宿舍可住多个学生,则实体宿舍和学生之间的联系是A)一对一 B)一对多 C)多对一 D)多对多(9)在数据管理技术发展的三个阶段中,数据共享最好的是A)人工管理阶段 B)文件系统阶段 C)数据库系统阶段 D)三个阶段相同(10)有三个关系R、S和T如下:A B Cm 1 3R S TA Bm 1n 2B C1 33 5 由关系R和S通过运算得到关系T,则所使用的运算为A)笛卡尔积 B)交 C)并 D)自然连接(11)以下叙述中正确的是A)C程序的基本组成单位是语句 B)C程序中每一行只能写一条语句 C)简单C语句必须以分号结束 D)C语句必须在一行内写完(12)计算机能直接执行的程序是A)源程序 B)目标程序 C)汇编程序 D)可执行程序(13)以下选项中不能作为C语言合法常量的是A)cd B)0.1e+6 C)”a” D)”011”(14)以下选项中正确的定义语句是A)double a;b; B)double a=b=7; C)double a=7,b=7; D)double ,a,b;(15) 以下不能正确表示代数式 的C语言表达式是A)2*a*b/c/d B)a*b/c/d*2 C)a/c/d*b*2 D)2*a*b/c*d(16)C源程序中不能表示的数制是 A)二进制 B) 八进制 C) 十进制 D) 十六进制 (17) 若有表达式(w)?(-x):(+y),则其中与w等价的表达式是 A) w= =1 B) w= =0 C)w!=1 D) w!=0 (18) 执行以下程序段后,w的值为 int w=A,x=14,y=15; w=(x|y)&&(w<a); A)-1 B)NULL C)1 D) 0(19)若变量已正确定义为int型,要通过语句scanf(“%d,%d,%d ”,&a,&b,&c);给a赋值1,给b赋值2, 给c赋值3, 以下输入形式中错误的是(u代表一个空格符) A)uuu1,2,3<回车> B)1u2u3<回车> C)1,uuu2, uuu3<回车> D)1,2,3<回车>(20) 有以下程序段 int a,b,c; a=10; b=50; c=30; if(a>b)a=b,b=c;c=a; printf(“a=%d b=%d c=%d n”,a,b,c);程序的输出结果是A) a=10 b=50 c=10 B) a=10 b=50 c=30C) a=10 b=30 c=10 D) a=50 b=30 c=50(21) 若有定义语句:int m=5,4,3,2,1,i=4;,则下面对m数组元素的引用中错误的是 A) m-i B)m2*2 C)mm0 D)mm(22)下面的函数调用语句中func函数的实参个数是 func(f2(v1,v2),(v3,v4,v5),(v6,max(v7,v8); A)3 B) 4 C)5 D)8(23)若有定义语句:double x5=1.0,2.0,3.0,4.0,5.0,*p=x;则错误引用x数组元素的是 A)*p B)x5 C)*(p+1) D)*x(24) 若有定义语句:char s10= “00 ”;,则strlen(s)的值是 A)7 B)8 C)9 D)10(25)以下叙述中错误的是 A) 用户定义的函数中可以没有return语句 B)用户定义的函数中可以有多个return语句,以便可以调用一次返回多个函数值 C)用户定义的函数中若没有return语句,则应当定义函数为void类型 D)函数的return语句中可以没有表达式(26)以下关于宏的叙述中正确的是 A)宏名必须用大写字母表示 B)宏定义必须位于源程序中所有语句之前 C)宏替换没有数据类型限制 D)宏调用比函数调用耗费时间(27)有以下程序#include <stdio.h>main() int i,j; for(i=3;i>=1;i-) for(j=1;j<=2;j+) printf("%d",i+j); printf("n ") 程序的运行结果是A) 2 3 4 B) 4 3 2 C) 2 3 D) 4 53 4 5 5 4 3 3 4 3 4 4 5 2 3(28) 有以下程序#include <stdio.h>main() int x=1,y=2,z=3; if(x>y) if(y<z) printf("%d",+z); else printf("%d",+y); printf("%dn", x+ );程序的运行结果是A)331 B)41 C)2 D)1(29)有以下程序#include <stdio.h>main() int i=5; do if(i%3=1) if(i%5=2) printf(“*%d”,i); break; i+; while(i!=0); printf(“n”);程序的运行结果是A) *7 B)*3*5 C)*5 D)*2*6(30)有以下程序#include <stdio.h>int fun(int a,int b) if(b=0) return a; else return(fun(-a,-b);main() printf("%dn", fun(4,2);程序的运行结果是A) 1 B)2 C)3 D)4 (31) 有以下程序#include <stdio.h>#include <stdlib.h>int fun(int n) int *p; p=(int*)malloc(sizeof(int); *p=n; return *p;main() int a; a = fun(10); printf("%dn",a+fun(10);程序的运行结果是A)0 B)10 C)20 D)出错(32)有以下程序#include <stdio.h>void fun( int a, int b) int t; t=a; a=b; b=t;main() int c10=1,2,3,4,5,6,7,8,9,0, i; for(i=0;i<10;i+=2) fun(c, ci+1); for(i=0;i<10;i+) printf("%d," ,c); printf("n");程序的运行结果是A)1,2,3,4,5,6,7,8,9,0 B)2,1,4,3,6,5,8,7,0,9C)0,9,8,7,6,5,4,3,2,1 D)0,1,2,3,4,5,6,7,8,9(33) 有以下程序#include <stdio.h>struct st int x, y; data2=1,10,2,20;main() struct st *p=data; printf("%d,",p->y); printf("%dn",(+p)->x);程序的运行结果是A)10,1 B)20,1 C)10,2 D)20,2(34) 有以下程序#include <stdio.h>void fun(int a, int n) int i,t; for(i=0;i<n/2;i+) t=a; a=an-1-i; an-1-i=t; main() int k10=1,2,3,4,5,6,7,8,9,10,i; fun(k,5); for(i=2;i<8;i+) printf("%d",k); printf("n");程序的运行结果是A) B) C) D)(35) 有以下程序#include <stdio.h>#define N 4void fun(int aN, int b) int i; for(i=0;i<N;i+) b = a;main() int xN=1,2,3,4,5,6,7,8,9,10,yN,i; fun(x,y); for(i=0;i<N;i+) printf("%d,",y); printf("n");程序的运行结果是A)1,2,3,4, B)1,0,7,0, C)1,4,5,9, D)3,4,8,10,(36) 有以下程序#include <stdio.h>int fun(int (*s)4,int n, int k) int m,i; m=s0k; for(i=1;i<n;i+) if(sk>m)m= sk; return m;main() int a44=1,2,3,4,11,12,13,14,21,22,23,24,31,32,33,34; printf("%dn",fun(a,4,0);程序的运行结果是 A)4 B)34 C)31 D)32(37) 有以下程序#include <stdio.h>main() struct STU char name9; char sex; double score2; struct STU a="Zhao",'m',85.0,90.0,b="Qian",'f',95.0,92.0; b=a; printf("%s,%c,%2.0f,%2.0fn", b.name, b.sex, b.score0, b.score1);程序的运行结果是A) Qian,f,95,92 B) Qian,m,85,90 C) Zhao,f,95,92 D) Zhao,m,85,90(38) 假定已建立以下链表结构,且指针p和q已指向如图所示的结点:head a b c data next p q 则以下选项中可将q所指向结点从链表中删除并释放该结点的语句组是A)(*p).next=(*q).next; free(p); B)p=q->next; free(q);C) p=q; free(q); D)p->next=q->next; free(q);(39) 有以下程序#include <stdio.h>main() char a=4; printf(“%dn”,a=a<<1);程序的运行结果是A) 40 B) 16 C) 8 D) 4(40) 有以下程序#include <stdio.h>main() FILE *pf; char *s1="China", *s2="Beijing" pf=fopen("abc.dat","wb+"); fwrite(s2,7,1,pf); rewind(pf); /*文件位置指针回到文件开头*/ fwrite(s1,5,1,pf); fclose(pf);以上程序执行后abc.dat文件的内容是 A) China B) Chinang C) ChinaBeijing