当前位置:编程学习 > C/C++ >>

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

一、选择题

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 ",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)<x)?*(ptr+y):x;

    printf("%d ",z);

}

 

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

int main( )

{

       static char b[ ]="Goodbye";

补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,