国家计算机等级考试二级C试卷 一、选择题 (1)根据数据结构中各数据元素之间前后件关系的复杂程度,一般将数据结构分成 A)动态结构和静态结构 B)紧凑结构和非紧凑结构 C)线性结构和非线性结构 D)内部结构和外部结构 (2)设一棵二叉树中有3个叶子结点,有8个度为1的结点,则该二叉树中总的结点数为 A)12 B)13 C)14 D)15 (3)在下列几种排序方法中,要求内存量最大的是 A)插入排序 B)选择排序 C)快速排序 D)归并排序 (4)下列叙述中,不属于结构化程序设计方法的主要原则的是 A)自顶向下 B)由底向上 C)模块化 D)限制使用goto语句 (5)下列不属于软件调试技术的是 A)强行排错法 B)集成测试法 C)回溯法 D)原因排除法 (6)为了避免流程图在描述程序逻辑时的灵活性,提出了用方框图来代替传统的程序流程图,通常也把这种图称为 A)PAD图 B)N-S图 C)结构图 D)数据流图 (7)软件复杂性度量的参数包括 A)效率 B)规模 C)完整性 D)容错性 (8)下列叙述中,不属于数据库系统的是 A)数据库 B)数据库管理系统 C)数据库管理员 D)数据库应用系统 (9)数据库系统的核心是 A)数据库 B)数据库管理系统 C)数据模型 D)软件工具 (10)视图设计一般有3种设计次序,下列不属于视图设计的是 A)自顶向下 B)由外向内 C)由内向外 D)自底向上 (11)下列常数中不能作为C语言常量的是 A)0xabc B)2.5e-0.2 C)32 D)0747 (12)设int型的数据长度为2个字节,则unsigned int 类型数据的取值范围是 A)-127~128 B)0~255 C)0~65535 D)0~32768 (13)已知int t=6,s;则执行语句s=(++t)+(t++);后,s的值是 A)12 B)13 C)14 D)15 (14)已知int x=6,y=2,z;则执行表达式z=x=x>y后,变量z的值为 A)0 B)1 C)4 D)5 (15)已知int i,a;执行语句i=(a=3,a++,--a,a+4,a+5,++a);后,变量i的值为 A)2 B)3 C)4 D)5 (16)下列说法中正确的是 A)一个C程序是从命令行开始执行的 B)C程序中有些执行语句不用分号(;)结束 C)分号不是C语句的一部分,是C语句之间的分隔符 D)命令行必须用“#”开头,最后不能加“;”号,命令行不是C程序中的语句 (17)已知int x=2;执行语句x*=x+=++x;后,x的值是 A)16 B)26 C)36 D)46 (18)已知int a=20,b=5;则执行以下语句后的输出结果是 printf("%d\n",a%=(b%=2)); A)0 B)1 C)2 D)3 (19)现有以下程序段 #include main() { int a,b,c; scanf("a=%*d%d,b=%d%*d,c=%d",&a,&b,&c); printf("a=%d,b=%d,c=%d\n",a,b,c); } 若输出的结果为a=20,b=30,c=40,则以下能够正确输入数据的是 A)a=10]20,b=20]30,c=40 B)20,30,40 C)a=20,b=30,c=40 D)a=10]20,b=30]20,c=40 [注]: “]”表示空格,表示回车 (20)已知int x=5,y=3;则表达式(x||y)&&78的结果为 A)1 B)0 C)5 D)78 转贴于:计算机二级考试_考试大 (21)有如下程序段 #include "stdio.h" main() {int a=10,b=50,c=30; a=a>30?1:2; b=b>30?1:2; c=c>30?1:2; printf("%d,%d,%d\n",a,b,c);} 则执行结果为 A)2,1,2 B)1,2,1 C)1,1,2 D)2,1,1 (22)阅读如下程序段 #include "stdio.h" main() { int a=45,b=40,c=50,d; d=a>30?b:c; switch(d) { case 30 : printf("%d,",a); case 40 : printf("%d,",b); case 50 : printf("%d,",c); default : printf("#");}} 则输出的结果是 A)40,50, B)50,# C)40,# D)40,50,# (23)若有定义int k=10;则下列程序的输出结果为 do{ printf("%d",k--); } while(!k); A)9 B)10 C)10987654321 D)没有输出 (24)阅读下列程序段,则程序的输出结果是 #include "stdio.h" main() { int a=10,b=10,k; for(k=0;a>8;b=++k) printf("%d,%d,",a--,--b); printf("\n");} A)10,10,10,0, B)10,9,9,0, C)10,10,9,1, D)9,9,9,1, (25)下列程序的运行结果是 #include "stdio.h" main() {int a,b,m; for(a=5;a>=1;a--) { m=0; for(b=a;b<=5;b++) m=m+a*b;} printf("%d\n",m);} A)30 B)15 C)20 D)10 (26)有字符串如下,"\n\\\407as1\"\xabc",则字符串的长度为 A)6 B)7 C)8 D)9 (27)阅读下面程序段 #include "stdio.h" main() { char c; c=(′z′-′a′)/2+′A′; putchar(c);} 输出结果为 A)M B)N C)O D)Q (28)下列说法中不正确的是 A)C语言规定,不能在一个函数的内部再定义函数 B)在没有声明函数返回值类型的情况下,C默认的函数返回值类型为int型 C)函数的类型可以是整型、实型、字符型,但不能是指针型 D)函数可以没有形参,但函数名后的一对圆括号不能省略 (29)现有如下程序,则程序的输出结果为 #include "stdio.h" int f(int a,int b) {int c; if(a>0&&a<10)c=(a+b)/2; else c=a*b/2; return c;} main() { int a=8,b=20,c; c=f(a,b); printf("%d\n",c);} A)随机数 B)80 C)28 D)14 (30)阅读如下程序段,则程序段的执行后的输出结果为 #include "stdio.h" main() { char c; int i; char count(); int p(char); for(i=0;i<30;i++)c=count(); p(c);} char count() { char str=′A′; str+=1; return(str);} p(char c) {putchar(c); putchar(′\n′);} A)A B)B C)a D)b (31)阅读如下程序段,则执行后的结果为 #include "stdio.h" main() {int a,*p,*q,**w; p=&a; q=&a; w=&p; *p=5%6; *q=5; **w=3; printf("%d\n",a);} A)无确定值 B)1 C)5 D)3 (32)现有定义int a=10,*p=&a;则不能使a的
增1的语句是 A)*p++; B)*p=*p+1; C)++*p; D)*p+=1; (33)现有下列程序段 #include "stdio.h" void JFT(int *a,int *b,int *c,int *d,int *e) {int i,j,k,m; for(i=0;i<*a;i++) for(j=0;j<*b;j++) for(k=0;k<*c;k++) for(m=0;m<*d;m++)*e++;} main() {int a=10,b=10,c=10,d=10,e=0; JFT(&a,&b,&c,&d,&e); printf("%d\n",e);} 则程序段的输出结果是 A)10000 B)1000 C)10001 D)0 (34)已知:int c[5][6];则对数组元素引用不正确的是 A)c[0+2][2*1] B)c[1][3] C)c[4-2][0] D)c[5][2] (35)以下能对二维数组c进行正确的初始化的语句是 A)int c[3][]={{3},{3},{4}}; B)int c[][3]={{3},{3},{4}}; C)int c[3][2]={{3},{3},{4},{5}}; D)int c[][3]={{3},{},{3}}; 转贴于:计算机二级考试_考试大 (36)阅读下列程序段,则程序段实现的功能是 #include "stdio.h" main() { int k[10]; int j; for(j=0;j<10;j++) scanf("%d",&k[j]); for(j=9;j>=0;j--) printf("%d,",k[j]);} A)输入10个数据的顺序输入并输出 B)输入10个数据的逆序存放 C)输入10个数据的逆序输出 D)以上叙述均错误 (37)阅读程序,则执行后的结果为 #include "stdio.h" main() {int i,m,n; for(i=0;i<3;i++) {m=test1(); n=test2();} printf("%d,%d\n",m,n);} test1() { int x=0; x++; return x;} test2() {static int x=0; x++; return x;} A)1,1 B)1,3 C)3,1 D)3,3 (38)以下关于宏替换叙述中,错误的是 A)宏替换占用编译时间 B)替换文本中可以包含已定义过的宏名 C)宏名可以由+号组成 D)宏替换只能是字符替换 (39)阅读下面程序,则程序的输出结果为 #include "stdio.h" main() { int c[]={1,2,3,4,5,6}; int *p; p=c; printf("%d,",*p); printf("%d\n",*++p);} A)1,2 B)2,1 C)1,1 D)2,2 (40)有如下定义,则函数fun的首部可以是 #define N 5 #define M 6 main() {doublec[M][N]; fun(c); } A)fun(double a) B)fun(double a[M][]) C)fun(double *a) D)fun(double (*a)[N]) (41)下面关于字符串的说明中,错误的是 A)char a[15]= "jft"; B)char a[]="jft"; C)char *a=:"jft"; D)char a[]={′j′,′f′,′t′}; (42)已知:char a[20]= "abc",b[20]= "defghi";则执行下列语句后的输出结果为 printf("%d",strlen(strcpy(a,b))); A)11 B)6 C)5 D)以上答案都不正确 (43)阅读如下程序段,则程序在先后输入love和china后,输出结果是 #include #include main() {char a[30],b[30]; int k; gets(a); gets(b); k=strcmp(a,b); if(k>0)puts(a); else if(k<0)puts(b);} A)love B)china C)lovechina D)没有输出结果 (44)阅读下面程序,则执行后的结果为 #include "stdio.h" #include "string.h" #define N 10 #define M 10 char *find(char (*a)[M],int n) {char *q; int i; q=a[0]; for(i=0;i
data.x D)t.data.x (48)若有以下程序段,则选项中值为2的是 struct a{int n,*next;}; int x=1,y=2,z=3; struct a s[3],*p=s; s[0].next=&x;s[1].next=&y;s[2].next=&2; A)*(p++)->next B)*(++p)->next C)(*p).next D)(p++)->next (49)下面程序段的输出为 #include "stdio.h" main() { int a=8,b; b=a|1; b>>=1; printf("%d,%d\n",a,b);} A)4,4 B)4,0 C)8,4 D)8,0 (50)阅读下面程序,此程序的功能为 #include "stdio.h" main(int argc,char *argv[]) { FILE *p1,*p2; int c; p1=fopen(argv[1],"r"); p2=fopen(argv[2],"a"); c=fseek(p2,0L,2); while((c=fgetc(p1))!=EOF)fputc(c,p2); fclose(p1); fclose(p2);} A)实现将p1打开的文件中的内容复制到p2打开的文件 B)实现将p2打开的文件中的内容复制到p1打开的文件 C)实现将p1打开的文件中的内容追加到p2打开的文件内容之后 D)实现将p2打开的文件中的内容追加到p1打开的文件内容之后 转贴于:计算机二级考试_考试大 二、填空题 (1)算法的工作量大小和实现算法所需的存储单元多少分别称为算法的 【1】 。 【命题目的】本题考查了考生对算法的理解程度。 【解题要点】算法的复杂性是指对一个在有限步骤内终止算法和所需存储空间大小的估计。算法的计算量是算法的时间复杂性,算法所需存储空间大小是算法的空间复杂性。 【考点链接】算法的各种属性及其相互作用。 (2)数据结构包括数据的逻辑结构、数据的 【2】 以及对数据的操作运算。 【命题目的】本题考查了数据结构所包括的几个方面。 【解题要点】数据结构包括3个方面,即数据的逻辑结构、数据的存储结构及对数据的操作运算。 【考点链接】数据结构包含的3个方面及各方面之间的关系。 (3)可以把具有相同属性的一些不同对象归类,称为 【3】 。 【命题目的】本题考查了对象的一些基本特征。 【解题要点】类描述的是具有相似性质的一组对象;把具有相同属性的一些不同对象归为类,我们称之为对象类。 (4)软件包括3个要素,分别为方法、工具和 【4】 。 【命题目的】本题考查软件工程的3要素。 【解题要点】软件工程包括3个要素,即方法、工具和过程。方法是完成软件工程项目的基础上的技术手段;工具支持软件的开发、管理、文档生成;过程支持软件开发的各个环节的控制、管理。 【考点链接】软件工程的3个要素及各要素的作用。 (5)由关系数据库系统支持的完整性约束是指 【5】 和参照完整性。 【命题目的】掌握关系的完整性约束。 【解题要点】关系的完整性约束指关系的某种约束条件,包括实体完整性、参照完整性和用户定义的完整性。其中,前两种完整性约束由关系数据库系统自动支持。 【考点链接】关系的各种性质。 (6)表达式3*7/2+7/2%5的值为 【6】 。 解析: 算术运算符的优先级别依次为(由高到低):*,/,%,+,-。 (7)阅读下面的程序,当程序在执行时,如果输入的是′A′,则输出结果为 【7】 。 #include "stdio.h" main() {char a; a=getchar(); switch(a) {case 65: printf("%c",′A′); case 66: printf("%c",′B′); default :printf("%s\n","other");}} 解析: switch语句中的某一个标号被选中,将依次执行这个语句到default语句之间的所有语句。如遇到break语句之后就跳出了switch语句。 (8)以下程序的输出结果是 【8】 。 main() {char a []="abcdefg"; char b[10]="abcdefg"; printf("%d,%d\n",sizeof(a),sizeof(b));} 解析: 当维数组省略维数时,系统会按数组实际元数分配内存空间,如规定了一维的大小,则按维数分配内存空间的大小。 (9) 阅读下面程序段,则执行后的输出结果为 【9】 。 #include "stdio.h" main() {int a=1; for(;a<=15;) if(++a%5!=2)continue; else printf("%d",a); printf("\n");} 解析: continue是结束本次循环,即从continue开始到最后的执行,直接执行循环判定条件。 (10)以下程序的输出结果是 【10】 。 main() {int m=2,n=6; for(;n>=0;n--)m*=n; printf("%d\n",m);} 解析: for语句执行最后时n的值为0,所以m的值也为0。 (11)阅读下列程序,则执行后的结果为 【11】 。 #include "stdio.h" fun(int x,int y) { int z; z=x;x=y;y=z;} main() {int a,b; a=100;b=640; fun(a,b); printf("%d,%d\n",a,b);} 解析: 当传递数据值的时候,在被调用函数内部不能改变调用函数的变量的值。 (12)阅读以下程序,使程序输出结果为30,4.000 000,请填空。 #include "stdio.h" main() {int a=30,b=40,c; double 【12】 ,s; s=fun(&a,&b,&c); printf("%d,%lf\n",c,s);} double fun(int *a,int *b, 【13】 ) { *c=*a%*b; return(4.0); } 解析: 函数说明的一般形式为:类型名 函数名(参数类型1,参数类型2,……)。 (13)下面程序段的功能是:从键盘上输入两个字符串,对两个字符串分别排序;然后将它们合并,合并后的字符串按ASCII码值从小到大排序,并删去相同的字符。请填空。 #include "stdio.h" fun(char *x,char *y,char *z) {char t,*p; p=z; while(*x!=′\0′&&*y!=′\0′) { t=*x<*y?*x++:*y<*x?*y++: 【14】 ; if(*p==′\0′)*p=t; else if(t!=*p)*++p=t;} if(*x!=′\0′) while(*x!=′\0′) if(*x!=*p)*++p=*x++; else x++; if(*y!=′\0′)while(*y!=′\0′) if(*y!=*p)*++p=*y++; else y++; *++p= 【15】 ;} sort(char *s) { int i,j,k; char t,*p; p=s; for(k=0;*p!=′\0′;k++)p++; for(i=0;is[j]) { 【16】 }} main() { char s1[100],s2[100],s3[200]; scanf("%s",s1); scanf("%s",s2); sort(s1); sort(s2); s3[0]=′\0′; fun(s1,s2,s3); printf("%s\n",s3);} 解析: 根据题目的要求认真阅读程序,找到各个部分的功能所在,这样就很容易做出答案。 (14)下面函数是一个求阶乘的递归调用函数。请填空。 int fun(int k) {if(k==1) 【17】 ; else return( 【18】 );} 解析: 解这个题目应该首先写递归公式,之后很容易得出答案。 (15)以下函数set用来建立一个带头结点的单向链表,新产生的结点总是插入在链表的末尾。单向链表的头指针作为函数值返回,请填空。 struct node{char data; struct node *next; }; struct node *set() {struct node *t1,*t2,*t3; char ch; t1=(struct node*)malloc(sizeof(struct node)); t3=t2=t1; ch=getchar(); while(ch!=′\n′) { t2= 【19】 malloc(sizeof(struct node)); t2->data=ch; t3->next=t2; t3=t2; ch=getchar();} t3->next=′\0′ ; 【20】 } 解析: 动态申请的返回值是void *类型,所以在使用动态申请函数的时候都要在前面加上适当的强制类型转换,使它的返回值有意义。 选择题答案 01-05 C B D B B 06-10 B B B B B 11-15 B C C B C 16-20 D C A D C 21-25 A D B B B 26-30 D A C D B 31-35 D A D B C 36-40 C B C A D 41-45 D B A B A 46-50 C B B C C