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

下载本文档

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

文档简介

国家二级C语言机试(函数和数组)模拟试卷10(题后含答案及解析)题型有:1.选择题选择题1.有以下程序#include<stdio.h>>main(){inta[]={10,20,30,40),*p=a,i;for(i=0;i<=3;i++){a[i]=*p;p++;}pfintf(“%d\n”,a[2]);}程序运行后的输出结果是A.20B.30C.10D.40正确答案:B解析:因为指针变量p的初始值指向数组a,所以执行for循环语句后,数组a中的元素的值不变。知识模块:函数和数组2.若有以下程序main(){inti,j=0;chara[]=“Howareyou!”;for(i=0;a[i];i++)if(a[i]!=‘‘)a[j++]=a[i];a[j]=‘\0’;printf(“%s\n”,a);}则程序的输出结果是A.HowareyouB.Hay!C.Howareyou!D.Howareyou!正确答案:C解析:主函数中利用for循环访问字符串的每一个字符,判断当前字符是否为空格,如果是空格则删除。因此删除字符串”Howareyou!”中空格以后,字符串为Howareyou!。知识模块:函数和数组3.若有以下程序#include<stdio.h>main(){inti,j=0;chara[]=“Howareyou!”,b[10];for(i=0;a[i];i++)if(a[i]==‘‘)b[j++]=a[i+1];b[j]=‘\0’;printf(“%s\n”,b);}则程序的输出结果是A.HowareyouB.Hay!C.Howareyou!D.ay正确答案:D解析:主函数中利用for循环访问字符串a的每一个字符,判断当前字符是否为空格,如果是空格则保存该空格后面的一个字符存放到字符数组b中。在字符串”Howareyou!”中,第一个空格后面字符为’a’,第二个空格后面字符为’v’。知识模块:函数和数组4.若有以下程序#includechar*a=“you”,b[]=“welcome#you#to#China!”;main(){inti,j=0;char*p;for(i=0;b[i]!=‘\0’;i++){if(*a==b[i]){P=&b[i];for(j=0;a[j]!=‘\0’;j++){if(a[j]!=*p)break;p++;}if(a[j]==‘\0’)break;}}printf(“%s\n”,p);}则程序的输出结果是A.#you#to#China!B.me#you#to#China!C.#China!D.#to#China!正确答案:D解析:程序中循环部分的主要功能是,在字符串b中寻找是否含有子串a,如果含有则退出,字符指针p指向该匹配子串后面的位置,利用printf函数输出则从该位置开始一直输出到字符串b的结尾。知识模块:函数和数组5.以下能正确定义二维数组是A.inta[][3];B.inta[][3]={2*3};C.inta[][3]={};D.inta[2][3]={{1),{2),{3,4)};正确答案:B解析:C语言中定义二维数组,必须指定二维数组每一维的大小。选项A)没有指定数组a行的大小,错误;选项B),虽然没有指定行大小,但是可以通过大括号里面的元素个数计算出行的大小为1,因此是正确的;选项C)同样没有指定行的大小,也不能通过元素个数计算行的个数,错误;选项D)定义的是二行三列数组,但是后面数据是三行,超出范围,所以错。知识模块:函数和数组6.若有以下说明和语句intc[4][5],(*p)[5];p=c;能够正确引用c数组元素的是A.p+1B.*(p+3)C.*(p+1)+3D.*(p[0]+2)正确答案:D解析:本题考查数组和指针,在本题中c是二维数组,指针p指向二维数组c,p其实是指向c数组的第一行。因此选项A)中p+1指向c数组的第二行;选项B)中,p+3表示p指向c数组的第三行,因此*(p+3)表示取出c数组第三行首元素的地址;选项C)和选项B)类似,表示取出数组c第二行首元素地址然后加3;选项D)中p[0]+2表示数组第一行第三列元素的地址,因此*(p[0]+2)是取出该元素的值。知识模块:函数和数组7.若有定义语句:intk[2][3],*pk[3];,则以下语句中正确的是A.pk=k;B.pk[0]=k[1][2];C.pk=k[0];D.pk[1]=k;正确答案:B解析:本题考查多维数组和数组指针。k是一个二维数组,pk是一个指针数组,该数组有3个元素,每个元素都是一个指向整型对象的指针。选项A)错误,等号的左边是一个数组地址,不是变量:选项B)是把元素k[1][2]赋值给pk[0];选项C)中等号左边不是变量;选项D)类型不匹配,pk[1]是指向一个整型对象,而k是一个二维数组首地址。知识模块:函数和数组8.若有定义语句:inta[3][6];,按在内存中的存放顺序,a数组的第10个元素是A.a[0][4]B.a[1][3]C.a[0][3]D.a[1][4]正确答案:B解析:本题考查多维数组的定义和使用。a是一个二维数组,有3行6列,即每行6个元素,a的第10个元素位于第二行的第四个位置,即a[1][3]。知识模块:函数和数组9.若有定义语句:inta[2][3],*p[3];,则以下语句中正确的是A.p=a;B.p[0]=a;C.p[0]=a[1][2];D.p[1]=a;正确答案:C解析:本题考查多维数组和数组指针。a是一个二维数组,p是一个指针数组,该数组有3个元素,每个元素都是一个指向整型对象的指针。选项A)错误,等号的左边是一个数组地址,不是变量;选项B)数据类型不匹配,p[0]是指向一个整型对象,而a是一个二维数组首地址;选项C)正确,是把元素a[1][2]赋值给p[0];选项D)和选项B)一样属于数据类型不匹配,p[1]是指向一个整型对象,而a是一个二维数组首地址。知识模块:函数和数组10.若有定义:inta[2][3];,以下选项中对a数组元素正确引用的是A.a[2][!1]B.a[2][3]C.a[0][3]D.a[1>2][!1]正确答案:D解析:本题考查数组的使用,C语占中数组的下标从0开始。本题中a是一个_维数组,两个下标的范围分别是0-1和0-2。选项A)中第一个下标越界,超出了范围;选项B)中第一个和第二个下标都超出了范围;选项C)中第二个下标超出范围;选项D)中,1>2的值为0,!1的值为0,因此选项D)实际是访问a[0][0]。知识模块:函数和数组11.以下数组定义中错误的是A.intx[][3]={0};B.intx[2][3]={{1,2},{3,4),{5,6)};C.intx[][3]={{1,2,3},{4,5,6}};D.intx[2][3]={1,2,3,4,5,6};正确答案:B解析:二维数组的初始化有以下几种形式:①分行进行初始化;②不分行的初始化;③部分数组元素初始化;④省略第一维的定义,不省略第二维的定义。在选项A)中赋值号左边定义了一个3行2列的二维数组,而右边用2行3列的数字进行赋初值。所以出现了边界的越界溢出而出错。知识模块:函数和数组12.有以下程序#include<stdio.h>#defineN4voidfun(inta[][N],intb[]){inti;for(i=0;i<N;i++)b[i]=a[i][i]-a[i][N—1—i];}voidmain(){intx[N][N]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}},y[N],i;fun(x,y);for(i=0;i<N;i++)printf(“%d,”,y[i]);printf(“\n”):}程序运行后的输出结果是A.-12,-3,0,0,B.-3,-1,1,3,C.0,1,2,3,D.-3,-3,-3,-3,正确答案:B解析:fun函数的功能是求出二维数组a中第i行第i个元素与第N一1一i元素的差,赋给b[i]。在主函数中,把实参二维数组x和一维数组y传递给形参a和b,最后输出一维数组y中元素的值。知识模块:函数和数组13.有以下程序#includemain(){intb[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=1;for(i=0;i<=i;j++)t+=b[i][b[j][i]];printf(“%d\n”,t);}程序运行后的输出结果是A.3B.1C.9D.4正确答案:D解析:这道题主要考查的是二维数组的有关知识。在两层for循环语句中,每次执行变量t的累加时,二维数组元素b的第二下标的值与第一下标相同的值,所以程序执行的过程为t=1+b[1][1]+b[2][2]=1+1+2=4。知识模块:函数和数组14.以下定义数组的语句中错误的是A.intnum[][3]={{1,2},3,4,5,6};B.intnum[]={1,2,3,4,5,6};C.intnum[][4]={1,2,3,4,5,6};D.intnum[2][4]={{1,2},{3,4),{5,6)};正确答案:D解析:在选项D)的数组定义中,赋值号左边定义了一个2行4列的二维数组,而在右边定义了一个3行2列的二维数组。知识模块:函数和数组15.有下列程序:main(){intx[3][2]={0},i;for(i=0;i<3;i++)scanf(“%d”,x[i]);printf(“%3d%3d%3d\n”,x[0][0],x[0][1],x[1][0]);}若运行时输入:246<CR>,则输出结果为A.200B.240C.204D.246正确答案:C解析:语句x[3][2]={0}表示将二维数组x的所有元素赋初值0,而循环语句for(i=0;i<3;i++)scanf(“%d”,x[i])表示对数组元素x[0][0]、x[1][0]、x[2][0]赋值。所以当运行程序时,输入246<CR>时,数组元素x[0][0]=2、x[1][0]=4、x[2][0]=6,因此,输出数组元素x[0][0]=2、x[0][1]=0、x[1][0]=4的值204。知识模块:函数和数组16.有以下程序#include<stdio.h>intfun(int(*s)[4],intn,intk){intm,i;m=s[0][k];for(i=1;i<n;i++)if(s[i][k]>m)m=s[i][k];returnm;}main(){inta[4][4]={{1,2,3,4),{11,12,13,14},{21,22,23,24},{31,32,33,34}};printf(“%d\n”,fun(a,4,0));}程序的运行结果是A.31B.34C.4D.32正确答案:A解析:函数fun(int(*s)f4],intn,intk)的功能是返回二维数组第k列的最大元素。在主函数中由于二维数组a[4][4]己经初始化,所以fun(a,4,0)的值是二维数组a[]f]第1列中的最大元素31。知识模块:函数和数组17.有下列程序:main(){inta[4][4]={{1,4,3,2},{8,6,5,7},{3,7,2,5},{4,8,6,1)},i,j,k,t;for(i=0;i<4;i++)for(j=0;j<3;j++)for(k=j+1;k<4;k++)if(a[j][i]>a[k][i]){t=a[j][i];a[j][i]=a[k][i];a[k][i]=t;}/*按列排序*/for(i=0;i<4;i++)printf(“%d,”,a[i][i]);}程序运行后的输出结果是A.8,7,3,1,B.1,6,5,7,C.4,7,5,2,D.1,6,2,1,正确答案:B解析:最外层的for语句的自变量i是列下标,而内部的两个for语句的自变量i和k是行下标。所以由程序段可知,这是利用三重循环对二维数组a[4][4]的元素按列从小到大进行排序,所以最后排完序的结果为a[4][4]={{1,4,2,1},{3,6,3,2},{4,7,5,5},{8,8,6,7}},最后一个for语句的功能是输出数组a[4][4]主对角线上的元素,因而输出为1,6,5,7。知识模块:函数和数组18.有下列程序: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.753B.369C.751D.357正确答案:D解析:由于存程序中定义了二维数组t[][3]={9,8,7,6,5,4,3,2,1};由二维数组的存储方式按行存储,即初始化完第一行的所有列再初始化下一行的元素。可知这是一个3行3列的二维数组,第一行的元素为{9,8,7},第二行的元素为{6,5,4},第三行的元素为{3,2,1}。然后用for循环输出t[2][0]、t[1][1]、t[0][2],它们的值分别为3、5、7。知识模块:函数和数组19.有下列程序:main(){inta[4][4]={{1,4,3,2},{8,6,5,7),{3,7,2,5},{4,8,6,1}},i,k,t;for(i=0;i<3;i++)for(k=i+1;k<4;k++)if(a[i][i]<a[k][k]){t=a[i][i];a[i][i]=a[k][k];a[k][k]=t;}for(i=0;i<4;i++)printf(“%d,”,a[0][i]);}程序运行后的输出结果是A.6,2,1,1,B.,1,1,2,6,C.2,3,4,6,D.6,4,3,2,正确答案:D解析:利用二重for循环对二维数组a[4][4]的主对角线上的元素{1,6,2,1}实现按列从大到小排序,所以数组a[4][4]的值变为{{6,4,3,2,},{8,2,5,7},{3,7,1,5),{4,8,6,1}},最后输出数组a[4][4]第一行上的元素,所以输出结果为6,4,3,2。知识模块:函数和数组20.若有定义:intw[3][5];则以下不能正确表示该数组元素的表达式是A.*(*w+3)B.*(*(w+1))C.*(w+1)[4]D.*(&w[0][0]+1)正确答案:C解析:在C语言中,二维数组的名字表示的是二维数组的地址,对于二维数组intw[3][5],可以认为w为一个一维数组,含有3个元素,而每个元素为一个含有5个元素的一维数组。而(w+1)为一个含有两个元素的一维数组,首先和(w+1)[4]结合非法,4超出了二维数组的边界,取值也就是非法的了。知识模块:函数和数组21.以下错误的定义语句是A.intx[4][3]={{1,2,3},{1,2,3},{1,2,3},{1,2,3}};B.intx[][3]={{0),{1},{1,2,3}};C.intx[][3]={1,2,3,4};D.intx[4][]={{1,2,3},{1,2,3),{1,2,3},{1,2,3}};正确答案:D解析:一维数组定义和初始化是允许省略行下标,不允许省略列下标。知识模块:函数和数组22.以下叙述中正确的是A.语句inta[4][3]={1,2,4,5};是错误的初始化形式B.语句inta[][3]={1,2,4,5};是错误的初始化形式C.在逻辑上,可以把二维数组看成是一个具有行和列的表格或矩阵D.语句inta[4][3]={{1,2},{4,5}};是错误的初始化形式正确答案:C解析:在理解二维数组的时候,可以把一个二维数组看成是一个一维数组,每个数组元素又是包含有若十个元素的一维数组,也就是具有行列的结构,二维数组初始化也是在类型说明时给各下标变量赋以初值。二维数组可按行分段赋值,也可按行连续赋值。知识模块:函数和数组23.设有定义:intx[2][3];则以下关于二维数组x的叙述错误的是A.数组x可以看作是由x[0]和x[1]两个元素组成的一维数组B.可以用x[0]=0;的形式为数组所有元素赋初值0C.元素x[0]可看作是由3个整型元素组成的一维数组D.x[0]和x[1]是数组名,分别代表一个地址常量正确答案:B解析:二维数组的元素在内存中占一系列连续的存储单元。数组元素在内存巾的排列顺序是先存放第0行的元素,再存放第1行的元素……称这种存放顺序为按行存放。可以把一个二维数组看成是一个维数组,每个数组元素又是包含有若干个元素的一维数组。另外在给二维数组赋初值时可以不用含花括号对。例如,inta[4][3]={1,2,4,5};在编译时,系统将按a数组元素在内存中排列的顺序,将花括号内的数据——对应地赋给各个元素,若数据不是,系统将给后面的元素自动补初值0。以上将给a数组第一行的元素和第二行的第一个元素依次赋予1、2、4、5,其他元素的初值都为0。知识模块:函数和数组24.有以下程序#include<stdio.h>#defineN3voidfun(inta[][N],intb[])main(){inti,j;{intx[N][N]={1,2,3,4,5,6,7,8,9),y[N],i;for(i=0;i<N;i++)fun(x,y);{b[i]=a[i][0];for(i=0;i<N;i++)printf

温馨提示

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

评论

0/150

提交评论