数组练习试题和答案.docx
《数组练习试题和答案.docx》由会员分享,可在线阅读,更多相关《数组练习试题和答案.docx(33页珍藏版)》请在冰豆网上搜索。
数组练习试题和答案
第五章数组练习题及答案
一、选择题
1、判断字符串a和b是否相等,应当使用()
A、if(a==b)B、if(a=b)C、if(strcpy(a,b))D、if(strcmp(a,b))
2、以下正确的定义语句是()
A、inta[1][4]={1,2,3,4,5};B、floatx[3][]={{1},{2},{3}};
C、longb[2][3]={{1},{1,2},{1,2,3}};D、doubley[][3]={0};
3、以下各组选项中,均能正确定义二维实型数组a的选项是()
A、floata[3][4];floata[][4];floata[3][]={{1},{0}};
B、floata(3,4);floata[3][4];floata[][]={{0},{0}};
C、floata[3][4];staticfloata[][4]={{0},{0}};autofloata[][4]={{0},{0},{0}};
D、floata[3][4];floata[3][];floata[][4];
4、下面程序的运行结果是()
1—5DDCBA6—10BDABB11—15CCCBC16—20DDCBB21—25BBAAA26—30DBDDB
#include"stdio.h"
main()
{charstr[]="SSSWLIA",c;
intk;
for(k=2;((c=str[k])!
='\0');k++)
{switch(c)
{case'I':
++k;break;
case'L':
continue;
default:
putchar(c);continue;
}
putchar('*');
}
}
A、SSW*B、SW*C、SW*AD、SW
5、下面程序段是输出两个字符串中对应相等的字符。
横线处应填入()
charx[]="programming";
chary[]="Fortran";
inti=0;
while(x[i]!
='\0'&&y[i]!
='\0')
if(x[i]==y[i])printf("%c",《1》);
elsei++;
A、x[i++]B、y[++i]C、x[i]D、y[i]
6、有下面的程序段,则()
chara[3],b[]="china";
a=b;
printf("%s",a);
A、运行后将输出ChinaB、运行后将输出Ch
C、运行后将输出ChiD、编译出错
7、下面程序的运行结果是()
main()
{charch[7]={"12ab56"};
inti,s=0;
for(i=0;ch[i]>='0'&&ch[i]<='9';i+=2)
s=10*s+ch[i]-'0';
printf("%d\n",s);
}
A、1B、1256C、12ab56D、1
2
5
6
8、定义如下变量和数组:
则下面语句的输出结果是()
intk;
inta[3][3]={1,2,3,4,5,6,7,8,9,};
for(k=0;k<3;k++)
printf("%d",a[k][2-k]);
A、357B、369C、159D、147
9、下面程序段的运行结果是()
charc[5]={'a','b','\0','c','\0'};
printf("%s",c);
A、'a''b'B、abC、abcD、abc
10、若有说明:
inta[][3]={1,2,3,4,5,6,7};则a数组第一维的大小是()
A、2B、3C、4D、无确定值
11、下面程序的运行结果是()
main()
{inta[6],i;
for(i=1;i<6;i++)
{a[i]=9*(i-2+4*(i>3))%5;
printf("%2d",a[i]);
}
}
A、-40404B、-40403C、-40443D、-40440
12、下面程序的运行结果是()
main()
{inta[6][6],i,j;
for(i=1;i<6;i++)
for(j=1;j<6;j++)
a[i][j]=(i/j)*(j/i);
for(i=1;i<6;i++)
{for(j=1;j<6;j++)
printf("%2d",a[i][j]);
printf("\n");
}
}
A、11111B、00001C、10000D、10001
11111000100100001010
11111001000010000100
11111010000001001010
11111100000000110001
13、下述对C语言字符数组的描述中错误的是()
A、字符数组可以存放字符串。
B、字符数组的字符串可以整体输入、输出。
C、可以在赋值语句中通过赋值运算符“=”对字符数组整体赋值。
D、不可以用关系运算符对字符数组中的字符串进行比较。
14、判断字符串s1是否大于字符串s2,应当使用()
A、if(s1>s2)B、if(strcmp(s1,s2))C、if(strcmp(s2,s1)>0)D、if(strcmp(s1,s2)>0)
15、下面程序(每行程序前面的数字表示行号):
()
1main()
2{
3inta[3]={3*0};
4inti;
5for(i=0;i<3;i++)scanf("%d",&a[i]);
6for(i=1;i<3;i++)a[0]=a[0]+a[i];
7printf("%d\n",a[0]);
8}
A、第3行有错误B、第7行有错误C、第5行有错误D、没有错误
16、下面程序的功能是从键盘输入一行字符,统计其中有多少个单词,单词之间用空格分隔。
横线处应填入()
main()
{chars[80],c1,c2='';
inti=0,num=0;
gets(s);
while(s[i]!
='\0')
{c1=s[i];
if(i==0)c2='';
elsec2=s[i-1];
if(《1》)num++;
i++;
}
printf("%d",num);
}
A、c1==''&&c2==''B、c1!
=''&&c2==''C、c1==''&&c2!
=''D、c1!
=''&&c2!
=''
17、有字符数组a[80]和b[80],则正确的输出语句是()
A、puts(a,b);B、printf("%s,%s",a[],b[]);C、putchar(a,b);D、puts(a),puts(b);
18、下面描述正确的是()
A、两个字符串所包含的字符个数相同时,才能比较字符串。
B、字符个数多的字符串比字符个数少的字符串大.
C、字符串“STOP”与“STOP”相等。
D、字符串“That”小于字符串“The”
19、有两个字符数组a、b,则以下正确的输入语句是()
A、gets(a,b);B、scanf("%s%s",a,b);C、scanf("%s%s",&a,&b);D、gets("a"),gets("b");
20、以下不正确的定义语句是()
A、doublex[5]={2.0,4.0,6.0,8.0,1.0};B、inty[5]=}{0,1,2,3,4,5,6}
C、charc1[]={'1','2','3','4','5'};D、charc2[]={'\x10','\xa','\x8'};
21、调用函数时,若实参是一个数组名,则向函数对应的形参传送的是()
A、数组的长度 B、数组的首地址
C、数组第一个元素的值 D、整个数组元素的值
22、下面程序段的运行结果是()
chars[6];s=”abcd”;printf(“\”%s\”\n”,s);
A、“abcd”B、”abcd“C、\”abcd\”\nD、编译出错
23、(多项选择)以下不能对二维数组a进行正确初始化的语句是()
A、inta[2][]={{1,0,1},{5,2,3}}; B、.inta[][3]={{1,2,3},{4,5,6}};
C、inta[2][4]={{1,2,3},{4,5},{6}}; D、inta[][3]={{1,0,1},{},{1,1}};
24、(多项选择)若有说明:
inta[3][4];则对a数组元素不能正确引用是()
A.a[2][4] B、a[1,3]C、a[1+1][0]D、a
(2)
(1)
25、(多项选择)若有说明“staticinta[3][4]={0};”则下面正确的叙述是()
A、只有元素:
a[0][0]可得到初值0B、此说明语句不正确
C、数组a中各元素都可得到初值,但其值不一定为0
D、数组a中每个元素均可得到初值0
26、 以下对一维整型数组的正确说明是()
A、inta
(1); B、intn=10,a[n];
C、intn;scanf(“%d”,&n);inta[n]; D、#defineSIZE10inta[SIZE];
27、有以下程序,其输出结果是()
voidswap1(intc[])
{intt;
t=c[0];c[0]=c[1];c[1]=t;
}
voidswap2(intc0,intc1)
{ intt;
t=c0;c0=c1;c1=t;
}
main()
{inta[2]={3,5},b[2]={3,5};
swap1(a); swap2(b[0],b[1]);
printf(“%d %d %d %d\n”,a[0],a[1],b[0],b[1]);
}
A、5353 B、5335C、3535 D、3553
28、以下程序执行后的输出结果是()
intf(intb[][4])
{inti,j,s=0;
for(j=0;j<4;j++)
{ i=j;
if(i>2) i=3-j;
s+=b[i][j];
}
returns;
}
main()
{int[4][4]={{1,2,3,4},{0,2,4,5},{3,6,9,12},{3,2,1,0}}; printf(“%d\n”,f(a));}}
A、12 B、11 C、18 D、16
29、执行下列程序后输出的结果是()
inta[3][3]={{1},{2},{3}};
intb[3][3]={1,2,3};
main()
{printf(″﹪d\n″,a[1][0]+b[0][0]);}
A、0B、1C、2D、3
30、以下程序运行后,输出结果是()
main()
{inty=18,i=O,j,a[8];
do{a[i]=y%2;i++;y=y/2;}
while(y>=1);for(j=i-1;j>=0;j--)
printf(“%d”,a[j]);printf(“\n”);}
A、1000 B、10010 C、00110 D、10100
二、填空题
1、设数组a中的元素均为正整数,以下程序是求a中偶数的个数和偶数的平均值。
请填空。
(填空时数组元素请用数组表示方法)
main()
{inta[10]={1,2,3,4,5,6,7,8,9,10};
intk,s,i;floatave;
for(k=s=i=0;i<10;i++)
{if(a[i]%2!
=0)《1》;
s+=《2》;k++;
}
if(k!
=0){ave=s/k;printf("%d,%f",k,ave);}
}
2、下面程序的运行结果是()
main()
{intnum_list[]={6,7,8,9};
intk,j,b,u=0,m=4,w;
w=m-1;
while(u<=w)
{j=num_list[u];
k=2;b=1;
while(k<=j/2&&b)b=j%++k;
if(b)printf("%d",num_list[u++]);
else{num_list[u]=num_list[w];num_list[w--]=j;}
}
}
3、下面程序的功能是将字符数组a[6]={'a','b','c','d','e','f'}变为a[6]={'f','a','b','c','d','e'}。
请填空。
(注:
填空时数组元素请用数组表示方法)
main()
{chart,a[6]={'a','b','c','d','e','f'};
inti;
《1》;
for(《2》;i>0;i--)a[i]=a[i-1];
a[0]=t;
for(i=0;i<=5;i++)printf("%c",a[i]);
}
4、下面程序的运行结果是()
main()
{inti;
chara[]="Time",b[]="Tom";
for(i=0;a[i]!
='\0'&&b[i]!
='\0';i++)
if(a[i]==b[i])
if(a[i]>='a'&&a[i]<='z')printf("%c",a[i]-32);
elseprintf("%c",a[i]+32);
elseprintf("*");
}
5、下面程序的运行结果是()
main()
{inti=1;n=3,j,k=3;
inta[5]={1,4,5};
while(i<=n&&k>a[i])i++;
for(j=n-1;j>=i;j--)a[j+1]=a[j];
a[i]=k;
for(i=0;i<=n;i++)printf("%2d,",a[i]);
}
6、当从键盘输入18并回车后,下面程序的运行结果是()
main()
{intx,y,i,a[8],j,u,v;
scanf("%d",&x);
y=x;i=0;
do
{u=y/2;a[i]=y%2;i++;y=u;
}while(y>=1);
for(j=i-1;j>=0;j--)printf("%d",a[j]);
}
7、下面程序的运行结果是()
main()
{inta[10]={1,2,3,4,5,6,7,8,9,10};
intk,s,i;
floatave;
for(k=s=i=0;i<10;i++)
{if(a[i]%2==0)continue;
s+=a[i];k++;}
if(k!
=0){ave=s/k;printf("Thenumberis:
%d,Theaverageis:
%f\n",k,ave);}
}
8、若有以下输入(表示回车),则下面程序的运行结果是()
31232221130
main()
main()
{inta[4],x,i;
for(i=1;i<=3;i++)
a[i]=0;
scanf("%d",&x);
while(x>0)
{a[x]+=1;scanf("%d",&x);}
for(i=1;i<=3;i++)printf("a[%d]=%d,",i,a[i]);
}
9、当运行以下程序时,从键盘输入:
BOOK
CUT
GAME
PAGE(表示回车),则下面程序的运行结果是()
#include"stdio.h"
#include"string.h"
main()
{inti;
charstr[10],temp[10]="Control";
for(i=0;i<4;i++)
{gets(str);
if(strcmp(temp,str)<0)strcpy(temp,str);
}
puts(temp);
}
10、当运行以下程序时,从键盘输入
girl
boy(表示回车),则下面程序的运行结果是()
#include"stdio.h"
#include"string.h"
main()
{chara[2][80],t;
inti,j,m,n,le,max;
for(i=0;i<=1;i++)gets(a[i]);
t=a[0][0];
for(i=0;i<=1;i++)
{le=strlen(a[i]);
for(j=0;j<=le;i++)
if(a[i][j]>t){max=a[i][j];m=i;n=j;}
}
printf("%c%d%d\n",max,m,n);
}
11、下面程序的功能是在三个字符串中找出最小的。
请填空(注:
填空时请用数组元素表示方法)。
#include"stdio.h"
#include"string.h"
main()
{chars[20],str[3][20];
inti;
for(i=0;i<3;i++)gets(str[i]);
strcpy(s,(《1》)str[0]:
str[1]);
if(strcmp(str[2],s)<0)strcpy(s,str[2]);
printf("%s\n",《2》);
}
12、下面程序段的运行结果是()
charch[]="600";
inta,s=0;
for(a=0;ch[a]>='0'&&ch[a]<='9';a++)s=10*s+ch[a]-'0';
printf("%d",s);
13、下面程序的运行结果是()
main()
{inta[3][3],i,j;
for(i=1;i<3;i++)
for(j=1;j<3;j++)a[i][j]=(i/j)*(j/i);
for(i=1;i<3;i++)
for(j=1;j<3;j++)printf("%d,",a[i][j]));
}
14、下面程序段将输出computer,请填空。
charc[]="It'sacomputer";
for(i=0;i<=《1》;i++)
printf("%c",c[i《2》]);
15、下面程序的运行结果是()
main()
{inta[9]={0,6,12,18,42,44,52,67,94};
intx=52,i,n=9,m;
i=n/2+1;m=n/2;
while(m!
=0)
{if(xelseif(x>a[i]){i=i+m/2+1;m=m/2;}
elsebreak;
}
printf("%d",i);
}
三、判断题
1、有以下说明语句:
inta[10]={6,7,8,9,10};则将5个初值依次赋给a[1]至a[5]。
()
2、若有说明:
inta[][4]={0,0};则只有元素a[0][0]和a[0][1]可得到初值0。
()
3、inta[]={0};是对一维数组a进行正确初始化的语句。
()
4、有以下语句是正确的。
chars[10];s="China";()
5、若有说明:
inta[3][4]={0};则数组a中每个元素均可得到初值0。
()
6、floata[3,4];是对二维数组a的正确定义。
()
7、在C语言中,引用数组元素时,其数组下标的数据类型允许是整型常量或整型表达式。
()
8、以下是对一维整型数组a的正确定义:
intn;scanf("%d",&n);inta[n];()
9、若有定义:
inta[10];则a[10]是对a数组元素的正确引用。
()
10、若有以下定义:
staticinta[3][4];则数组a中各元素不能得到确定的值。
()
11、inta[][3]={{1,2},{3}};是能对二维数组a进行正确的初始化的语句。
()
12、有以下定义和语句:
chars1[10]="China";printf("%d",strlen(s1));输出结果为5。
()
四、程序填空
1、将一个数列头尾颠倒。
设该数列为1,3,5,7,9,11,13,15,17,19。
要求19,17,15,13,11,9,7,5,3,1次序存放并输出。
要求写一函数实现对包含任意个数据的颠倒处理。
voidf2(chara[],intn)
{inti,t;
for(《1》;i{t=a[i];a[i]=a[n-i];a[n-i]=t;}
}
2、编写串连接函数strcat。
(注:
填空请用数组表示方法)
voidstrcat(chars1[],chars2[])
{inti,j;
for(i=0;《1》;i++);
for(j=0;《2》;j++)s1[i+j]=s2[j];
s1[i+j]=《3》
}
3、下面程序用“两路合并法”把两个已按升序排列的数组合并成一个升序数组。
请填空。
(注:
填空请用数组表示方法)
main()
{inta[3]={5,9,19};
intb[5]={12,24,26,37,48};
intc[10],i=0,j=0,k=0;
while(i<3&&j<5)
if(a[i]>b[j]){《1》;k++;j++;}
else{《2》;k++;i++;}
while(i<3){《3》;i++;k++;}
while(j<5){《4》;k++;j++;}
}
4、用冒泡法进行排序函数如下,请填空。
voidbubble(inta[],intn)
{inti,j,t,temp;
for(《1》;i<=n-1;i++)
{t=n《2》;
for(j=0;j<=t-1;j++)
if(a[j]>a[j+1]){temp=a[j];a[j]=a[j+1];a[j+1]=temp;}
}
}
5、下面程序的功能是输入5个整数