全国计算机等级考试二级C语言笔试试卷 (考试时间90分钟,满分100分) 一、选择题((1)~(10),每小题2分,(11)~(50)每题1分,共60分) 下列各题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.下列SQL语句中,用于修改表结构的是___________。 A)ALTER B)CREATE C)UPDATE D)INSERT 6.数据库系统的核心是___________。 A)数据库 B)数据库管理系统 C)模拟模型 D)软件工程 7.一些重要的程序语言(如C语言和Pascal语言)允许过程的递归调用。而实现递归调用中的存储分配通常用___________。 A)栈 B)堆 C)数组 D)链表 8.算法分析的目的是___________。 A)找出数据结构的合理性 B)找出算法中输入和输出之间的关系 C)分析算法的易懂性和可靠性 D)分析算法的效率以求改进 9.下列数据模型中,具有坚实理论基础的是___________。 A)层次模型 B)网状模型 C)关系模型 D)以上3个都是 10.若某二叉树的前序遍历访问顺序是abdgcefh,中序遍历访问顺序是dgbaechf,则其后序遍历的结点访问顺序是___________。 A)bdgcefha B)gdbecfha C)bdgaechf D)gdbehfca 11.以下叙述中正确的是___________。 A)用C语言实现的算法必须要有输入和输出操作 B)用C语言实现的算法可以没有输出但必须要有输入 C)用C程序实现的算法可以没有输入但必须要有输出 D)用C程序实现的算法可以既没有输入也没有输出 12.以下说法中正确的是___________。 A)C语言比其他语言高级 B)C语言可以不用编译就能被计算机识别执行 C)C语言以接近英语国家的自然语言和数学语言作为语言的表达形式 D)C语言出现的最晚,具有其他语言的一切优点 13.下列字符串序列中,可以作为变量名的是___________。 A)C++ B)_DAY C)123abc D)a b c 14. C语言中的赋值、输入输出语句可以构成___________基本结构。 A)分支 B)顺序 C)循环 D)选择 15.下列叙述中正确的是___________。 A)每个C程序文件中都必须要有一个main函数 B)在C程序中main()的位置是固定的 C)C程序中所有函数之间都可以相互调用,与函数所在位置无关 D)在C程序的函数中不能定义另一个函数 16.有以下语句:int b;char c[10]; ,则正确的输入语句是___________。 A)scanf("%d%s",&b,&c); B)scanf("%d%s",&b,c); C)scanf("%d%s",b,c); D)scanf("%d%s",b,&c); 17.设c1,c2均是字符型变量,则以下不正确的函数调用为___________。 A)scanf("c1=%cc2=%c",&c1,&c2); B)c1=getchar( ); C)putchar(c2); D)putchar(c1,c2); 18.若以下选项中的变量已正确定义,则正确的赋值语句是___________。 A)x1=26.8%3; B)1+2=x2; C)x3=0x12; D)x4=1+2=3; 19.有以下程序 main( ) { int x=l02,y=012; printf("%2d,%2d\n",x,y); } 执行后输出结果是___________。 A)10,01 B)02,12 C)102,10 D)02,10 20.有以下程序 main() { int a=0,b=0,c=0,d=0; if(a=1) b=1;c=2; else d=3; printf(“%d,%d,%d,%d\n”,a,b,c,d); } 程序输出___________。 A)0,1,2,0 B)0,0,0,3 C)1,1,2,0 D)编译有错 21.当a为偶数时,下列哪一个选项的表达式值为真___________。 A)a%2= =0 B)!(a/2*2-a)   C)a%2= =0   D)!a%2!=0 22.以下程序的输出结果是___________。 main() { int i, j; for(j=10;j<11;j++) { for(i=9;i=j-1) printf(“%d”,j); } } A)11 B)10 C)9 D)101 23.下面程序的执行结果是___________。 main() { char str[ ]= "quert? ",*p=str; while(putchar(*p++)!='?'); } A)quert B)Rvfsu C)quert? D)rvfsu? 24.定义数组char a[ ]={ '0', '1', '2', '3'};,则将该数组中元素按反序转换成一整数,正确的程序段是___________。 A)int k=0,i; B)int k=0,i; for(i=0;i<4;i++) for(i=3;i>=0;i--) k=k*10+a[i]-48; k=k*10+a[i]- '0'; C)int k=0,i; D)int k,i; for(i=3;i>=0;i--) for(i=3;i>=0;i--) k=k+a[i]- '0'; k=k*10+a[i]- '0'; 25.先用下列语句说明字符型变量ch: char ch; 然后要将字符A赋值给变量ch,则下列语句中正确的是___________。 A)ch="A"   B)ch="65"   C)'A' D)'65' 26.设有如下函数: fun(float x) { x*=x++; printf("%d\n",x); return(x); } 则函数的类型是___________。 A)float B)void C)int D)无法确定 27.以下选项中,值为1的表达式是___________。 A)1-‘0’ B)1-‘\0’ C)’1’-0 D)’\0’-‘0’ 28.下面函数功能为___________。 exchange(int *ptr1,*ptr2) { int *ptr; ptr=ptr1; ptr1=ptr2; ptr2=ptr; } A)交换*ptr1和*ptr2的值 B)正确,但无法改变*ptr1和*ptr2的值 C)可能造成系统故障,因为使用了空指针 D)交换*ptr1和*ptr2的地址 29.若有说明:int i,j=7,*p=&i;则与i=j;等价的语句是___________。 A)i=*p B)*p=*&j C)i=&j D)i=**p 30.以下程序段的输出结果是___________。 int str[ ]={10,8,6,4,2},*p=str+1; printf("%d\n",*(p+2)); A)6 B)4 C)10 D)不确定的值 31.有以下程序 void swap1(int c0[ ],int c1[ ]) { int t; t=c0[0]; c0[0]=c1[0]; c1[0]=t; } void swap2(int *c0,int *c1) { int t; t=*c0; *c0=*c1; *c1=t; } main() { int a[2]={3,5},b[2]={3,5}; swap1(a,a+1); swap2(&b[0],&b[1]); printf(″%d %d %d %d\n″,a[0],a[1],b[0],b[1]); } 程序运行后的输出结果是___________。 A)3 5 5 3 B)5 3 3 5 C)3 5 3 5 D)5 3 5 3 32.有以下程序 prt(int *m,int n) { int i; for(i=0;iname+2); C)printf("%s\n",str[2].name[2]); D)printf("%s\n",str[2]->name+2); 34.下列程序段的执行结果是___________。 int i; int x[ ][3]={1,2,3,4,5,6,7,8,9}; for(i=0;i<3;i++) printf("%d",x[i][2-i]); A)1 5 9 B)1 4 7 C)3 5 7 D)3 6 9 35.以下程序的输出结果是___________。 amovep(int *p, int (*a)[3], int n) { int i, j; for(i=0;i void f(char p[][10],int n) { char t[20]; int i,j; for(i=0;i void f(char *p[ ],int n) { char *t; int i,j; for(i=0;i0){t=p[i]; p[i]=p[j]; p[j]=t; } } main() { char *p[5]={″abc″, ″aabdfg″, ″abbd″, ″dcdbe″, ″cd″}; f(p,5); printf(″%d\n″,strlen(p[1])); } 程序运行后的输出结果是___________。 A)2 B)3 C)6 D)4 40.下列程序的输出结果是___________。 int b=2; int func(int *a) { b += *a; return(b); } main() { int a=2, res=2; res += func(&a); printf("%d \n",res); } A)4 B)6 C)8 D)10 41.不合法的main函数命令行参数表示形式是___________。 A)main(int a,char *c[ ]) B)main(int arc,char **arv) C)main(int argc,char *argv) D)main(int argv,char *argc[ ]) 42.有以下程序 int fun(int x[],int n) { static int sum=0,i; for(i=0;i struct STU { int num; float TotalScore; }; void f(struct STU p) { struct STU s[2]={{20041,703},{20045,537}}; p.num = s[1].num; p.TotalScore = s[1].TotalScore; } main() { struct STU s[2]={{20041,703},{20042,580}}; f(s[0]); printf("%d %3.0f\n",s[0].num,s[0].TotalScore); } 程序运行后的输出结果是___________。 A)20045 537 B)20044 550 C)20042 580 D)20041 703 46.对于下述说明,不能使变量p->b的值增1的表达式是___________。 struct exm { int a; int b; float c }*p; A)++p->b B)++(p++)->b C)p->b++ D)(++p)->b++ 47.设有如下说明___________。 typedef struct ST {long a; int b; char c[2];} NEW; 则下面叙述中正确的是 A)以上的说明形式非法 B)ST是一个结构体类型 C)NEW是一个结构体类型 D)NEW是一个结构体变量 48.下面程序的输出是___________。 main() { char x=040; printf(“%d\n”, x=x<<1); } A)100 B)160 C)120 D)64 49.设有以下结构体类型: struct st { char name[8]; int num; float s[4]; }student[50]; 并且结构体数组student中的元素都已有值,若要将这些元素写到硬盘文件fp中,以下不正确的形式是___________。 A)fwrite(student,sizeof (struct st),50,fp); B)fwrite(student ,50*sizeof(struct st ),1,fp); C)fwrite(student,25*sizeof(struct st),25,fp); D)for(I=0;I<50;I++) fwrite(student+I,sizeof(struct st),1,fp); 50.执行以下程序后,test.txt文件的内容是(若文件能正常打开)___________。 #include main() { FILE *fp; char *s1=”Fortran”,*s2=”Basic”; if((fp=fopen(“test.txt”,”wb”))==NULL) { printf(“Can’t open test.txt file\n”); exit(1);} fwrite(s1,7,1,fp); /*把从地址s1开始的7个字符写到fp所指文件中*/ fseek(fp,0L,SEEK_SET); /*文件位置指针移到文件开头*/ fwrite(s2,5,1,fp); fclose(fp); } A)Basican B)BasicFortran C)Basic D)FortranBasic 二、填空题(每空2分,共40分) 请将每一个空的正确答案写在【1】至【20】序号的横线上。 1.常用的黑箱测试有等价分类法、 【1】 、因果图法和错误推测法4种。 2.测试的目的是暴露错误,评价程序的可靠性;而 【2】 的目的是发现错误的位置并改正错误。 3.软件维护活动包括以下几类:改正性维护、适应性维护、 【3】 维护和预防性维护。 4.一个项目具有一个项目主管,一个项目主管可管理多个项目,则实体“项目主管”与实体“项目”的联系属于 【4】 的联系。 5.数据库设计分为以下6个设计阶段:需求分析阶段、 【5】 、逻辑设计阶段、物理设计阶段、实施阶段、运行和维护阶段。 6.以下程序的输出结果是 【6】 。 main() { int a=0; a+=(a=8); printf(“%d\n”, a); } 7.有以下程序,若运行时从键盘输入:18,11<回车>,则程序的输出结果是 【7】 。 main() { int a, b; printf(“Enter a,b:”); scanf(“%d,%d”,&a,&b); while(a!=b) { while(a>b) a-=b; while(b>a) b-=a; } printf(%3d%3d\n”,a,b); } 8.以下程序的输出结果是 【8】 。 char fun(char x,char y) { if(x main() { char p[20]={'a','b','c','d'},q[]="abc", r[]="abcde" strcat(p,r); strcpy(p+strlen(q),q); printf("%d \n",strlen(p)); } 11.已知在ASCII字符集中,数字0的序号为48,下面程序的输出结果为 【11】 。 main( ) { char a='0',b='9'; printf("%d,%c\n",a,b); } 12.以下程序运行后的输出结果是 【12】 。 main() { char a[7]="a0\0a0\0"; int i,j; i=sizeof(a); j=strlen(a); printf("%d %d\n",i,j); } 13.以下程序执行后输出结果是 【13】 。 main() { int aa[4][4]={{1,2,3,4},{5,6,7,8},{3,9,10,2},{4,2,9,6}}; int i, s=0; for(i=0;i<4;i++) s+=aa[i][1]; printf(“%d\n”,s); } 14.函数YangHui的功能是把杨辉三角形的数据赋给二维数组的下半三角,形式如下: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 其构成规律是: ①第0列元素和主对角线元素均为1 ②其余元素为其左上方和正上方元素之和 ③数据的个数每行递增1 请将程序补充完整。 #define N 6 void YangHui(int x[N][N]) { int i,j; x[0][0]=1; for(i=1;i=1) return f(a,n-1)+a[n-1]; else return 0; } main() { int aa[5]={1,2,3,4,5},s; s=f(aa,5); printf("%d\n",s); } 17.用以下语句调用库函数malloc,使字符指针st指向具有11个字节的动态存储空间,请填空。 st=(char*) 【18】 ; 18.下面程序把从终端读入的文本(用#作为文本结束标志)复制到一个名为text.dat的新文件中。补足所缺语句。 FILE *fp; main( ) { char ch; if((fp=fopen( 【19】 ))==NULL) exit(0); while((ch=getchar())!='#') fputc(ch,fp);  【20】 ; }