C/C++测试题
指 针
一、选择题
1、 若有以下说明和语句,且0<=i<10,则对数组元素的错误引用是( C )。
int a[]={1,2,3,4,5,6,7,8,9,0},*p,i;
p=a;
(A)*(a+i) (B) a[p-a] (C)p+i (D)*(&a[i])
2、 若有以下说明和语句,且0<=i<10,则不是对数组元素地址的正确表示的是( B )。
int a[]={1,2,3,4,5,6,7,8,9,0},*p,i;
p=a;
(A)&(a+1) (B)a++ (C)&p (D)&p[i]
3、 下面的程序中有错误(每行程序前面的数字表示行号)的是( A )。
1 #include <stdio.h>
2 int main( )
3 {
4 float a[3]={0.0};
5 int i;
6 for(i=0;i<3;i++)scanf("%f",&a[i]);
7 for(i=1;i<3;i++)a[0]=a[0]+a[i];
8 printf("%f\n",a[0]);
9 }
(A)没 (B)第4行 (C)第7行 (D)第8行
4、 在以下说明中,标识符prt( C )。
int(*prt)[3];
(A)说明不合法
(B)是一个指针数组名,每个元素是一个指向整型变量的指针
(C)是一个指针,它指向一个具有3个元素的一维数组
(D)是一个指向整型变量的指针
5、 以下说明与( C )中的说明等价。
Int *p[4];
(A) int p[4] (B) int *p (C)int *(p[4]) (D)int(*p)[4]
6、若有说明:int a[4] [10];则对数组元素a[i][j](0≤i<4, 0≤j<10)错误引用的是( B )。
(A)*(&a[0][0]+10*i+j) (B)*(a+i)[j] (c)*(*(a+i)+j) (D)*(a[i]+j)
7、下面为不正确的字符串赋值或赋初值方式是( C )。
(A) char*str;str="string"; (B) char str[7]={'s','t','r','i','n','g'};
(C) char strl[10];strl="string"; (D) char strl[]="string",str2[ ]="12345678";
strcpy (str2,strl);
8、若有以下说明,则不是对strcpy库函数正确调用的是( BCD )(多选)。
char *strl="copy", str2[10],* str3="hijklmn",*str4,*str5="abcd";
(A) strcpy(str2,strl); (B) strcpy(str3,strl);
(C) strcpy(str4,strl); (D) strcpy(str5,strl);
9、若有以下的说明,则对字符串中字符正确引用的是( ABC )。(多项选择)
其中0≤i<6。
char *strp="string";
(A) *strp (B)*(strp+i) (C) strp[i] (D) strp
10、若有语句int *point,a=4;和point=&a;下面均代表地址的一组选项是( D )。
(A) a,point,*&a (B)&*a,&a,*point
(C) *&point,*point,&a (D) &a,&*point,point
二、读程序分析程序的运行结果
11、 以下程序的输出结果是( D )。
int main( )
{
int a[]={1,2,3,4,5,6},*p;
p=a;*(p+3)+=2;
printf("%d,%d\n",*p,*(p+3));
}
(A)0,5 (B)l,5 (C)0,6 (D)1,6
12、 以下程序的输出结果是( D )。
int main( )
{
int a[12]= { 1,2,3,4,5,6,7,8,9,10, 11,12},*p[4], i;
for(i=0;i<4;i++)p[i]=&a[i*3];
printf("%d\n",p[3][2]);
}
(A)输出项不合法,输出结果不定 (B)6 (C)8 (D) 12
13、 以下程序的输出结果为( A )。
char *alpha[6]={ "ABCD","EFGH","IJKL","MNOP","QRST","UVWX"};
char **p;
int main( )
{
int i;
p=alpha;
for(i=0;i<4;i++)printf("%c",*(p[i] ));
printf("\n");
}
(A) AEIM (B) BFJN (C) ABCD (D) DHLP
三、读程序选择填空
14、 以下程序可找出数组中的最大值和此元素的下标,数组元素的值由键盘输入。请从对应的一组选择项中,选择正确的选项填空。
int main()
{
int a[10],*p,*s,i;
printf("Enter a[0] a[1] … a[9l: ");
for(i=0;i<10;i++)
scanf("%d", C );
for(p=a,s=a; A <10;p++)
if(*p>*s)s= A ;
printf("max=%d,index=%d\n", C , C );
}
(1)(A)*(a+i) (B)p+i (C)a+i (D)a[i]
(2) (A) p-a (B) s-a (C) a-p (D) a-s
(3)(A)p (B)a[p] (C)a[s] (D) a-p
(4)(A)a[p-a] (B)a[p] (C)*s (D)a[s]
(5) (A) p-a (B)p (C) s-a (D) a-s
15、 以下程序可输出两个整数中大的那个数,两个整数由键盘输入。请从对应的一组选择项中,选择正确的选项填空。
int main()
{
int a,b,*pl,*p2;
pl= D malloc(sizeof(int));p2= D malloc(sizeof(int));
printf("\nEnter pl p2: ");
scanf("%d%d ", B );
if(*p2>*pl)*pl=*p2;
free(p2);
printf("max=%d\n", A );
}
(l) (A) int (B) int* (C)(int) (D)(int*)
(2)(A)*p1,*p2 (B) pl,p2 (C)&p1,&p2 (D)&a,&b
(3)(A)*p1 (B)*p2 (C) p1 (D) p2
四、读程序回答问题
16、下面程序的输出是( 6 )。
int main( )
{
int a[]={2,4,6},*ptr=&a[0],x=8,y,z;
for(y=0;y<3;y++)
z=(*(ptr+y)<x)?*(ptr+y):x;
printf("%d\n",z);
}
17、下面程序的输出结果是( eybdooG )。
int main( )
{
static char b[ ]="Goodbye";
char *chp=&b[7];
while(--chp>=&b[0])putchar (*chp);
putchar('\n');
}
18、下列程序的输出结果是( 60 )。
int main()
{
int a[3][4]={ 1,3,5,7 ,9, 11,13,15 ,17,19,21,23};
int(*p)[4]=a,i,j,k=0;
for(i=0;i<3;i++)
for(j=0;j<2;j++)
k=k+*(*(p+i)+j);
printf("%d\n",k);
}
posted on 2011-05-31 21:57
DoubleW 阅读(2121)
评论(0) 编辑 收藏 引用