全国计算机等级《二级C语言程序设计》终极押密卷4整理版.docx
- 文档编号:30678326
- 上传时间:2023-08-19
- 格式:DOCX
- 页数:18
- 大小:40.87KB
全国计算机等级《二级C语言程序设计》终极押密卷4整理版.docx
《全国计算机等级《二级C语言程序设计》终极押密卷4整理版.docx》由会员分享,可在线阅读,更多相关《全国计算机等级《二级C语言程序设计》终极押密卷4整理版.docx(18页珍藏版)》请在冰豆网上搜索。
全国计算机等级《二级C语言程序设计》终极押密卷4整理版
2013年9月全国计算机等级《二级C语言程序设计》终极押密卷(4)
一、选择题(每小题1分,共40分)
1设变量已正确定义,则以下能正确计算f=n!
的程序是(D )。
A.f=0;for(i=1;i<=n;i++)f*=i;B.f=1;for(i=1;i C.f=1;for(i=n;i>1;i++)f*=i;D.f=1;for(i=n;i>=2;i--)f*=i; 解析: 由n! 的数字定义可知n! =n*(n-1)*(n-2)*…*1。 在选项A中,由于f的初值为0,在for循环语句中,f依次乘以l,2,3,…,n,最后计算得到f=n! =0,所以选项A不正确。 在选项B中,f的初值为1,在for循环语句中,f依次乘以l,2,3,…,(n-1),最后计算得到f=(n-1)! ,所以选项B不正确。 在选项C中,f的初值为l,在for循环语句中,f依次乘以n,n+1,n+2,……,所以选项C不正确。 在选项D中,f的初值为l,在for循环语句中,f依次乘以n,n-1,n-2,…,2,最后计算得到f=n! ,所以选项D正确。 2有以下程序: #include voidfun(int*s) {staticinti=0; do{s[J]=s[J]+s[j+I];}while(++j<2); } main( ) {intk.a[l0]={1,2,3,4,5}; for(k=1;k<3;k++)fun(a); for(k=0;k<5;k++)pfintf("%d",a[k]); printf("\n"); } 程序运行后的输出结果是(D )。 A.12345B.23445C.34756D.35745 解析: 本题考查静态变量,静态变量有储存已经操作过的值,所以fun(a)s[O]=3,s[1]=5,s[2]=7,所以答案选择D。 3有下列程序: 、 fun(intX,inty){return(x+y);) main( ) {inta=1,b=2,c=3,sum; sum=fun((a++,b++,a+b),c++); printf("%d\n",sum); } 执行后的输出结果是(C )。 A.6B.7C.8D.9 解析: 函数fun(intx,inty)的功能是返回x+Y的值。 在主函数中,变量a,b,c的初始值分别为1,2,3。 因此逗号表达式“a++,b++,a+b”的值等于5,表达式c++的值为3,调用于函数的表达式为“fun(5,3);”,其返回值等于8。 4现有以下结构体说明和变量定义,如图所示,指针P、q、r分别指定一个链表中连续的3个结点。 structnode {hardata; structnode*next;)*P,*q,*r; 现要将q和r所指结点交换前后位置,同时要保持链表的结构,下列不能完成此操作的语句是( D )。 A.q-: >next=r->next;p--: >next=r;rm: >next=q; B.q-: >next=r;q->next=r->next;r->next=q; C.q-: >next=r->next;r->next=q;p->next=r; D.q-: >next=q;p->next=r;q->next=r->next; 解析: 由题目中线性链表的定义可知,要将q和r所指的结点交换前后位置,只要使q指向r的后一个结点,P指向r结点,r指向q结点即可。 而在选项D中,r->next=q,这时r指向的节点为q;p->next=r,这时P指向的节点为r;q->next: r->next,因为r节点已经指向q,所以执行这个语句后q又指向q,所以选项D不正确。 5有以下程序: #include main( ) {char*s="[2]34";intk=0,a=0; whil(s[k+1]! ='\0') {k++; if(k%2=o){a=a+(s[k]-'0'+1);continue;} a=a+(s[k]-'0'); printf("k=%da=%d\n",k,a); } 程序运行后的输出结果是(C )。 A.k=6a=11B.k=3a=14C.k=4a=12D.k=5a=15 解析: 输出结果: k=1a=2k=2a=4k=3a=7k=4a=12 6若a是数值类型,则逻辑表达式(a==1)II(a! =1)的值是(A )。 A.1B.0C.2D.不知道a的值,不能确定 解析: 由于a==l和a! =1两者互斥,即总有一个为真,因此二者的或也必定为真。 7阅读以下程序: #include main( ) {intcase;floatprintF; printf("请输人2个数: "); scanf("%d%fl"&case,&printF); printf("%dofof\n",case,printF); } 该程序在编译时产生错误,其出错原因是(A )。 A.定义语句出错,case是关键字,不能用做用户自定义标识符 B.定义语句出错,printF不能用做用户自定义标识符 C.定义语句无错,scanf不能作为输入函数使用 D.定义语句无错,printf不能输出case的值 解析: 本题中定义了整形变量case,但case是关键字,关键字不能用做标识符。 单精度printF不是关键字,因为标识符区分大小写。 所以A不正确。 8有以下程序: #include main( ) {inta=1,b=2; for(;a<8;a++){b+=a;a+=2;) printf("%d,%d\n",a,b); } 程序运行后的输出结果是(D )。 A.9,18B.8,11C.7,11D.10,14 解析: 第一次执行循环前,a=1,满足a<8,执行循环后,b=3,a=3。 执行完a++操作后,a=4。 由于a<8,执行第二次循环后,b=7,a=6,执行完a++操作后,a=7。 由于a<8,执行第三次循环后,b=14,a=9,执行完a++操作后a=10。 此时不满足a<8,跳出循环。 9有以下程序: #include main( ) {inta,b,k,m,*pl,*p2; k=1,m=8; p1=&k,p2=&m; a=/*pl-m;b=*p1+*p2+6; printf("%d",a);printf("%d\n",b); } 编译时编译器提示错误信息,你认为出错的语句是(A )。 A.a=/*pl-m;B.b=*p1+*p2+6;C.k=1,m=8;D.pl=&k,p2-&m; 解析: 本题考查指针,pl=&k表示P指向k的地址,则*p=k,依次类推,在对指针进行赋值时没有错误。 a=/*p+m赋值,在c语言中"/*"表示的注释,所以答案选择A。 10在学生管理的关系数据库中,存取一个学生信息的数据单位是(D )。 A.文件B.数据库C.字段D.记录 解析: 一个数据库由一个文件或文件集合组成。 这些文件中的信息可分解成一个个记录。 11下列叙述中正确的是(B )。 A.循环队列是队列的一种链式存储结构 B.循环队列是队列的一种顺序存储结构 C.循环队列是非线性结构 D.循环队列是一种逻辑结构 解析: 循环队列是线性结构,所以C选项错误,存储结构是数据在计算机中的表示,循环队列在计算机内是顺序存储结构,所以答案选择B。 12以下关于return语句的叙述中正确的是( B )。 A.一个自定义函数中必须有一条return语句 B.一个白定义函数中可以根据不同情况设置多条return语句 C.定义成void类型的函数中可以有带返回值的return语句 D.没有return语句的自定义函数在执行结束时不能返回到调用处 解析: return语句又称为返回语句。 该语句的格式如下: “return;”和“return(<表达式>);”。 其中,return是关键字。 该语句有两种格式: 不带返回值格式和带返回值格式。 该语句用在被调用函数中,在被调用函数中执行到该语句时,将结束对被调用函数的执行,并把控制权返回给调用函数,继续执行调用函数后边的语句。 在带有返回值的情况下,将return语句所带的表达武的值返回给调用函数,作为被调用函数的值。 在被调用函数中,可以用return语句,也可以不用return语句。 如果要求被调用函数有返回值,则一定要用return语句,采用return(<表达式>);格式。 如果被调用函数不需要返回值,并且当被调用函数的所有语句执行完后进行返回,则被调用函数可以不用return语句。 13有三个关系R,S和T如下: 其中关系T由关系R和S通过某种操作得到,该操作为(D ) A.选择B.投影C.交D.并 解析: 关系的并运算是指由结构相同的两个关系合并,形成一个新的关系,其中包含两个关系中的所有元素。 由题可以看出,T是R和S的并运算得到的。 14设有以下程序段: structMP3 {charname[20]; charcolor; floatprice; }std,*ptr; ptr=&std: 若要引用结构体变量std中的color成员,写法错误的是(A )。 A.std.colorB.ptr->colorC.std->colorD.(*ptr)color 解析: 本题中要引用结构体变量std中的color,要使用指针,而std.color不是一个指针类型,所以答案选择A 15有以下程序: #include voidexch(intt[]) {t[0]=t[5];} main( ) {intx[10]={1,2,3,4,5,6,7,8,9,10},i=0; while(i<=4){exch(&x[i]);i++;} for(i=0;i<5;i++)printf("%dl"x[i]); printf("\n"); } 程序运行后输出的结果是(D )。 A.246810B.13579C.12345D.678910 解析: 本题中exch函数是用数组中的第6个元素对第1个元素进行赋值,所以数组的值应该为678910。 16表达式a+=a-=a=9的值是(D)。 A.9B.-9C.18D.0 解析: +=、-=、=等符号优先级相同结合性是由右至左,所以选D。 17数据库管理系统是(B )。 A.操作系统的一部B.在操作系统支持下的系统软件 C.一种编译系统D.一种操作系统 解析: 数据库系统属于系统软件的范畴 18以下选项中叙述错误的是(A )。 A.C程序函数中定义的赋有初值的静态变量,每调用一次函数,赋一次初值 B.在同一函数中,各复合语句内可以定义变量,其作用域仅限本复合语句内 C.C程序函数中定义的自动变量,系统不自动赋确定的初值 D.C程序函数的性能不可以说明为static型变量 解析: 静态变量不是每调用一次就赋一次初值,而是将需要定义许多相同的具有相同属性的值时,使用静态变量来节省空间,所以A选项错误 19有以下程序段: inti,n; for(i=0;i<8;i++) {n=rand( )%5; switch(n) {casel: case3: printf("%d\n",n);break; case2: case4: print? ("%d\n",n);continue; case( ): exit(0); } printf("%d\n",n); } 以下关于程序段执行情况的叙述,正确的是( A )。 A.for循环语句固定执行8次 B.当产生的随机数n为4时结束循环操作 C.当产生的随机数n为1和2时不做任何操作 D.当产生的随机数n为0时结束程序运行 解析: 程序中的if循环是固定地执行8次,属于计数器,程序是从中随机抽取一个数,然后对5进行求余再输出,共抽取8个数。 所以答案为A。 20有以下程序: #include main( ) {FILE*fp;charstr[10]; fp=fopen("myfile,dat",""); {puts("abe",ip);fclose(fp); fp=fopen("myfile.dat","a*"); fprintf(fp,"%d",28); rewind(fp); fscanf(fp,"%S",str);puts(str); fclose(fp); } 程序运行后的输出结果是(C )。 A.abcB.28cC.abc28D.内类型不一致而出错 解析: 本题考查文件的操作,首先打开文件,进行写操作,把“abc”写入“myfile”文件,再打开“myfile.data"文件,输入28,在键盘上接收字符,输出并关闭文件。 本题结果为abc28 21以下程序的输出结果是(A )。 main( ) {inta[3][3]={{1,2},{3,4),{5,6}},i,j,s=0; for(i=1;i<3;i++) for(j=0;j<=i;j++)s+=a[i][j]; printf("%d\n",s); } A.18B.19C.20D.21 解析: 循环的作用是求行下标从l到2列下标从0到i的元素之和,即s=a[1][0]+a[1][1]+a[2][o]+a[2][1]+a[2][2]=3+4+5+6+0一18。 22下列选项中,能够满足“若字符串sl等于字符串s2,则执行ST”要求的是(A)。 A.if(stremp(s2,s1)==0)ST;B.if(s1==s2)ST;C.if(strcpy(sl,s2)==l)ST;D.if(sl,s2==O)ST; 解析: strcmp(char*,char*),函数strcmp用于比较两个字符串的长度,长者为大,若字符个数也一样,则从左至右依次比较相同位上的字符,字符大小按ASCIl表值计算,直到最后一个字符,若还相同,则两个字符串相等,返回值0。 选项A中if(strcmp(s2,sl)==0)ST,若s2等于sl,则返回值0,0等于0,所以逻辑表达式strcmp(s2,sl)==0为真,执行ST。 23下列关于数据库设计的叙述中,正确的是(A )。 A.在需求分析阶段建立数据字典B.在概念设计阶段建立数据字典 C.在逻辑设计阶段建立数据字典D.在物理设计阶段建立数据字典 解析: 在数据库设计时必须在需求分析阶段建立数据字典,确定数据库中所需要的数据。 24有两个关系R和T如下: 则由关系R得到关系T的操作是(D )。 A.选择B.投影C.交D.并 解析: 选择是建立一个含有与原始关系相同列数的新表,但是行只包括那些满足某些特定标准的原始关系行 25针对简单程序设计,以下叙述的实施步骤顺序正确的是(A )。 A.确定算法和数据结构、编码、调试、整理文档 B.编码、确定算法和数据结构、调试、整理文档 C.整理文档、确定算法和数据结构、编码、调试 D.确定算法和数据结构、调试、编码、整理文档 解析: C语言中程序中的步骤实现为: 先确定程序中的算法和数据结构,然后进行程序的编码,再进行对程序的调试,最后进行文档的整理和记录。 使用这种步骤可以方便程序的编写以及在完成后提高代码的重用性 26以下叙述中错误的是( A )。 A.函数的返回值类型不能是结构体类型,只能是简单类型 B.函数可以返回指向结构体变量的指针 C.可以通过指向结构体变量的指针访问所指结构体变量的任何成员 D.只要类型相同,结构体变量之间可以整体赋值 解析: 函数返回值类型可以是简单类型和结构体类型。 27若有定义: “inta[2][3];”,则对a数组的第i行第J列元素的正确引用为( A )。 A.*(*(a+i)+j)B.(a+i)[j]C.*(a+i+j)D.*(a+i)+j 解析: 通过地址来引用数组元素的方法有下列5种: (1)a[i][j]; (2)*(a[i]+j);(3)*(*(a+j)+j);(4)*(a[i][j]);(5)(&a[o][0]+3*i+j)。 故A正确。 28软件设计包括软件的结构、数据接口和过程设计,其中软件的过程设计是指(B )。 A.模块间的关系B.系统结构部件转换成软件的过程描述 C.软件层次结构D.软件开发过程 解析: 软件的过程设计是指系统结构部件转换成软件的过程描述 29设有定义: “char*c;”,以下选项中能够使字符型指针c正确指向一个字符串的(A )。 A.charstr[]="string";c=str;B.scanf(%s,c): C.c=getchar( );D.*c="strin9"; 解析: 选项B是从键盘上输入字符串,选项C是接收字符,选项D不正确 30以下选项中不能用做C程序合法常量的是(A )。 A.1,234B.‘\123’C.123D.“\x7G” 解析: A选项中逗号是一个操作符 31有以下程序: #include intfun(intX,inty) {if(X! =y)return((x+y)/2); elsereturn(x); } main( ) {inta=4,b=5,c=6; printf("%d/n",fun(2*a,fun(b,c))); } 程序运行后的输入结果是(B )。 A.3B.6C.8D.12 解析: 此题考查的是函数fun(),fun(b,c)=5,然后fun(2*a,5)=fun(8,5)=6。 32有以下程序: #include #include main( ) {charstr[][20][{"One*World","One*Dream! "},*p=str[1]; prinft("%d,",strlen(p));printf("%s\n",p); } 程序运行后的输出结果是(C )。 A.9,0ne*WorldB.9,0ne*Dream! C.10,One*Dream! D.10,Ome*World 解析: 本题输出两个结果,第一个是求字符串的长度。 第二个是输出的字符串,数组的下标是从0开始的,所以当str取1的时候,应为“One*Dream! ” 33有以下函数 intfun(char*X,char*y) {intn=0; while((*x===*y)&&*x! ='\O'){x++;y++;n++;} returnn; } 函数的功能是(B )。 A.查找X和y所指字符串中是否有'\o' B.统计x和Y所指字符串中最前面连续相同的字符个数 C.将Y所指字符串赋给X所指定存储空间 D.统计X和Y所指字符串中相同的字符个数 解析: 由题中while(*x==*y&&*x! ='\n')可知此函数是统计x和y所指向的字符串中最前面的联系相同的字符的个数。 34if语句基本形式是: if(表达式)语句,以下关于“表达式”值的叙述中正确的是(D )。 A.必须是逻辑值B.必须是整数值C.必须是正数D.可以是任意合法的数值 解析: 考查if循环语句。 if(表达式),其中表达式是一个条件,条件中可以是任意的合法的数值。 35软件需求规格说明书的作用不包括( B )。 A.软件设计的依据B.软件可行性研究的依据 C.软件验收的依据D.用户与开发人员对软件要做什么的共同理解 解析: 《软件可行性分析报告》是软件可行性研究的依据。 36下列关于栈的叙述中,正确的是( B )。 A.栈底元素一定是最后入栈的元素B.栈操作遵循先进后出的原则 C.栈顶元素一定是最先入栈的元素D.以上三种说法都不对 解析: 栈是先进后出,因此,栈底元素是先入栈的元素,栈顶元素是后入栈的元素。 37设有如下定义语句: intm[]={2,4,6,8,10},*k=m; 以下选项中,表达式的值为6的是(A )。 A.*(k+2)B.k+2C.*k+2D.*k+=2 解析: 本题考查数组和指针,*k指针是指向rn数组的首地址,所以要使表达武的值为6,只需要指针指向第m[2],所以答案选择A。 38以下选项中与“if(a==l)a=b;elsea++;”语句功能不同的switch语句是(B )。 A.switch(a) {casel: a=b;break; default: a++; } B.switch(a==l) {case0: a=b;break; casel: a++; } C.switch(a) {default: a++;break; casel: a=b; } D.switch(a==l) {casel: a=b;break; case0: a++; } 解析: 题中当a的值为l时,关系表达式a==l的值为真,即1,因此程序将跳转到easel执行a++操作,与题干程序刚好相反。 39有以下程序段: charname[20】;intnum; scanf("name=%Snum=%d",name,&num); 当执行上述程序段,并从键盘输入: name=Lilimum=1001<回车>后,name的值为( A )。 A.LiliB.name=LiliC.Lilinum=D.name=Lilinum=1001 解析: 考查简单的C程序。 由题可知,程序中输入name的值为Lili,所以输出的必定是Lili,答案选择A。 40下列描述错误的是( C )。 A.继承分为多重继承和单继承 B.对象之间的通信靠传递消息来实现 C.在外面看不到对象的内部特征是基于对象的“模块独立性好”这个特征 D.类是具有共同属性、共同方法的对象的集合 解析: 对象的封装性是指从外面看只能看到对象的外部特性,而对象的内部,其处理能力的实行和内部状态对外是不可见的,是隐蔽的。 二、基本操作题(共18分) 41请补充函数proc(),函数proc()的功能是求7的阶乘。 注意: 部分源程序给出如下。 请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的横线上填入所编写的若干表达式或语句。 试题程序: #include longproc(intn) { if(【1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 二级C语言程序设计 全国计算机 等级 二级 语言程序设计 终极 押密卷 整理