2006年4月二级C语言笔试试题真题及答案(附答案)
一选择题((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)下列叙述中正确的是A)线性链表是线性表的链式存储结构B)栈与队列是非线性结构C)双向链表是非线性结构D)只有根结点的二叉树是线性结构6)对如下二叉树
进行后序遍历的结果为A) ABCDEFB) DBEAFCC) ABDECFD) DEBFCA7)在深度为7的满二叉树中,叶子结点的个数为A)32B)31C)64D)638)“商品”与“顾客”两个实体集之间的联系一般是A)一对一B)一对多C)多对一D)多对多9)在E-R图中,用来表示实体的图形是A)矩形B)椭圆形C)菱形D)三角形10)数据库DB,数据库系统DBS,数据库管理系统DBMS之间的关系是A)DB包含DBS和DBMSB)DBMS包含DB和DBSC)DBS包含DB和DBMSD)没有任何关系11)以下不合法的用户标识符是A)j2_KEYB)DoubleC) 4dD) _8_12)以下不合法的数值常量是A)011B)lelC) 8.0 E0.5D) 0xabcd13)以下不合法的字符常量是A)'\018'B '\”'C) '\\'D) ‘\xcc'14)表达式3.6-5/2+1.2+5%2的值是A)4.3B) 4.8C) 3.3D) 3.815)以下能正确定义字符串的语句是A)char str[]={‘\064'};B) char str=”\x43”;C) char str=”; D) char str[]=”\0”;16)以下数组定义中错误的是A) int x[][3]={0}; B) int x[2][3]={ {1,2},{3,4},{5,6}};C) nt x[][3]={ {1,2,3},{4,5,6}};D)int x[2][3]={1,2,3,4,5,6};17)若要求从键盘读入含有空格字符的字符串,应使用函数A)getc()B) gets()C) getchar()D) scanf()18) 下四个程序中,完全正确的是A)#include B)#includemain(); main(){/*programming*/ {/*/programming/*/printf(“programming!\n”);}printf(“programming!\n”);}C) #include D)includemain() main(){/*/*programming*/*/ {/*programming*/printf(“programming!\n”);} printf(“programming!\n”);}19)若有定义:float x=1.5; int a=1,b=3,c=2;则正确的switch语句是A)switch(x) B) switch((int)x);{case 1.0: printf(“*\n”); {case 1: printf(“*\n”); Case 2.0: printf(“**\n”); } case 2: printf(“**\n”);}C) switch(a+b) D)switch(a+b){ case 1: printf(“*\n”); {case1: printf(*\n”);case 2+1: printf(“**\n”);} casec: printf(“**\n”);}20)若各选项中所用变量已正确定义,函数fun中通过return语句返回一个函数值,以下选项中错误的程序是A)main() B) float fun(int a,int b){……}{……x=fun(2,10);……} main()float fun(int a,int b){……} {……x=fun(i,j);……}C)float fun(int,int); D)main()main() { floatfun(int i,int j);{……x=fun(2,10);……} ……x=fun(i,j);……}float fun(int a,int b){……} float fun(int a,int b){……}
21)在以下给出的表达式中,与while(E)中的(E)不等价的表达式是A)(!E=0)B) (E>0||E<0)C) (E==0)D) (E!=0)22)要求通过while循环不断读入字符,当读入字母N时结束循环。若变量已正确定义,以下正确的程序段是A) while((ch=getchar())!='N')printf(“%c”,ch);B) while(ch=getchar()!='N')printf(“%c”,ch);C) while(ch=getchar()==N')printf(“%c”,ch);D) while((ch=getchar())=='N')printf(“%c”,ch);23)已定义以下函数int fun(int *p){return *p;}fun 函数返回值是A)不确定的值 B)一个整数C)形参p中存放的值D)形参p的地址值24)若有说明语句:double *p,a;则能通过scanf语句正确给输入项读入数据的程序段是A)*p=&a; scanf(“%lf”,p);B)*p=&a; scanf(“%f”,p);C) p=&a; scanf(“%lf”,*p);D)p=&a; scanf(“%lf”,p);25)现有以下结构体说明和变量定义,如图所示,指针p,q,r分别指向一个链表中连续的三个结点。
struct node{ char data;struct node *next;}*p,*q,*r;现要将q和r所指结点交换前后位置,同时要保持链表的连续,以下不能完成此操作的语句是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;26)有以下程序段struct st{ int x; int *y;}*pt:int a[]={1,2},b[]={3,4};struct st c[2]={10,a,20,b};pt=c;以下选项中表达式的值为11的是A) *pt->yB) pt->xC) ++pt->xD) (pt++)->x27)设fp为指向某二进制文件的指针,且已读到此文件末尾,则函数feof(fp)的返回值为A)EOFB)非0值C) 0D)NULL28)设有以下语句int a=1,b=2,c;c=a^(b<<2);执行后,c的值为A)6B) 7C) 8D) 929)有以下程序#includemain(){ char c1,c2,c3,c4,c5,c6;scanf(“%c%c%c%c”,&c1,&c2,&c3,&c4);c5=getchar(); c6=getchar();putchar(c1); putchar(c2);printf(“%c%c\n”,c5,c6);}程序运行后,若从键盘输入(从第1列开始)123<回车>45678<回车>则输出结果是A)1267B)1256C) 1278D)124530)若有以下程序main(){int y=10;while(y- -); printf(“y=%d\n”y);}程序运行后的输出结果是A)y=0B)y=-1C) y=1D)while构成无限循环
31)有以下程序
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,0B) 0,0,0,3C)1,1,2,0D)编译有错32)有以下程序main(){ int i,j,x=0;for(i=0;i<2;i++){ x++;for(j=0;j<=3;j++){ if(j%2) continue;x++;}x++;}printf(“x=%d\n”,x);}程序执行后的输出结果是A)x=4B) x=8C) x=6D) x=1233)有以下程序int fun1(duoble a){return a*=a;}int fun2(dpuble x,double y){ double a=0,b=0;a=fun1(x); b=fun1(y); return (int)(a+b);}main(){double w; w=fun2(1.1,2.0);……}程序执行后变量w中的值是A)5.21B) 5C) 5.0D) 0.034)有以下程序main(){ int i,t[][3]={9,8,7,6,5,4,3,2,1};for(i=0;i<3;i++) printf(“%d”,t[2-i][i]);}程序的执行后的输出结果是A)7 5 3B) 3 5 7C)3 6 9D)7 5 135)有以下程序fun(char p[][10]){int n=0,i;for(i=0;i<7;i++)if(p[i][0]=='T') n++;return n;}main(){ char str[][10]={“Mon”, “Tue”, “Wed”, “Thu”,”Fri”,”Sat”,”Sun”};printf(“%d\n”,fun(str));}程序执行后的输出结果是A)1B) 2C)3D) 036有以下程序main(){ int i,s=0,t[]={1,2,3,4,5,6,7,8,9};for(i=0;i<9;i+=2) s+=*(t+i);printf(“%d\n”,s);}程序执行后的输出结果是A)45B)20C)25D)3637)有以下程序void fun1(char *p){ char *q;q=p;while(*q!='\0'){ (*q)++; q++; }}main(){ char a[]={“Program”},*p;p=&a[3]; fun1(p); printf(“%s\n”,a);}程序执行后的输出结果是A)P rohsbnB)PrphsbnC)ProgsbnD)Program38)有以下程序void swap(char *x,char *y){ char t;t=*x; *x=*y; *y=t;}main(){ char *s1=”abc”,*s2=”123”;swap(s1,s2); printf(“%s,%s\n”,s1,s2);}程序执行后的输出结果是A)123,abcB) abc,123C)1bc,a23D) 321,cba39)有以下程序int fun(int n){ if(n==1) return 1;elsereturn (n+fun(n-1));}main(){ int x;scanf(“%d”,&x); x=fun(x); printf(“%d\n”,x);}程序执行时,给变量x输入10,程序的输出结果是A)55B) 54C) 65D) 4540)有以下程序int fun(int x[],int n){static int sum=0,i;for(i=0;i sum+=x[i];return sum;}main(){int a[]={1,2,3,4,5},b[]={6,7,8,9},s=0;s=fun(a,5)+fun(b,4); printf(“%d\n”,s);}程序执行后的输出结果是A)45B)50C)60D)5541)有以下程序
main(){ union { char ch[2];int d;}s;s.d=0x4321;printf(“%x,%x\n”,s.ch[0],s.ch[1]);}在16位编译系统上,程序执行后的输出结果是A)21,43B)43,21C)43,00D)21,0042)有以下程序main(){ char *p[]={“3697”,”2584”};int i,j; long num=0;for(i=0;i<2;i++){j=0;while(p[i][j]!='\0'){ if((p[i][j]-‘0')%2)num=10*num+p[i][j]-‘0';j+=2;} }printf(“%d\n”num);}程序执行后的输出结果是A)35B)37C)39D)397543)执行以下程序后,test.txt文件的内容是(若文件能正常打开)#includemain(){ 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)BasicanB)BasicFortranC)BasicD)FortranBasic44)以下叙述中错误的是A)C语言源程序经编译后生成后缀为.obj的目标程序B)C语言经过编译、连接步骤之后才能形成一个真正可执行的二进制机器指令文件C)用C语言编写的程序称为源程序,它以ASCII代码形式存放在一个文本文件中D)C语言的每条可执行语句和非执行语句最终都将被转换成二进制的机器指令45)以下叙述中错误的是A)算法正确的程序最终一定会结束B)算法正确的程序可以有零个输出C)算法正确的程序可以有零个输入D)算法正确的程序对于相同的输入一定有相同的结果46)以下叙述中错误的是A)C程序必须由一个或一个以上的函数组成B)函数调用可以作为一个独立的语句存在C)若函数有返回值,必须通过return语句返回D)函数形参的值也可以传回对应的实参47)设有以下定义和语句char str[20]=”Program”,*p;p=str;则以下叙述中正确的是A)*p与str[0]中的值相等B)str与p的类型完全相同C)str数组长度和p所指向的字符串长度相等D)数组str中存放的内容和指针变量p中存放的内容相同48)以下叙述中错误的是A)C程序中的#include和#define行均不是C语句B)除逗号运算符外,赋值运算符的优先级最低C)C程序中,j++;是赋值语句D)C程序中,+、-、*、/、%号是算术运算符,可用于整型和实型数的运算49)以下叙述中正确的是A)预处理命令行必须位于C源程序的起始位置B)在C语言中,预处理命令行都以“#”开头C)每个C程序必须在开头包括预处理命令行:#includeD)C语言的预处理不能实现宏定义和条件编译的功能50)以下叙述中错误的是A)可以通过typedef增加新的类型B)可以用typedef将已存在的类型用一个新的名字来代表C)用typedef定义新的类型名后,原有类型名仍有效D)用typedef可以为各种类型起别名,但不能为变量起别名二:填空题(每空2分,共40分)
请将每一个空的正确答案写在答题卡[1]至[20]序号的横线上,答在试卷上不得分1)对长度为10的线性表进行冒泡排序,最坏情况下需要比较的次数为_______[1]________。2)在面向对象方法中,_____[2]______描述的是具有相似属性与操作的一组对象。3)在关系模型中,把数据看成是二维表,每一个二维表称为一个___[3]_____。4)程序测试分为静态分析和动态测试,其中__[4]______是指不执行程序,而只是对程序文本进行检查,通过阅读和讨论,分析和发现程序中的错误。5)数据独立性分为逻辑独立性与物理独立性,当数据的存储结构改变时,其逻辑结构可以不变,因此,基于逻辑结构的应用程序不必修改,称为_[5]______。6)若变量a,b已定义为int类型并赋值21和55,要求用printf函数以a=21,b=55的形式输出,请写出完整的输出语句__[6]____。7)以下程序用于判断a,b,c能否构成三角形,若能输出YES,若不能输出NO。当a,b,c输入三角形三条边长时,确定a,b,c能构成三角形的条件是需要同时满足三条件:a+b>c,a+c>b,b+c>a。请填空。main(){ float a,b,c;scanf(“%f%f%f”,&a,&b,&c);if(__[7]__)printf(“YES\n”);/*a,b,c能构成三角形*/else printf(“NO\n”);/*a,b,c不能构成三角形*/}8)以下程序的输出结果是__[8]_____main(){ int a[3][3]={ {1,2,9},{3,4,8},{5,6,7}},i,s=0;for(i=0;i<3;i++) s+=a[i][i]+a[i][3-i-1];printf(“%d\n”,s);}9)当运行以下程序时,输入abcd,程序的输出结果是:_[9]____。insert(char str[]){ int i;i=strlen(str);while(i>0){ str[2*i]=str[i]; str[2*i-1]='*';i--;}printf(“%s\n”,str);}main(){char str[40];scanf(“%s”,str ); insert(str);}10)以下程序的运行结果是:__[10]____fun(int t[],int n){ int i,m;if(n==1) return t[0];elseif(n>=2) {m=fun(t,n-1); return m;}}main(){ int a[]={11,4,6,3,8,2,3,5,9,2};printf(“%d\n”,fun(a,10));}11)现有两个C程序文件T18.c和myfun.c同时在TC系统目录(文件夹)下,其中T18.c文件如下:
#include#include”myfun.c”main(){ fun(); printf(“\n”); }myfun.c文件如下:void fun(){ char s[80],c; int n=0;while((c=getchar())!='\n') s[n++]=c;n--;while(n>=0) printf(“%c”,s[n--]);}当编译连接通过后,运行程序T18时,输入Thank!则输出的结果是:___[11] 。12)以下函数fun的功能是返回str所指字符串中以形参c中字符开头的后续字符串的首地址,例如:str所指字符串为Hello!, c中的字符为e,则函数返回字符串:ello!的首地址。若str所指字符串为空串或不包含c中的字符,则函数返回NULL。请填空。char *fun(char *str,char c){ int n=0;char *p=str;if(p!=NULL)while(p[n]!=c&&p[n]!='\0') n++;if(p[n]=='\0' return NULL;return (_[12]_);}13)以下程序的功能是:输出100以内(不含100)能被3整除且个位数为6的所有整数,请填空。main(){ int i,j;for(i=0;__[13]__;i++){ j=i*10+6;if(_[14]____) continue;printf(“%d ”,j);}}14)以下isprime函数的功能是判断形参a是否为素数,是素数,函数返回1,否则返回0,请填空int isprime(int a){ int i;for(i=2;i<=a/2;i++)if(a%i==0) __[15]___;__[16]___;}15)以下程序的功能是输入任意整数给n后,输出n行由大写字母A开始构成的三角形字符阵列图形,例如,输入整数5时(注意:n不得大于10),程序运行结果如下:A B C D EF G H IJ K LM NO请填空完成该程序。main(){ int i,j,n; char ch='A';scanf(“%d”,&n);if(n<11){ for(i=1;i<=n;i++){ for(j=1;j<=n-i+1;j++){ printf(“%2c”,ch);___[17]____;}【18】}}else printf(“n is too large!\n”);printf(“\n”);}16)以下程序中函数fun的功能是:构成一个如图所示的带头结点的单向链表,在结点数据域中放入了具有两个字符的字符串。函数disp的功能是显示输出该单链表中所有结点中的字符串。请填空完成函数disp。#includetypedef struct node /*链表结点结构*/{ char sub[3];Struct node *next;}Node;Node fun(char s) /*建立链表*/{ …… }void disp(Node *h){ Node *p;p=h->next;While(【19】){ printf(“%s\n”,p->sub); p=【20】;}}main(){ Node *hd;hd=fun(); disp(hd); printf(“\n”); }2006年4月二级C语言笔试试题答案一、选择题1-10 : DADBA DCDAC11-20:CCADD BBBCA21-30:CABDD CBDDD31-40:DBCBB CACAC41-50:ACADB DADBA
二、填空题1、452、类3、关系4、静态分析5、物理独立性6、printf("a=%d,b=%d",a,b)7、(a+b>c)&&(a+c>b)&&(b+c>a)8、309、a*b*c*d*10、1111、!knahT12、p+n 或 str+n13、i<=9 或 i<1014、j%3!=015、return 016、return 117、ch=ch+118、printf("\n")19、p!=NULL20、p->next