第 六 章 数组补充练习.docx
《第 六 章 数组补充练习.docx》由会员分享,可在线阅读,更多相关《第 六 章 数组补充练习.docx(17页珍藏版)》请在冰豆网上搜索。
![第 六 章 数组补充练习.docx](https://file1.bdocx.com/fileroot1/2023-1/21/0096461b-8b49-4b4c-9483-2c91a70f32a1/0096461b-8b49-4b4c-9483-2c91a70f32a11.gif)
第六章数组补充练习
第六章数组
一、选择题:
1.在c语言中,一维数组的定义方式为:
类型说明符数组名( )。
A.常量表达式B.整型表达式C.整型常量或整型表达式D.整型常量
2.以下对一维整型数组a的正确说明是 。
A.inta(10);B.intn=10,a[n];C.intn;D.#defineSIZE10
scanf(“%d”,&n);inta[SIZE];
inta[n];
3.在C语言中,引用数组元素时,其数组下标的数据类型允许是( ).
A.整型常量或整型表达式B.整型常量
C.整型表达式D.任何类型的表达式
4.若有说明:
inta[10];则对a数组元素的正确引用是 。
A.a[10]B.a[3.5]C.a(5)D.a[10-10]
5.以下能对一维数组a进行不正确初始化的语句是( )
A.inta[]={0};B.inta[10]={0,0,0,0};
C.inta[10]={};D.inta[10]={10*1};
6.对以下说明语句的正确理解是 。
inta[10]={6,7,8,9,10};
A.将5个初值依次赋给a[1]至a[5]B.将5个初值依次赋给a[0]至a[4]
C.将5个初值依次赋给a[6]至a[10]D.因为数组长度与初值的个数不相同,所以此语句不正确
7.下面程序 (每行程序前面的数字表示行号)。
1main()
2{
3floata[10]={0.0};
4inti;
5for(i=0;i<3;i++)scanf(“%d”,&a[i]);
6for(i=1;i<10;i++)a[0]=a[0]+a[i];
7printf(“%f\n”,a[0]);
8}
A.没有错误B.第3行有错误C.第5行有错误D.第7行有错误
8.下面程序中有错误的行是 (每行程序前面的数字表示行号)。
1main()
2{
3floata[3]={1};
4inti;
5scanf(“%d”,&a);
6for(i=1;i<3;i++)a[0]=a[0]+a[i];
7printf(“a[0]=%d\n”,a[0]);
8}
A.3B.6C.7D.5
9.定义如下变量和数组:
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
10.下面程序的运行结果是 。
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
11.以下对二维数组a的正确说明是( )。
A.doublea[1][4];B.inta[3][];C.floata(3,4);D.floata(3)(4);
12.若说明:
inta[3][4];则对a数组元素的正确引用是( )
A.a[1+1][0]B.a[2][4]C.a[1,3]D.a
(2)
(1)
13.若有说明:
inta[3][4];则对a数组元素的非法引用是( )
A.a[0][4]B.a[0][2*1]C.a[1][3]D.a[4-2][0]
14.若有说明:
inta[3][4];则下面正确的叙述是( )。
A.数组a中每个元素均得到处置0B.只有元素a[0][0]可得到初值0
C.此说明语句不正确D.数组a中各元素都可得到初值,但其值不一定为0
15.若有说明:
inta[3][4];则数组a中的元素( )
A.可在程序的编译阶段得到初值0B.可在程序的运行阶段得到初值0
C.不能得到确定的初值D.可在程序的编译或运行阶段得到初值0
16.若二维数组a有m列,则计算任一元素a[i][j]在数组中位置的公式为( )。
(假设a[0][0]位于数组的第一个位置上。
)
A.i*m+j+1B.i*m+jC.j*m+ID.i*m+j-1
17.以下能对二维数组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}};
18.以下不能对二维数组a进行不正确初始化的语句是 。
A.inta[2][3]={0};B.inta[][3]={{1,2},{0}};
C.inta[2][3]={{1,2},{3,4},{5,6}};D.inta[][3]={1,2,3,4,5,6};
19.若有说明:
inta[3][4]={0};则下面正确的叙述是 。
A.只有元素a[0][0]可得到初值0B.此说明语句不正确
C.数组a中各元素都可得到初值,但其值不一定为0D.数组a中每个元素均可得到初值0
20.若有说明:
inta[][3]={1,2,3,4,5,6,7};则a数组第一维的大小是 。
A.2B.3C.4D.无确定值
二、填空题:
1.在C语言中,二维数组的定义方式为:
类型说明符数组名[【1】][【2】];
2.在c语言中,二维数组元素在内存中的存放顺序是( )。
3.若有定义:
doublex[3][5];则x数组中行下标的下限为【1】,列下标的上限为【2】。
4.若二维数组a有m列,则计算任一元素a[i][j]在数组中位置的公式为:
()。
(假设a[0][0]位于数组的第一个位置上。
)
5.若有定义:
inta[3][4]={{1,2},{0},{4,6,8,10}};则初始化后,a[1][2]得到的初值是【1】,a[2][1]得到的初值是【2】
三、阅读程序写结果
1.下面程序的运行结果是 。
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(“%3d”,a[i]);
}
2.下面程序的运行结果是 。
main()
{inta[10]={1,2,2,3,4,3,4,5,1,5};
intn=0,i,j,c,k;
for(i=0;i<10-n;i++)
{c=a[i];
for(j=i+1;j<10-n;j++)
if(a[j]==c)
{for(k=j;k<10-n;k++)
a[k]=a[k+1];
n++;
}
}
for(i=0;i<(10-n);i++)
printf(“%d”,a[i]);
printf(“\n”);
}
3.当从键盘输入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]);
}
4.以下程序的功能是 。
main()
{intnum[10]={10,1,-20,-203,-21,2,-2,-2,11,-21};
intsum=0,i;
for(i=0;i<10;i++)
{if(num[i]>0)
sum=num[i]+sum;
}
printf(“sum=%6d”,sum);
}
5.下面程序的运行结果是 。
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=(float)s/k;
printf(“Thenumberis:
%d.Theaverageis:
%f\n”,k,ave);
}
}
6.下面程序的运行结果是()。
main()
{inti,f[10];
f[0]=f[1]=1;
for(i=2;i<10;i++)
f[i]=f[i-2]+f[i-1];
for(i=0;i<10;i++)
{if(i%4==0)printf(“\n”);
printf(“%3d”,f[i];)
}
}
7.下面程序的运行结果是()。
main()
{inti=1,n=3,j,k=3;
inta[5]={1,4,5};
while(ia[i])i++;
for(j=n-1;j>=i;j--)
a[j+1]=a[j];
a[i]=k;
for(i=0;i<=n;i++)
printf(“%3d”,a[i]);
}
8.下面程序的运行结果是 。
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(x{i=i-m/2-1;m=m/2;}
elseif(x>a[i])
{i=i+m/2+1;m=m/2;}
elsebreak;
}
printf(“Theindexis:
%d”,i);
}
9.下面程序的运行结果是 。
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”);
}
}
10.下面程序的运行结果是 。
main()
{inta[5][5],i,j,n=1;
for(i=0;i<5;i++)
for(i=0;i<5;i++)
a[i][j]=n++;
printf(“Theresultis:
\n”);
for(i=0;i<5;i++)
{for(j=0;j<=i;j++)
printf(“%4d”,a[i][j]);
printf(“\n”);
}
}
11.下面程序的运行结果是 。
main()
{inti,j,a[2][3]={{2,4,6},{8,10,12}};
printf(“Theoriginalarrayis:
\n”);
for(i=0;i<2;i++)
{for(j=0;j<3;j++)
printf(“%4d”,a[i][j]);
printf(“\n”);
}
printf(“\ntheresultis:
\n”);
for(i=0;i<3;i++)
{
for(j=0;j<2;j++)
printf(“%4d”,a[j][i]);
printf(“\n”);
}
}
12.下面程序的运行结果是 。
main()
{inta[5][4]={3,6,2,1,3,9,0,8,2,1,5,6,7,2,7,4,0,0,0,0};
inti,j;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
a[4][j]+=a[i][j];
printf(“Theresultis:
\n”);
for(i=0;i<4;i++)
printf(“%3d”,a[4][i]);
}
13.下面程序的运行结果是 。
main()
{inti,j,row,col,min;
inta[3][4]={{1,2,3,4},{9,8,7,6},{-1,-2,0,5}};
min=a[0][0];
for(i=0;i<3;i++)
for(j=0;j<4;j++)
if(a[i][j]{min=a[i][j];row=i;col=j;}
printf(“min=%d,row=%d,col=%d\n”,min,row,col);
}
四、完善程序:
1.下面程序以每行4个数据的形式输出a数组,请填空。
#defineN20
main()
{inta[N],i;
for(i=0;ifor(i=0;i{if(【2】)【3】
printf(“%3d”,a[i]);
}
printf(“\n”);
}
2.设数组a包括10个整型元素。
下面程序的功能是求出a中各相邻两个元素的和,并将这些和存在数组b中,按每行3个元素的形式输出。
请填空。
main()
{inta[10],b[10],i;
for(i=0;i<10;i++)
scanf(“%d”,&a[i]);
for(【1】;i<10;i++)
【2】
for(i=1;i<10;i++)
{printf(“%3d”,b[i]);
if(【3】==0)printf(“\n”);
}
}
3.下面程序中数组a包括10个整数元素,从a中第二个元素起,分别将后项减前项之差存入数组b,并按每行3个元素输出数组b。
请填空。
main()
{inta[10],b[10],i;
for(i=0;【1】;i++)
scanf(“%d”,&a[i]);
for(i=1;【2】;i++)
b[i]=a[i]-a[i-1];
for(i=1;i<10;i++)
{printf(“%3d”,b[i]);
if(【3】)printf(“\n”);
}
}
4.下面程序的功能是输入5个整数,找出最大数和最小数所在的位置,并把二者对调,然后输出调整后的5个数。
请填空。
main()
{inta[5],max,min,i,j,k;
for(i=0;i<5;i++)
scanf(“%d”,&a[i]);
min=a[0];
for(i=1;i<5;i++)
if(a[i]max=a[0];
for(i=1;i<5;i++)
if(a[i]>max){max=a[i];【2】;}
【3】
printf(“\nThepositionofminis:
%3d\n”,k);
printf(“Thepositionofmaxis:
%3d\n”,j);
for(i=0;i<5;i++)
printf(“%5d”,a[i]);
}
5.下面程序的功能是将二维数组a中每个元素向右移一列,最右一列换到最左一列,移后的数组存到另一二维数组b中,并按矩阵形式输出a和b。
请填空。
例如:
arraya:
arrayb:
456645
123312
main()
{inta[2][3]={4,5,6,1,2,3},b[2][3];
inti,j;
printf(“arraya:
\n”);
for(i=0;i<=1;i++)
{for(j=0;j<3;j++)
{printf(“%5d”,a[i][j]);
【1】;
}
printf(“\n”);
}
for(【2】;i++)b[i][0]=a[i][2];
printf(“arrayb:
\n”);
for(i=0;i<2;i++)
{for(j=0;j<3;j++)
printf(“%5d”,b[i][j]);
【3】;
}
}
6.设数组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\n”,k,ave);}
}
7.以下程序的功能是求数组num中小于零的数据之和。
请填空。
main()
{intnum[20]={10,20,1,-20,203,-21,2,-2,-2,11,-21,22,12,
-2,-234,-90,22,90,-45,20};
intsum=0,i;
for(i=0;i<=19;i++)
{if(【1】)
sum=【2】;
}
printf(“sum=%6d”,sum);
}
8.以下程序可求出所有的水仙花数。
(提示:
所谓水仙花数是指一个三位正整数,其各位数字的立方之和等于该正整数。
例如:
407=4×4×4+0×0×0+7×7×7,故407是一个水仙花数。
)请填空。
main()
{intx,y,z,a[8],m,i=0;
printf(“Thespecialnumbersare(inthearrangeof1000):
\n”);
for(【1】;m++)
{x=m/100;
y=【2】;
z=m%10;
if(x*100+y*10+z==x*x*x+y*y*y+z*z*z)
{【3】;i++;}
}
for(x=0;x
printf(“%6d”,a[x]);
}
9.下面程序可求出矩阵a的主对角线上的元素之和。
请填空。
main()
{inta[3][3]={1,3,5,7,9,11,13,15,17},sum=0,i,j;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
if(【1】)sum=sum+【2】;
printf(“sum=%d\n”,sum);
}
10.下面程序可求出矩阵a的两条对角线上的元素之和。
请填空。
main()
{inta[3][3]={1,3,6,7,9,11,14,15,17},sum1=0,sum2=0,i,j;
for(i=0;I<3;I++)
for(j=0;j<3;j++)
if(i==j)sum1=sum1+a[i][j];
for(i=0;i<3;i++)
for(【1】;【2】;j--)
if((i+j)==2)sum2=sum2+a[i][j];
printf(“sum1=%d,sum2=%d\n”,sum1,sum2);
}
11.以下程序是求矩阵a,b的和,结果存入矩阵c中并按矩阵形式输出。
请填空。
main()
{inta[3][4]={{3,-2,7,5},{1,0,4,-3},{6,8,0,2}};
intb[3][4]={{-2,0,1,4},{5,-1,7,6},{6,8,0,2}};
inti,j,c[3][4];
for(i=0;i<3;i++)
for(j=0;j<4;j++)
c[i][j]=【1】;
for(i=0;i<3;i++)
{for(j=0;j<4;j++)
printf(“%3d”,c[i][j]);
【2】;
}
}
五、编程
1.数组a包括10个整数,把a中所有的后项除以前项之商取整后存入数组b,并按每行3个元素的格式输出数组b。
试编程。
2,若有说明:
inta[2][3]={{1,2,3},{4,5,6}};现要将a的行和列的元素互换后存到另一个二维数组b中。
试编程。
3.通过循环按行顺序为一个5*5的二维数组a赋1到25的自然数,然后输出初数组的左下半三角。
试编程。