在C语言中
数组
一、选择题
1、在C语言中,引用数组元素时,其数组下标的数据类型允许是(C )
A、 整型常量 B、整型
达式
C、整型常量或整型表达式 D、任何类型的表达式 2、以下对一维整型数组 a的正确说明是( D)
A、int a(10); B、int n=10,a[n];
C、int n
Scanf(―%d‖,&n);
Int a[n];
D、# define SIZE 10
Int a[SIZE];
3、若有说明:int a[10];则对a数组元素的正确引用是( D )
A、a[10] B、a[3.5] C、a(5) D、a[10-1] 4、以下对二维整型数组 a的正确说明是( C)
A、 int a[3][ ] B、float a(3,4);
C、double a[1][4] D、float a(3) (4); 5、以下能对二维数组a进行准确初始化的语句是( A)
A、 static a[2][ ]={{1,2,3},{3,4,5}}
B、 static a[ ][ 3]={{1,2,3},{3,4,5}}
C、 static a[2][ 4]={{1,2,3},{3,4,5},{2}}
D、 static a[ ][ ]={{1,2,3},{3,4,5}}
6、若有说明:int a[10];则对a数组中各元素( C)
A、 可在程序的运行阶段得到初值0
B、 可在程序的编译阶段得到初值0
C、不能得到确定的初值
D、可在程序的编译或运行阶段得到初值0
7、下面程序 A
1 main( )
2 {
3 int a[3]={3*0};
4 int I;
5 for(I=0;I<3;I++) scanf(―%d‖,&a[I]);
6 for(I=0;I<3;I++)a[0]=a[0]+a[i];
7 printf(―%d\n‖,a[0]);
8 }
A、第3行有错误 B、第7行有错误
C、第5行有错误 D、没有错误
8、下面程序中有错误的行是 D
1 main( )
2 {
3 int a[3]={1};
4 int I;
5 scanf(―%d‖,&a);
6 for(I=1;I<3;I++)a[0]=a[0]+a[i];
7 printf(―%d\n‖,a[0]);
8 }
A、3 B、6 C、 7 D、5
9、若二维数组a有m列,则计算任一元素a[I][j]在数组中位置的公式为( D)(假设a[0][0]
位于数组的第一个位置上。)
A、 I*m+j B、j*m+I C、I*m+j –1 D、I*m+j+1 10、若有说明:int a[ ][3]={1,2,3,4,5,6,7};则数组a第一维的大小是( B)
A、2 B、3 C、4 D、无确定值
11、若有以下程序段:B
int a[ ]={4,1,5,2,3},I,j,t;
for(I=0;I<5;I++)
{t=a[I];j=I-1;
while(j>=0&&t>a[j])
{a[j+1]=a[j];j--;}
a[j+1]=t;
A、 对数组a进行插入排序(升序)
B、 对数组a进行插入排序(降序)
C、 对数组a进行选择排序(升序)
D、 对数组a进行选择排序(降序)
12、下面对s的初始化,其中不正确的是( D )
A、char s[5]={―abc‖}; B、char s[5]={?a‘,‘b‘,‘c‘};
C、char s[5]= ―‖ D、char s[5]=―abcdef‖ 13、下面程序段运行的结果是( B )
char c[5]={?a‘,‘b‘,‘\0‘,‘c‘,‘\0‘};
printf(―%s‖,c);
A、‘a‘‘b‘ B、ab C、ab c D、ab\0c
14、有两个字符数组a、b,则以下准确的输入语句是( C )
A、gets(a,b); B、scanf(―%s%s‖,a,b);
C、scanf(―%s%s‖,&a,&b); D、gets(―a‖);gets(―b‖); 15、下面程序段的运行结果是( D )
char a[7]=‖abcdef‖;
char b[4]=‖ABC‖;
strcpy(a,b);
printf(―%c‖,a[5]);
A、空格B、\ 0 C、e D、f
16、有下列程序段 D
char a[3],b[ ]=‖china‖;
a=b;
printf(―%s‖,a);
则
A、运行后将输出china B、运行后将输出ch
C、运行后将输出chi D、编译出错 17、下面程序段的运行结果是 B
char c[ ]=‖\t\v\\\0will\n‖;
printf(―%d‖,strlen(c));
A、14 B、3 C、9 D、字符串中有非法字符,输出值不确定 二、填空题
1、下列程序是将二维数组a的行和列元素互换后存到另一个二维数组b中,请填空。
Main( )
{int a[2][3]={1,2,3,4,5,6},b[3][2],I,j,;
for(I=0;I<=1;I++)
for(j=0; 【1】;j++)
【2】;
}
2、以下程序可求出所有的水仙花数。
Main( )
{int x,y,z,a[8],m,I=0; for(【3】;m++)
{x=m/100;
y=【4】;
z=m%10;
if(x*100+y*10+z==x*x*x+y*y*y+z*z*z)
{【5】;I++};
for(x=0;x
max){max=a[I];【14】;} 【15】;
for(I=0;I<5;I++) printf(―%d‖,a[I]);
}
7、下面程序的功能是给一维数组a输入任意6个整数,假设为:7 4 8 9 1 5 ,然后建立一
个具有以下内容的方阵并打印。
5 7 4 8 9 1
1 5 7 4 8 9
9 1 5 7 4 8
8 9 1 5 7 4
4 8 9 1 5 7
7 4 8 9 1 5
main( )
{int a[6],I,j,k,m; for(I=0;I<6;I++)
scanf(―%d‖,&a[I]);
for(I=5;I>=0;I--) {k=a[5];
for(【16】;j>=0;j--) a[j+1]=a[j];
【17】;
for(m=0;m<6;m++) printf(―%d‖,a[m]);
printf(―\n‖);
}
}
8、下面程序的功能是输出以下9*9阶方阵。 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 1 1 2 3 3 3 3 3 2 1 1 2 3 4 4 4 3 2 1 1 2 3 4 5 4 3 2 1 1 2 3 4 4 4 3 2 1 1 2 3 3 3 3 3 2 1 1 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 main( )
{int a[10][10],n,I,j,m;
scanf(―%d‖,&n);
if(n%2==0)m=n/2; else 【18】;
for(I=0;I=0&&m>a[j]) {【26】;
j--;
}
【27】=m;
}
for(I=0;I<5;I++)
printf(―%d‖,a[I]);
printf(―\n‖);
}
12、下面程序用“两路合并法”把两个已按升序排列的数组合并成一个升序数组。
Main()
{int a[3]={5,9,19}; int b[5]={12,24,26,37,48};
int c[10],I=0,j=0,k=0;
while(I<3&&j<5)
if(【28】)
{c[k]=b[j];k++;j++;} else
{c[k]=a[i];k++;i++;} while(【29】)
{c[k]=a[I];I++;k++;} while(【30】)
{c[k]=b[j];j++;k++;} for(I=0;I=1;j—
13、 j=I
14、 k=ii
15、 a[j]=max;a[k]=min;
16、 j=4
17、 a[0]=k;
18、 m=n/2+1
19、 n-I-1
20、 n-I-1
21、 continue
22、 a[I]
23、 break
24、 I==8
25、 I-1
26、 a[j+1]=a[j] 27、 a[j+1]
28、 a[I]>b[j] 29、 j<3
30、 j<5