《C++数组》习题
学号姓名
一、选择题
1、下列对字符数组进行初始化的语句正确的是 A
A.char a[]= "Hello";
B.char a[][]= {'H','e','l','l','o'};
C.char a[5]="Hello";
D.char a[2][5]= {"Hello","World"};
2、以下一维数组a的正确定义是 D
A.int a(10) ; B.int n=10,a[n];
C.int n; D.#define size 10
cin>>n; int a[size];
int a[n];
3、以下对二维数组a进行不正确初始化的是 C
A.int a[2][3]={0};
B.int a[][3]={{1,2},{0}};
C.int a[2][3]={{1,2},{3,4},{5,6}};
D.int a[][3]={1,2,3,4,5,6);
4、执行以下程序后,s的值为 A
int a[]={5,3,7,2,1,5,4,lO);
int s=0,k;
for(k=0;k<8;k+=2)
s+=*(a+k);
A.17 B.27 C.13 D.无定值
5、为了判断两个字符串sl和s2是否相等,应当使用 D
A.if (s1==s2)
B.if (s1=s2)
C.if(strcpy(S1,s2))
D.if(strcmp(s1,s2)==O)
6、有定义int a[2][5];,若a[0][1]的地址为x,则a[0][O]、a[1][3]地址分别为(假设一个整型数据占用两个字节的内存空间): A A.x-2,x+14 B.x-1,x+7
C.x+1,x+7 D.x-1,x+14
7、若有定义float a[m][n];,且a[1][1]的地址为x,每个float元素占用4个字节,则a[il[j]的地址为 A
A.x+4*(i-1)*n+4*(j-1) B.x+(i-1)*n+(j-1)
C.x+4*(i-1)*j+(j-1) D.x+4*i*j+4*j
二、填空题
1、char st[20] = "SEU\0\t\\";
cout<<sizeof(st)<<strlen(st)<<endl;则输出的内容是 203 ,如将st数组定义中的20去掉,则输出的内容是 73 。
三、程序阅读题
1、写出如下程序的运行结果。
int main()
{
int i,j;
int a[10]={1,1,1,1,1,1,1,1,1,1};
for(i=0; i<10;i++)
for(j=0;j<i; j++)
a[i]=a[i]+a[j];
for(i=0; i<10; i++)
cout<<a[i]<<'\t';
cout<<'\n';
return 0;
}
1 2 4 8 16 32 64 128 256 512
2、写出如下程序的运行结果。
int main()
{
int a[3][3] = {1,0,2,2,2,0,0,1,0};
int i,j;
for(i=0; i<3; i++)
for(j=0; j<3; j++)
{
a[i][j]=a[a[i][j]][a[j][i]];
cout<<a[i][j]<<'\t';
}
return 0;
}
2 2 0 0 0 2 2 2 2
四、程序填空题
1、定义函数,在一维数组中找出最大值和最小值,主函数中调用该函数并输出数组的最大最小元素。
void cal(int a[],int n, int &max,int &min ){
max=a[0];
min=a[0]; ;
for(int i=1;i<n;i++){
if(a[i]>max) max=a[i] ;
if(a[i]<min) min=a[i];
}
}
int main(){
int a[10];
cout<<"输入10个整数:"<<endl;
for(int i=0;i<10;i++) cin>>a[i];
int max,min ;
cal( a,10 ,max,min);
for(i=0;i<10;i++) cout<<a[i]<<" ";
cout<<endl;
cout<<"max="<<max<<",min="<<min<<endl;
return 0;
}
2、下列函数inverse的功能是使一个字符串按逆序存放,请填空。
void inverse(char str[])
{
char m;
int i,j;
for(i=0,j=strlen(str); i<j ;i++, j-- )
{
m=str[i];
str[i]= strlen[j-1] ;
str[j-1]=m ;
}
}
3、下列程序用于判断字符串S是否对称,对称时返回1,否则返回0。
如f(”
abba”)返回1,而f("abab")返回0。
请填空。
int f( char s[] )
{
int i=0,j=0;
while(s[j]!='\0') j++ ;
for(j--;i<j&&s[i]==s[j];i++,j--);
return( i>=j );
}
4、下面函数是寻找二维数组中每一行的最大值,请填空。
#define N 5
#define M 5
void max(int a[N][M])
{
int i,j,p;
for(i=0;i<N;i++)
{
p=0 ;
for(j=1;j<M;j++)
if(a[i][p]<a[i][j])
p=j ;
cout<<i<<":"<<a[i][p]<<endl;
}
}
5、下面的程序是把十进制数转换为某个指定的进制,请填空。
int main()
{
int num[65],i=0,base;
long n;
cout<<"input a decimal number:";
cin>>n;
cout<<"input base number:";
cin>>base;
do
{
num[i]=n%base ;
i++;
n=n/base;
}while( n>0 );
for( i-- ;i>=0;i--)
cout<<num[i];
return 0;
}。