C++基础学习笔记(3)--指针(测试题)(一)

2014-11-24 13:01:21 · 作者: · 浏览: 2

一、选择题

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

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 ",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 ",*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 ",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(" ");

}

(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 ", 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(" Enter pl p2: ");

scanf("%d%d ", B );

if(*p2>*pl)*pl=*p2;

free(p2);

printf("max=%d ", 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)

printf("%d ",z);

}

17、下面程序的输出结果是( eybdooG )。

int ma