国家二级C语言(数组)机试模拟试卷5(题后含答案及解析)_第1页
国家二级C语言(数组)机试模拟试卷5(题后含答案及解析)_第2页
国家二级C语言(数组)机试模拟试卷5(题后含答案及解析)_第3页
国家二级C语言(数组)机试模拟试卷5(题后含答案及解析)_第4页
国家二级C语言(数组)机试模拟试卷5(题后含答案及解析)_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

国家二级C语言(数组)机试模拟试卷5(题后含答案及解析)题型有:1.选择题选择题1.若有定义:intx[10],*pt=x;,则对x数组元素的正确引用是()。A.pt+3B.*&x[10]C.*(pt+10)D.*(x+3)正确答案:D解析:没有A选项的引用形式。*与&放在一起作用抵消,但x[10]下标10超出了数组下标范围,所以B选项错误。最大只能引用到x[9],而*(pt+i)表示引用指针pt所指元素后的第i个元素,所以C选项错误,最大只能为*(pt+9)。D选项正确。知识模块:数组2.有以下程序:#inelude<stdio.h>main(){inti,s=0,t[]={1,2,3,4,5,6,7,8,9};for(i=0;i<9;i+=2)s+=*(t+i);prinff(“%d\n”,s);}程序的运行结果是()。A.20B.25C.45D.36正确答案:B解析:统计1~9这9个数中的奇数和,此题考查指向数组的指针。C语言规定数组名代表数组的首地址,也就是第一个元素的地址,因此*(t+i)代表数组的第i+1个元素。程序的运行结果是1+3+5+7+9=25。知识模块:数组3.有以下程序:#include<stdio.h>main(){ints[12]={1,2,3,4,4,3,2,1,1,1,2,3},c[5]={0},i;for(i=0;i<12;i++)e[s[i]]++;for(i=1;i<5;i++)prinff(“%d”,c[i]);printf(“\n”);}程序的运行结果是()。A.2344B.4332C.1234D.1123正确答案:B解析:在for(i=0;i<12;i++)c[s[i]]++中,数组元素s[i]的值作为数组c的下标,当退出循环时,数组c的4个元素的值分别为4、3、3、2,因此B选项正确。知识模块:数组4.下列定义数组的语句中正确的是()。A.#defineN10intx[N];B.intN=10;intx[N];C.intx[0..10];D.intx[];正确答案:A解析:数组说明的一般形式为:类型说明符数组名[常量表达式]。B选项中N是变量,不能用变量定义数组长度。C选项中数组长度是一串非法的数字。定义数组时必须为其指明长度,D选项中的数组长度为空,所以非法。知识模块:数组5.下列选项中能正确定义数组的语句是()。A.intnum[0…2008];intnum[N];B.intnum[];intnum[N];C.intN=2008;D.#defineN2008正确答案:D解析:C语言不允许定义动态数组,定义数组的大小必须为常量表达式。A选项错误,C语言中的数组没有此类型的定义方法;B选项错误,定义数组应指明数组大小,如果不指明数组大小,需要给定初值的个数;C选项错误,N为变量,不能用来定义数组大小。D选项正确。知识模块:数组6.若要求定义具有10个int型元素的一维数组a,则以下定义语句中错误的是()。A.#definen5inta[2*n];B.intn=10,a[n];inta[N];C.inta[5+5];D.#defineN10正确答案:B解析:一维数组的定义方式为:类型说明符数组名[常量表达式];注意定义数组时,元素个数不能是变量,因此应该选择B选项。知识模块:数组7.设有定义:doublea[10],*s=a;,以下能够代表数组元素a[3]的是()。A.(*s)[3]B.*(s+3)C.*s[3]D.*s+3正确答案:B解析:题中,首先定义了double型的数组a,并将数组首地址赋给指针s。s[3]能够表示a[3],故选项A、C不能表示a[3];选项D的*s+3=a[0]+3。故本题答案为B选项。知识模块:数组8.有以下程序:#include<stdio.h>main(){inti,t[][3]={9,8,7,6,5,4,3,2,1};for(i=0;i<3;i++)printf(“%d”,t[2-i][i]);}程序的运行结果是()。A.357B.753C.369D.751正确答案:A解析:二维数组t[][3]实际上指t[3][3]={{9,8,7},{6,5,4},{3,2,1}},通过循环语句for语句可以得到i=0,t[2][0]=3、i=1,t[1][1]=5、i=2,t[0][2]=7、i=3时循环结束,即t[2][0]=3、t[1][1]=5、t[0][2]=7,因此A选项正确。知识模块:数组9.下列定义语句中错误的是()。A.intx[4][3]={{1,2,3},{1,2,3},{1,2,3},{1,2,3}};B.intx[4][]={{1,2,3},{1,2,3},{1,2,3},{1,2,3}};C.intx[][3]={{0},{l},{1,2,3}};D.intx[][3]={1,2,3,4};正确答案:B解析:二维数组定义的一般形式是:类型说明符数组名[常量表达式1][常量表达式2]。其中常量表达式1表示第一维下标的长度,常量表达式2衷示第二维下标的长度。如对二维数组的全部元素赋初值,则第一维的长度可以不给出。但如果对x[4][]赋值,只确定行数,丽不确定列数,就无法正确赋值。因此B选项正确。知识模块:数组10.下列定义数组的语句中错误的是()。A.intx[2][3]={1,2,3,4,5,6};B.intx[][3]={0};C.intx[][3]={{1,2,3},{4,5,6}};D.intx[2][3]={{1,2},{3,4},{5,6}};正确答案:D解析:D选项中x[2][3]定义的是一个2行3列的二维数组,而在给数组元素赋值时却赋成了3行,所以错误。知识模块:数组11.下列定义数组的语句中错误的是()。A.intnum[][3]={{1,2},3,4,5,6};B.intnum[2][4]={{1,2},{3,4},{5,6}};C.intnum[]={1,2,3,4,5,6};D.intnum[][4]={1,2,3,4,5,6};正确答案:B解析:B选项中定义的数组为2行4列,而赋值时赋成了3行,所以出错。知识模块:数组12.若有定义语句:chars[10]=“1234567\0\0”;,则strlen(s)的值是()。A.7B.8C.9D.10正确答案:A解析:strlen()函数是计算字符串长度时,遇到结束标识为止,且长度不包括结束标识。本题中的字符串从第一个字符开始,遇到第一个结束标识’\0’为止,注意’\0’不占字符串长度,所以字符串长度为7,因此A选项正确。知识模块:数组13.有以下程序:#include<stdio.h>#include<string.h>main(){charp[20]={‘a’,’b’,’c’,’d’},q[]=“abc”,r[]=“abcde”;strcat(p,r);strcpy(p+strlen(q),q);prinff(“%d\n”,strlen(p));}程序的运行结果是()。A.11B.9C.6D.7正确答案:C解析:strcpy:字符串复制函数;strlen:求字符串长度函数(注意:不包含字符串结束标记字符’\0’);strcat:字符串连接函数。执行完语句strcat(p,r);后,p数组中存储的元素为a,b,c,d,a,b,c,d,e;执行语句strcpy(p+strlen(q),q);得到的结果是将q所指向的字符串复制至p+strlen(q)开始的存储位置,因为strlen的值为3,即p+3开始存储q中的元素,所以执行完strcpy(p+strlen(q),q)语句后,字符数组p[20]的存储元素为a,b,c,知识模块:数组14.有以下程序(strcat函数用于连接两个字符串):#include<stdio.h>#include<string.h>main(){chara[20]=“ABCD\0EFG\0”,b[]=“LIK”;strcat(a,b);prinff(“%s\n”,a);}程序的运行结果是()。A.IJKB.ABCDE\0FG\OIJKC.ABCDIJKD.EFGIJK正确答案:C解析:字符数组a中包含两个’\0’,遇到第一个’\0’时就表示字符串a结束。字符串处理函数strcat(字符数组a,字符数组b),功能是连接两个字符数组中的字符串,把字符串b连接到字符串a的后面,结果放在字符数组a中。连接时将字符串a后的’\0’取消,只在新串最后保留一个’\0’。本题相当于将”AB-CD”和”IJK”.连接,因此C选项正确。知识模块:数组15.有以下程序:charname[20];intnum;scanf(“name=%snum=%d”,name,&num);当执行上述程序,并从键盘输入:name=Lilinun=1001<回车>后,name的值为()。A.name=Lilinum=1001B.name=LiliC.Lilinum=D.Lili正确答案:D解析:在输入格式控制“name=%snum=%d”中,普通字符“name=num=”在输入时要原样输入,而格式控制符%s和%d对应各自的输入项,将输入的数据赋给相应的输入项。本题中输入“name=Lilinum=1001<回车>”后,将字符串Lili赋给字符数组name,整数1001赋给变量num,因此D选项正确。知识模块:数组16.有以下程序:#include<stdio.h>main(){charch[]=“uvwxyz”,*pc;pc=ch;prinff(“%c\n”,*(pc+5));}程序的运行结果是()。A.zB.0C.元素ch[5]的地址D.字符y的地址正确答案:A解析:语句pc=ch;使得指针变量指向字符数组ch的首地址,即指向字符’u’,则pc+5指向的是字符向后移动5位,指向字符’z’,所以输出的*pc+5的值即为’z’,因此A选项正确。知识模块:数组17.有以下程序:#include<stdio.h>main(){chars[]={“012xy”};inti,n=0;for(i=0;s[i]!=0;i++)if(s[i]>=‘a’&&s[i]<=‘z’)n++;prinff(“%d\n”,n);}程序运行结果是()。A.0B.2C.3D.5正确答案:B解析:程序首先给字符数组s[]赋值为”012xy”,for循环语句的功能是遍历字符串,通过if条件语句对字符串中的小写字母进行计数,字符串中小写字母为2个,即n=2,因此B选项正确。知识模块:数组18.若有以下定义和语句:#include<stdio.h>chars1[10]=“abcd!”,*s2=“\n123\\”;prinff(“%d%d\n”,strlen(s1),strlen(s2));程序的运行结果是()。A.107B.105C.55D.58正确答案:C解析:strlen函数返回字符串的长度,求字符串长度时,遇到结束标志’\0’为止,但是长度不包括结束标识。字符数组s1的后5个元素没有赋值,都为’\0’,即”abcd!”后为’\0’,所以strlen(s1)的值为5。字符指针s2所指向的字符串中,\n为转义字符换行符,表示1个字符,\\也为转义字符,代表\,也是1个字符,其后为字符串结束标识’\0’,所以strlen(s2)的值也为5,因此C选项正确。知识模块:数组19.有以下程序:#include<stdio.h>main(){chars[]=“abcde”;s+=2;prinff(“%d\n”,s[0]);}程序的运行结果是()。A.输出字符C的ASCII码B.程序出错C.输出字符cD.输出字符a的ASCII码正确答案:B解析:本题重点考查数组名的概念。在C语言中,数组名类似于一个指向数组首地址的指针常量,一旦定义就不能修改其内容。所以本题中的“s+=2”;语句让数组名s的内容加2是错误的,编译无法通过,因此B选项正确。知识模块:数组20.有以下程序:#include<stdio.h>voidfun(char*t,char*s){while(*t!=0)t++;while((*t++=*s++)!=0);}main(){charss[10]=“acc”,aa[10]=“bbxxyy”;fun(ss,aa);prinff(“%s,%s\n”,ss,aa);}程序的运行结果是()。A.acc,bbxxyyB.accbbxxyy,bbxxyyC.accxxyy,bbxxyyD.accxyy,bbxxyy正确答案:B解析:本题重点考查while循环语句的简单应用。在函数。fun()中,前一个while循环的作用是:如果形参指针t所指内容不为0,则让t增1,直到它指向0。后一个while循环的作用是:将s所指内容赋给t所指地址,然后两者同时增1,直到赋给t的内容为0。由此可见,函数fun()的作用就是将形参s所指字符串连接到形参t所指字符串末尾,相当于库函数中的strcat()。主函数中使用fun()将数组aa中的字符串连接到了数组ss中原有字符串之后,所以执行完后,ss中的字符串为“accbbxxyy”。程序知识模块:数组21.设有定义:charp[]={‘1’,’2’,’3’},*q=p;,以下不能计算出一个char型数据所占字节数的表达式是()。A.sizeof(p)B.sizeof(char)C.sizeof(*q)D.sizeof(p[0])正确答案:A解析:根据题目中的定义可知道sizeof(p),计算的是数组p中所有元素所占用的字节数,而不是char型数据所占的字节数。知识模块:数组22.设有定义:chars[81];inti=0;,以下不能将一行(不超过80个字符)带有空格的字符串正确读入的语句或语句组是()。A.gets(s);B.while((s[i++]=getchar())!=‘\n’);s[i]=‘\0’;C.scanf(“%s”,s);D.do{scanf(“%C”,&s[i]);}while(s[i++]!=‘\n’);s[i]=‘\0’;正确答案:C解析:使用scanf()输入字符串时,空格和回车符都作为输入数据的分隔符而不能被读入,而应该使用gets(s)。知识模块:数组23.若有定义语句:char*s1=“OK”,*s2=“ok”;,以下选项中,能够输出“OK”的语句是()。A.if(stremp(s1,s2)!=0)puts(s2);B.if(stremp(s1,s2)!=0)puts(s1);C.if(strcmp(s1,s2)==1)puts(s1);D.if(strcmp(s1,s2)==0)puts(s1);正确答案:B解析:strcmp(s1,s2)是字符串比较函数,比较规则是两个字符串自左向右逐个字符相比(按照ASCII码值大小),以第一个不相同字符的大小作为比较结果。因为’OK’<’ok’,所以str

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论