全国等考C语言2011年3月和9月真题,附答案
2011年3月全国计算机等级考试二级笔试试卷 C语言程序设计(考试时间90分钟,满分100分)一、选择题((1)—(10)、(21)—(40)每题2分,(11)—(20)每题1分,共70分)下列各题A)、B)、C)、D)四个选项中,只有一个选项是正确的。请将正确选项填涂在答题卡相应位置上,答在试卷上不得分。(1)下列关于栈叙述正确的是A)栈顶元素最先能被删除B)栈顶元素最后才能被删除C)栈底元素永远不能被删除D)以上三种说法都不对(2)下列叙述中正确的是A)有一个以上根结点的数据结构不一定是非线性结构B)只有一个根结点的数据结构不一定是线性结构C)循环链表是非线性结构D)双向链表是非线性结构(3)某二叉树共有7个结点,其中叶子结点只有1个,则该二叉树的深度为(假设根结点在第1层)A)3B)4C)6D)7(4)在软件开发中,需求分析阶段产生的主要文档是A)软件集成测试计划B)软件详细设计说明书C)用户手册D)软件需求规格说明书(5)结构化程序所要求的基本结构不包括A)顺序结构B)GOTO跳转C)选择(分支)结构D)重复(循环)结构(6)下面描述中错误的是A)系统总体结构图支持软件系统的详细设计B)软件设计是将软件需求转换为软件表示的过程C)数据结构与数据库设计是软件设计的任务之一D)PAD图是软件详细设计的表示工具(7)负责数据库中查询操作的数据库语言是A)数据定义语言 B)数据管理语言C)数据操纵语言 D)数据控制语言(8)一个教师可讲授多门课程,一门课程可由多个教师讲授。则实体教师和课程间的联系是A)1:1联系B)1:m联系C)m:1联系D)m:n联系(9)有三个关系R、S和T如下:n则由关系R和S得到关系T的操作是A)自然连接B)交C)除D)并(10)定义无符号整数类为UInt,下面可以作为类UInt实例化值的是 A)-369B)369C)0.369D)整数集合{1,2,3,4,5}(11)计算机高级语言程序的运行方法有编译执行和解释执行两种,以下叙述中正确的是A)C语言程序仅可以编译执行B)C语言程序仅可以解释执行C)C语言程序既可以编译执行又可以解释执行 D)以上说法都不对(12)以下叙述中错误的是A)C语言的可执行程序是由一系列机器指令构成的B)用C语言编写的源程序不能直接在计算机上运行C)通过编译得到的二进制目标程序需要连接才可以运行D)在没有安装C语言集成开发环境的机器上不能运行C源程序生成的.exe文件(13)以下选项中不能用作C程序合法常量的是A)1,234B)'123'C)123D)"x7G"(14)以下选项中可用作C程序合法实数的是A).1e0B)3.0e0.2 C)E9D)9.12E(15)若有定义语句:inta=3,b=2,c=1;,以下选项中错误的赋值表达式是A)a=(b=4)=3;B)a=b=c+1;C)a=(b=4)+c;D)a=1+(b=c=4);(16)有以下程序段charname[20];intnum;scanf("name=%snum=%d",name,&num);当执行上述程序段,并从键盘输入:name=Lilinum=1001<回车>后,name的值为A)Lili B)name=LiliC)Lilinum= D)name=Lilinum=1001(17)if语句的基本形式是:if(表达式)语句,以下关于“表达式”值的叙述中正确的是A)必须是逻辑值B)必须是整数值C)必须是正数D)可以是任意合法的数值(18)有以下程序#include
main(){intx=011;printf("%dn",++x);}程序运行后的输出结果是A)12B)11C)10D)9(19)有以下程序#includemain(){ints;scanf("%d",&s);while(s>0) {switch(s) {case1:printf("%d",s+5); case2:printf("%d",s+4);break; case3:printf("%d",s+3); default:printf("%d",s+1);break;n } scanf("%d",&s); }}运行时,若输入123450<回车>,则输出结果是A)6566456B)66656C)66666D)6666656(20)有以下程序段inti,n;for(i=0;i<8;i++) {n=rand()%5; switch(n) {case1: case3:printf("%dn",n);break; case2: case4:printf("%dn",n);continue; case0:exit(0); } printf("%dn",n); }以下关于程序段执行情况的叙述,正确的是A)for循环语句固定执行8次B)当产生的随机数n为4时结束循环操作C)当产生的随机数n为1和2时不做任何操作D)当产生的随机数n为0时结束程序运行(21)有以下程序#includemain(){chars[]="012xy 8s34f4w2";inti,n=0;for(i=0;s[i]!=0;i++)if(s[i]>='0'&&s[i]<='9')n++;printf("%dn",n);}程序运行后的输出结果是A)0B)3C)7D)8(22)若i和k都是int类型变量,有以下for语句for(i=0,k=-1;k=1;k++)printf("*****n");下面关于语句执行情况的叙述中正确的是A)循环体执行两次 B)循环体执行一次C)循环体一次也不执行 D)构成无限循环(23)有以下程序#includemain(){charb,c;inti;b='a';c='A';nfor(i=0;i<6;i++){if(i%2)putchar(i+b);elseputchar(i+c);}printf("n");}程序运行后的输出结果是A)ABCDEFB)AbCdEfC)aBcDeFD)abcdef(24)设有定义:doublex[10],*p=x;,以下能给数组x下标为6的元素读入数据的正确语句是A)scanf("%f",&x[6]);B)scanf("%lf",*(x+6));C)scanf("%lf",p+6);D)scanf("%lf",p[6]);(25)有以下程序(说明:字母A的ASCII码值是65)#includevoidfun(char*s){while(*s){if(*s%2)printf("%c",*s);s++;}}main(){chara[]="BYTE";fun(a);printf("n");}程序运行后的输出结果是A)BYB)BTC)YTD)YE(26)有以下程序段#includemain(){…while(getchar()!='n');…}以下叙述中正确的是A)此while语句将无限循环B)getchar()不可以出现在while语句的条件表达式中C)当执行此while语句时,只有按回车键程序才能继续执行D)当执行此while语句时,按任意键程序就能继续执行(27)有以下程序#includemain(){intx=1,y=0;if(!x)y++;elseif(x==0)if(x)y+=2;elsey+=3;printf("%dn",y);n}程序运行后的输出结果是A)3B)2C)1D)0(28)若有定义语句:chars[3][10],(*k)[3],*p;,则以下赋值语句正确的是A)p=s;B)p=k;C)p=s[0];D)k=s;(29)有以下程序#includevoidfun(char*c){while(*c){if(*c>='a'&&*c<='z')*c=*c-('a'-'A'); c++;}}main(){chars[81];gets(s);fun(s);puts(s);}当执行程序时从键盘上输入HelloBeijing<回车>,则程序的输出结果是A)hellobeijingB)HelloBeijingC)HELLOBEIJINGD)hELLOBeijing(30)以下函数的功能是:通过键盘输入数据,为数组中的所有元素赋值。#include#defineN10voidfun(intx[N]){inti=0;while(iscanf(“%d”,__________);}在程序中下划线处应填入的是A)x+iB)&x[i+1]C)x+(i++)D)&x[++i](31)有以下程序#includemain(){chara[30],b[30];scanf("%s",a);gets(b);printf("%sn%sn",a,b);}程序运行时若输入:howareyou?Iamfine<回车>则输出结果是A)howareyou?B)howIamfineareyou?areyou?IamfineC)howareyou?IamfineD)howareyou?(32)设有如下函数定义intfun(intk)n{if(k<1)return0;elseif(k==1)return1;elsereturnfun(k-1)+1;}若执行调用语句:n=fun(3);,则函数fun总共被调用的次数是A)2B)3C)4D)5(33)有以下程序#includeintfun(intx,inty){if(x!=y)return((x+y);2);elsereturn(x);}main(){inta=4,b=5,c=6;printf("%dn",fun(2*a,fun(b,c)));}程序运行后的输出结果是A)3B)6C)8D)12(34)有以下程序#includeintfun(){staticintx=1;x*=2;returnx;}main(){inti,s=1;for(i=1;i<=3;i++)s*=fun();printf("%dn",s);}程序运行后的输出结果是A)0B)10C)30D)64(35)有以下程序#include#defineS(x)4*(x)*x+1main(){intk=5,j=2;printf("%dn",S(k+j));}程序运行后的输出结果是A)197B)143C)33D)28(36)设有定义:struct{charmark[12];intnum1;doublenum2;}t1,t2;,若变量均已正确赋初值,则以下语句中错误的是A)t1=t2;B)t2.num1=t1.num1;C)t2.mark=t1.mark;D)t2.num2=t1.num2;n(37)有以下程序#includestructord{intx,y;}dt[2]={1,2,3,4};main(){structord*p=dt;printf("%d,",++(p->x));printf("%dn",++(p->y));}程序运行后的输出结果是A)1,2B)4,1C)3,4D)2,3(38)有以下程序#includestructS{inta,b;}data[2]={10,100,20,200};main(){structSp=data[1];printf("%dn",++(p.a));}程序运行后的输出结果是A)10B)11C)20D)21(39)有以下程序#includemain(){unsignedchara=8,c;c=a>>3;printf("%dn",c);}程序运行后的输出结果是A)32B)16C)1D)0(40)设fp已定义,执行语句fp=fopen("file","w");后,以下针对文本文件file操作叙述的选项中正确的是A)写操作结束后可以从头开始读B)只能写不能读C)可以在原有内容后追加写D)可以随意读和写二、填空题(每空2分,共30分) 请将每空的正确答案写在答题卡【1】至【15】序号的横线上,答在试卷上不得分。(1)有序线性表能进行二分查找的前提是该线性表必须是【1】存储的。(2)一棵二叉树的中序遍历结果为DBEAFC,前序遍历结果为ABDECF,则后序遍历结果为【2】。(3)对软件设计的最小单位(模块或程序单元)进行的测试通常称为【3】测试。(4)实体完整性约束要求关系数据库中元组的【4】属性值不能为空。(5)在关系A(S,SN,D)和关系B(D,CN,NM)中,A的主关键字是S,B的主关键字是D,则称【5】是关系A的外码。n(6)以下程序运行后的输出结果是【6】。#includemain(){inta;a=(int)((double)(3/2)+0.5+(int)1.99*2);printf("%dn",a);}(7)有以下程序#includemain(){intx;scanf("%d",&x);if(x>15)printf("%d",x-5);if(x>10)printf("%d",x);if(x>5)printf("%dn",x+5);}若程序运行时从键盘输入12<回车>,则输出结果为【7】。(8)有以下程序(说明:字符0的ASCII码值为48)#includemain(){charc1,c2;scanf("%d",&c1);c2=c1+9;printf("%c%cn",c1,c2);}若程序运行时从键盘输入48<回车>,则输出结果为【8】。(9)有以下函数voidprt(charch,intn){inti;for(i=1;i<=n;i++)printf(i%6!=0?"%c":"%cn",ch);}执行调用语句prt('*',24);后,函数共输出了【9】行*号。(10)以下程序运行后的输出结果是【10】。#includemain(){intx=10,y=20,t=0;if(x==y)t=x;x=y;y=t;printf("%d%dn",x,y);}(11)己知a所指的数组中有N个元素。函数fun的功能是,将下标k(k>0)开始的后续元素全部向前移动一个位置。请填空。voidfun(inta[N],intk){inti;nfor(i=k;i#include#includemain(){char*p;inti;p=(char*)malloc(sizeof(char)*20);strcpy(p,"welcome");for(i=6;i>=0;i--)putchar(*(p+i));printf("n");free(p);}(15)以下程序运行后的输出结果是【15】。#includemain(){FILE*fp;intx[6]={1,2,3,4,5,6},i;fp=fopen("test.dat","wb");fwrite(x,sizeof(int),3,fp);rewind(fp);fread(x,sizeof(int),3,fp);for(i=0;i<6;i++)printf("%d",x[i]);printf("n");fclose(fp);}n20011年3月全国计算机等级考试二级笔试试卷参考答案(C语言)一、选择题(1)A(2)B(3)D(4)D(5)B(6)A(7)C(8)D(9)C(10)B(11)A(12)D(13)A(14)A(15)A(16)A(17)D(18)C(19)A(20)D(21)B(22)D(23)B(24)C(25)D(26)C(27)D(28)C(29)C(30)C(31)B(32)B(33)B(34)D(35)B(36)C(37)D(38)D(39)C(40)B二、填空(1)顺序(2)DEBFCA(3)单元(4)主键(5)D(6)3(7)1217(8)09(9)4(10)200(11)i-1(12)doubleavg(doublea,doubleb)(13)13715(14)emoclew(15)123456n2011年9月计算机等级考试二级C语言笔试答案 一、选择题: (1)D、(2)C、(3)B、(4)A、(5)C (6)D、(7)C、(8)D、(9)B、(10)A (11)C、(12)C、(13)D、(14)C、(15)B (16)C、(17)B、(18)C、(19)D、(20)A (21)B、(22)B、(23)A、(24)A、(25)D (26)C、(27)D、(28)B、(29)B、(30)D (31)D、(32)C、(33)A、(34)D、(35)A (36)A、(37)B、(38)D、(39)A、(40)C 二、填空题 【1】线性结构 【2】n 【3】结构化 【4】数据库管理系统 【5】关系 【6】printf(“****a=%d,b=%d****”,a,b) 【7】1 【8】34 【9】14 【10】AFK 【11】211 【12】213 【13】3 【14】i+1 【15】1n2011年9月全国计算机等级考试二级笔试试卷 C语言程序设计 (考试时间90分钟,满分100分)一、选择题((1)—(10)、(21)—(40)每题2分,(11)—(20)每题1分,共70分)下列各题A)、B)、C)、D)四个选项中,只有一个选项是正确的。请将正确选项填涂在答题卡相应位置上,答在试卷上不得分。(1)下列叙述中正确的是A)算法就是程序 B)设计算法时只需考虑数据结构的设计C)设计算法时只需考虑结果的可靠性 D)以上三种说法都不对(2)下列关于线性链表叙述中,正确的是A)各数据结点的存储空间可以不连续,但它们的存储顺序与逻辑顺序必须一致B)各数据结点的存储顺序与逻辑顺序可以不一致,但它们的存储空间必须连续C)进入插入与删除时,不需要移动表中的元素D)以上三种说法都不对(3)下列关于二叉树的叙述中,正确的是A)叶子结点总是比度为2的结点少一个 B)叶子结点总是比度为2的结点多一个C)叶子结点数是度为的结点数的两倍 D)度为2的结点数是度为1的结点数的两倍(4)软件按功能分为应用软件、系统软件和支撑软件(或工具软件)。下现属于应用软件的是A)学生成绩管理系统 B)C语言编译程序 C)UNIX操作系统 D)数据库管理系统(5)某系统总结构图如下图所示: n该系统总体结构图的深度是A)7 B)6 C)3 D)2(6)程序调试的任务是A)设计测试用例 B)验证程序的正确性 C)发现程序中的错误 D)诊断和改正程序中的错误(7)下列关于数据库设计的叙述中,正确是的A)在需求分析阶段建立数据字典 B)在概念设计阶段建立数据字典C)在逻辑设计阶段建立数据字典 D)在物理设计阶段建立数据字典(8)数据库系统的三级模式不包括A)概念模式 B)内模式 C)外模式 D)数据模式 (9)有三个关系R、S和T如下:则由关系R和S得到关系T的操作是A)自然连接 B)差 C)交 D)并(10)下列选项中属于面向对象设计方法主要特征的是A)继承 B)自顶向下 C)模块化 D)逐步求精(11)以下叙述中错误的是A)C语言编写的函数源程序,其文件名后缀可以是.CB)C语言编写的函数都可以作为一个独立的源程序文件C)C语言编写的每个函数都可以进行独立的编译并执行D)一个C语言程序只有一个主函数(12)以下选项中关于程序模块化的叙述错误的是A)把程序分成若干相对独立的模块,可便于编码和调试B)把程序分成若干相对独立、功能单一的模块,可便于重复使用这些模块C)可采用自底向上、逐步细化的设计方法把若干独立模块组装成所要求的程序D)可采用自顶向下、逐步细化的设计方法把若干独立模块组装成所要求的程序n(13)以下选项中关于C语言常量的叙述错误的是A)所谓常量,是指在程序运行过程中,其值不能被改变的量B)常量分为整型常量、实型常量、字符常量和字符串常量C)常量可分为数值常量和非数值常量D)经常被使用的变量可以定义成常量(14)若有定义语句:int a=10; double b=3.14; ,则表达式'A'+a+b的值的类型是A)char B)int C)double D)float(15)若有定义语句:int x=12,y=8,z; ,在其后执行语句z=0.9+x/y;,则z的值为A)1.9 B)1 C)2 D)2.4(16)若有定义:int a,b;,通过语scanf("%d;%d",&a,&b);,能把整数3赋给变量a,5赋给变量b的输入数据是A)3 5 B)3,5 C)3;5 D)35(17)若有定义语句:int k1=10,k2=20;,执行表达式(k1=k1>k2)&&(k2=k2>k1)后,k1和k2的值分别为A)0和1 B)0和20 C)10和1 D)10和20(18)有以下程序#include main(){ int a=1,b=0; if(--a) b++; else if(a==0) b+=2; else b+=3; printf("%dn",b);}程序运行后的输出结果是A)0 B)1 C)2 D)3(19)下列条件语句中,输出结果与其他语句不同的是A)if(a) printf("%dn",x); else printf("%dn",y);B)if(a==0) printf("%dn",y); else printf("%dn",x);C)if(a!=0) printf("%dn",x); else printf("%dn",y);D)if(a==0) printf("%dn",x); else printf("%dn",y);(20)有以下程序#include main()n{ int a=7; while(a--); printf("%dn",a);}程序运行后的输出结果是A)-1 B)0 C)1 D)7(21)以下不能输出字符A的语句是(注:字符A的ASCII码值为65,字符a的ASCII码值为97)A)printf("%cn",'a'-32); B)printf("%dn",'A')C)printf("%cn",65); D)printf("%cn",'B'-1);(22)有以下程序(注:字符a的ASCII码值为97)#include main(){ char *s={"abc"}; do { printf("%d",*s%10);++s; } while(*s);}程序运行后的输入结果是A)abc B)789 C)7890 D)979899(23)若有定义语句:double a,*p=&a; 以下叙述中错误的是A)定义语句中的 * 号是一个间址运算符B)定义语句中的 * 号只是一个说明符C)定义语句中的p只能存放double类型变量的地址D)定义语句中,*p=&a把变量a的地址作为初值赋给指针变量p(24)有以下程序#include double f(double x);main(){ double a=0; int i; for(i=0;i<30;i+=10) a+=f((double)i); printf("%5.0fn",a);}double f(double x){ return x*x+1; }程序运行后的输出结果是A)503 B)401 C)500 D)1404n(25)若有定义语句:int year=2009,*p=&year;,以下不能使变量year中的值增至2010的语句是A)*p+=1; B)(*p)++; C)++(*p); D)*p++;(26)以下定义数组的语句中错误的是A)int num[]={1,2,3,4,5,6} B)int num[][3]={{1,2},3,4,5,6};C)int num[2][4]={{1,2},{3,4},{5,6}}; D)int num[][4]={1,2,3,4,5,6};(27)有以下下程序#include void fun(int *p){ printf("%dn",p[5]); }main(){ int a[10]={1,2,3,4,5,6,7,8,9,10}; fun(&a[3]);}程序运行后的输出结果是A)5 B)6 C)8 D)9(28)有以下程序#include #define N 4void fun(int a[][N],int b[]){ int i; for(i=0;i