全国计算机等级考试二级C语言历年真题汇总第6章利用数组处理批量处理2008-04-24、下列错误的定义语句是()。A)intx[][3]={{0},{1},{1,2,3}};B)intx[4][3]={{1,2,3},{1,2,3},{1,2,3},{1,2,3}};C)intx[4][]={{1,2,3},{1,2,3},{1,2,3},{1,2,3}};D)intx[][3]={1,2,3,4};答案:C解析:如果对全部元素都赋初值,则第一维的长度可以省,但第二维的长度不可省略。2008-04-26、若有定义:inta[2][3];,下列选项中对a数组元素正确引用的是()。A)a[2][!1]B)a[2][3]C)a[0][3]D)a[12][!1]答案:D2008-04-27、有定义语句:chars[10];,若要从终端给s输入5个字符,错误的输入语句是()。A)gets(&s[0]);B)scanf(%s,s+1);C)gets(s);D)scanf(%s,s[1]);答案:D解析:采用scanf()函数输入时,输入项为字符串的地址值,s[1]是字符,不是地址,所以选项D是错误的。gets()其中输入项为存放字符串的首地址。&s[0]为数组的首地址,s也为数组的首地址,因此选项D是错误的。2008-04-31、有下列程序:#includestdio.hmain(){ints[12]={1,2,3,4,4,3,2,1,1,1,2,3},c[5]={0},i;for(i=0;i12;i++)c[s[i]]++;for(i=1;i5;i++)printf(%d,c[i]);printf(\n);}程序的运行结果是()。A)1234B)2344C)4332D)1123答案:C解析:c[5]={c[0],c[1],c[2],c[3],c[4]};每个元素的初始赋值为0.for循环执行完的结果为:c[1]++;c[2]++;c[3]++;c[4]++;c[4]++;c[3]++;c[2]++;c[1]++;c[1]++;c[1]++;c[2]++;c[3]++;最后总结出c[0]=0,c[1]=4,c[2]=3,c[3]=3,c[4]=2。因为for(i=1;i5;i++)是从C数组第二个元素输出即第二个循环输出43322008-09-21若有定义语句:intm[]={5,4,3,2,1},i=4;,则下面对m数组元素的引用中错误的是A)m[--i]B)m[2*2]C)m[m[0]]D)m[m]答案:C解析:因为C为m[5]超界。2008-09-24若有定义语句:chars[10]=“1234567\0\0”;,则strlen(s)的值是A)7B)8C)9D)10答案:A解析:strlen函数是测试字符串长度的函数。它是测试字符串中实际长度,不包括’\0’。2009-03-22.设变量已正确定义,以下不能统计出一行中输入字符个数(不包含回车符)的程序段是()A)n=0;while((ch=getchar())!=‘\n’)n++;B)n=0;while(getchar()!=‘\n’)n++;C)for(n=0;getchar()!=‘\n’;n++);D)n=0;for(ch=getchar();ch!=‘\n’;n++);答案:D解析:getchar()每次从缓冲区读一个字符,当读到回车里,结束循环。前三个执行结果是一样的。而D里面ch=getchar();是在表达式1里,表达式1只执行一次,所以不能接着输入下一个字符,就不是一行了,需要对D进行改近如下:for(ch=getchar();ch!='\n';n++)ch=getchar();循环体里加一句。2009-03-30.设有定义:chars[81];inti=0;,以下不能将一行(不超过80个字符)带有空格的字符串正确读入的语句或语句组是A)gets(s);//gets函数可以把howareyou?一次输入进去B)while((s[i++]=getchar())!=‘\n’);s[i]=‘\0’;/*当(s[i++]=getchar())不为换行符时,一直输入,然后在最后加上’\0’结束符*/C)scanf(%s,s);D)do{scanf(%c,&s[i]);}while(s[i++]!=‘\n’);s[i]=‘\0’;答案:C解析:scanf(%s,s);//可以用scanf函数输入一个字符串,如果想利用一个scanf函数输入多个字符,则应在输入时以空格分隔。如scanf(“%s%s%s”,str1,str2,str3);输入数据:howareyou?2009-09-20有以下程序#includestdio.hmain(){chars[]={012xy};inti,n=0;for(i=0;s[i]!=0;i++)if(s[i]=’a’&&s[i]=’z’)n++;printf(%d\n,n);}程序运行后的输出结果是A)0B)2C)3D)5答案:B2009-09-29有以下程序#includestdio.hmain(){inta[]={2,3,5,4},i;for(i=0;i4;i++)switch(i%2){case0:switch(a[i]%2){case0:a[i]++;break;case1:a[i]--;}break;case1:a[i[=0;}for(i=0;i4;i++)printf(“%d”,a[i]);printf(“\n”);}A)3344B)2050C)3040D)0304答案:C2009-09-30有以下程序#includestdio.h#includestring.hmain(){chara[10]=”abcd”;printf(“%d,%d\n”,strlen(a),sizeof(a));}程序运行后的输出结果是A)7,4B)4,10C)8,8D)10,10答案:B解析:sizeof函数是求数组分配的存储空间大小,因为一个字符占一个字节,这里分配数组空间为10个字节。2009-09-31下面是有关C语言字符数组的描述,其中错误的是A)不可以用赋值语句给字符数组名赋字符串B)可以用输入语句把字符串整体输入给字符数组C)字符数组中的内容不一定是字符串D)字符数组只能存放字符串答案:D解析:A是对的,因为不能用赋值语句将一个字符串常量或字符数组直接给一个字符数组名,如:str1=”china”是错的,str1=str2;也是错的。详见课本163注释。D字符数组可以存放字符或者字符串,如charc[5]={‘I’,’a’,’p’,’p’,’y’};所在D是错的。2010-03-25下列选项中,能正确定义数组的语句是A)intnum[0..2008];B)intnum[];C)intN=2008;intnum[N];D)#defineN2008intnum[N];答案:D解析:D对。方括号中必须是常量或常量表达式,不能是变量,定义时如果没有全部赋值必须标明长度,而D是定义的符号常量,所以方括号中是常量的一种。A没有这种用法。2010-03-29有以下程序#include(stdio.h)main(){inta[5]={1,2,3,4,5},b[5]={0,2,1,3,0},i,s=0;for(i=0;i5;i++)s=s+a[b[i]]);printf(%d\n,s);}程序运行后的输出结果是A)6B)10C)11D)15答案:C2010-03-30有以下程序#includemain(){intb[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=1;for(i=0;i3;i++)for(j=i;j=i;j++)t+=b[i][b[j][i]];printf(%d\n,t);}程序运行后的输出结果是A)1B)3C)4D)9答案:C解析:此时需要知道每个元素的下标,不难,较复杂,请大家细心和耐心。2010-03-31若有以下定义和语句chars1[10]=abcd!,*s2=\n123\\;printf(%d%d\n,strlen(s1),strlen(s2));则输出结果是A)55B)105C)107D)58答案:A2010-09-23有以下程序#include<stdio.h#include<string.hmain(){charx[]=”STRING”;x[0]=0;x[1]=’\0’;x[2]=’0’;printf(”%d%d\n”,sizeof(x),strlen(x));}程序运行后的输出结果是A)61B)70C)63D)71答案:B解析:charx[]=string有6个字符外加一个看不见的字符串结束符,共占用7个存储空间。而x[0]=0;这时是用ASCII码为赋值时,ASCII码为0就是null,就是字符串结束符,而strlen(x)返回字符串长度,是不计入字符串结束符的,所以得0。2010-09-28若要定义一个具有5个元素的整型数组,以下错误的定义语句是A)inta[5]=﹛0﹜;B)intb[]={0,0,0,0,0};C)intc[2+3];D)inti=5,d[i];答案:D2010-09-31下列选项中,能够满足“若字符串s1等于字符串s2,则执行ST要求的是A)if(strcmp(s2,s1)==0)ST;B)if(sl==s2)ST;C)if(strcpy(sl,s2)==1)ST;D)if(sl-s2==0)ST;答案:A2010-09-33有以下程序(strcat函数用以连接两个字符串)#include<stdio.h#include<string.hmain(){chara[20]=“ABCD\OEFG\0”,b[]=“IJK”;strcat(a,b);printf(”%s\n”,a);}程序运行后的输出结果是A)ABCDE\OFG\OIJKB)ABCDIJKC)IJKD)EFGIJK答案:B解析:详见课本162页说明2.2010-09-38有以下程序#include<stdio.hmain(){ints,t,A=10;doubleB=6;s=sizeof(A);t=sizeof(B);printf(“%d,%d\n”,s,t);}在VC6平台上编译运行,程序运行后的输出结果是A)2,4B)4,4C)4,8D)10,6答案:C解析:在VC6里一个整型变量占4个字节,双精度浮点型占8个字节。2011-03-21有以下程序#includestdio.hmain(){chars[]=012xy\08s34f4w2;inti,n=0;for(i=0;s[i]!=0;i++)if(s[i]='0'&&s[i]='9')n++;printf(%d\n,n);}程序运行后的输出结果是A)0B)3C)7D)8答案:B解析:s[i]!=0后面的0是ASCII码,相对应的字符为’\0’。2011-03-31有以下程序#includestdio.hmain(){chara[30],b[30];scanf(%s,a);gets(b);printf(%s\n%s\n,a,b);}程序运行时若输入:howareyou?Iamfine回车则输出结果是A)howareyou?B)howIamfineareyou?IamfineC)howareyou?IamfineD)howareyou?答案:B2011-09-26.以下定义数组的语句中错误的是A.intnum[]={1,2,3,4,5,6};B.intnum[][3]={{1,2},3,4,5,6};C.intnum[2][4]={{1,2},{3,4},{5,6}};D.intnum[][4]={1,2,3,4,5,6};答案:C2011-09-28.有以下程序#includestdio.h#defineN4voidfun(inta[][N],intb[]){inti;for(i=0;iN