C++指针》习题
学号                姓名             
一、 选择题
1、有定义如下:int a[5], *p; 则下列描述错误的是  B       
A.表达式p=p+1是合法的        B.表达式a=a+1是合法的
C.表达式p-a是合法的        D.表达式a+2是合法的
2、函数定义为Fun(int &i),变量定义n=100,则下面调用该函数正确的
  C       
A.Fun(20)        B.Fun(20+n)        C.Fun(n)        D.Fun(&n)
3、若有说明int I,j=2,*p=&i;则能完成i=j赋值功能的语句是  B       
A.i=*p;    B.*p=*&j;        C.i=&j;        D.i=**p;
4、设已有定义char *st = "how are you";下列程序中正确的是  A       
    A.char a[11],*p;strcpy(p=a+1,&st[4]);
    B.char a[11];strcpy(++a,st);
    C. char a[11];strcpy(a,st);
    D. char a[],*p;strcpy(p=a[1],st+2);
5、设有数组int array[3][4],下列引用数组元素的方法中错误的是  D       
    A.array[i][j]    B.*(*(array+i)+j)
    C. *(array[i]+j)    D. *(array+i*4+j)
6、有定义int s[4][5],(*ps)[5];ps=s;则对数组s中元素引用的正确
的是  C      指针函数的作用
A.ps+1    B.*(ps+3)        C. ps[0][2]        D. *(ps+1)+3
7、设有说明int b[4][4],以下不能等价表示元素b[3][3]的是:  B     
A*&b[3][3]  B(*(*(b+3))+3)    C*(b[3]+3)    D*(*(b+3)+3)
8、若有说明"char *s[]={"234","5678","9012","3456","7890"};",则表达
式*s[1]> *s[3]比较的是  B     
    A."1234"和"9012"  B.'5'和'3'  C.'l'和'9'    D."5678"和"3456"
9、设语句"char *s[]={"Student","Teacher","Father","Mother"},*ps=s[2];",执行语句"cout<<*s[1]<<','<<ps<<','<<*ps<<'\n';",则输出结果是  A     
      A.T,Father,F                B.Teacher,F,Father
      C.Teacher,Father,Father    D.语法错无输出
10、设有以下说明语句:
    char sl[20]="hello",s2[20]="china";const char *ptr=s1;
  以下语句中不符合C++语法规则的语句是  D     
  A.strcpy(s2,ptr);    B.ptr=s2;    C.ptr=ptr+4;    D.*ptr=*s2;
11、设s和t分别为指向两个长度相同的字符数组的指针,则循环语句while(  C      );可以正确实现字符串t到s的完整复制功能。
  A.*s=*t&&*t!=O    B.s++=t++&&*t!=0
C.*s++=*t++      D.*(++s)=*(++t)
12、设有说明:char s1[10],*s2=s1;则以下正确的语句是  C     
A.s1[]=”computer”          Bs1[10]=”computer”
C.s2=”computer”            D*s2=”computer”
13、设有说明:int a[][4]={1,2,3,4,5,6,7,8,9,10},*p=*(a+1);
以下可得数值为9 的表达式是  B     
Ap+=3,*p++          Bp+=4,*(p++)
Cp+=4,*++p          Dp+=4,++*p
14、设有说明:int a[4][4]={1,2,3,4,5,6,7,8,9,10},*p=a[1],(*q)[4]=a;则以下不能访问数值为7的数组元素的表达式是   A     
A *(a+1)+2      B p[2]          C*(a[1]+2)    D q[1][2]
二、填空题
1、在如下定义中 float a[ ]={100,200,300}; float *p[ ]={&a[0], &a[1], &a[2]}; 语句cout<<*p[2]的输出是  300     
2、若有说明语句char *name="newspaper"; 则cout<<name+2的输出是 wspaper ,cout<<*(name+3) 的输出是  s               
3、int a[5]={100, 200,300, 400, 500}, *p1=&a[0];  则表达式(*p1)++的值是  100     
4、有如下定义中char *str[ ]={Follow me, BASIC, Great Wall, Department}中输出BASIC字符串的语句是:cout<<   str[1]     
5、执行以下语句:int a[5]={25,14,27,18},*p=a;(*p)++;
  则 *p的值为  26      ,再执行语句:*p++;则 * p的值为  14       
6、设有说明语句char s[]="123\t456\00089",*p=s;执行以下两个语句:cout<<*(p+5)<<'\n';cout<<(p+5)<<'\n';则输出为   5      56     
7、设有如下函数定义。如果在主函数中有语句cout<<f(“goodbye!”); 则输出    9   
int f(char *s){    char *p=s;
while(*p++);
return(p—s);}
8、执行以下程序后,y的值是  10     
  int main(){
        int a[4]={2,4,6}; int y=0,*p=a;
        for(;*p++;)if(*p)y+=*p;
        cout<<y<<endl;}
9、
三、程序阅读题
1、 写出如下程序的运行结果。
    char s[] = "abcdefgh" ,*p = s;
    p += 3;
    cout<<strlen(strcpy(p,"ABCD"))<<endl;  //4
    cout<<s<<endl;    //abcABCD
2、 写出如下程序的运行结果。
    char *p = "abcdefgh",*r;
    long *q = (long *)p;
    q++;
    r = (char *)q;
    cout<<r<<endl;  //efgh
3、 写出如下程序的运行结果。
void sub(int x,int y,int *z)
{
    *z = y - x;
}
int  main()
{
    int a,b,c;
    sub(10,5,&a);
    sub(7,a,&b);
    sub(a,b,&c);
    cout<<a<<'\t'<<b<<'\t'<<c<<endl;  //-5 -12 -7
    return 0;
}
4、 写出如下程序的运行结果。
void ss(char *s,char t)
{
    while(*s)
    {
        if(*s==t)
            *s = t - 'a' + 'A';
        s++;
    }
}
int  main()
{
    char str1[100]="abcddfefdbd",c='d';
    ss(str1,c);
    cout<<str1<<endl;  //abcDDfefDbD
    return 0;
}
5、void swap(int *p1, int *p2)
{    int *p;
    p=p1; p1=p2; p2=p;
    cout<<*p1<<'\t'<<*p2<<endl;
}
int main(void)
{    int a=5, b=9;
    swap(&a, &b);
    cout<<a<<'\t'<<b<<endl;
    return 0;
}
程序第一行输出  9  5      ,第二行输出  5  9   
6、void exchange(int *x, int *y)
{    int temp;
    temp=*x;
    *x=*y;
    *y=temp;
}
void main(void)
{
    int data[8]={15,12,20,0,8,-5,17,1};
    for(int i=0;i<=7;i++){
        for (int j=i;j<=7;j++){
            if(data[i]>data[j])
                exchange(&data[i], &data[j]);
        }
        cout<<data[i]<<endl;
    }
}
函数exchange的作用是: 交换指针变量指向的数        &data[i]表示的是: data[i]的地址        ,程序的输出结果是:  -5 0 1 8 12 15 17 20   
7、写出如下程序的输出结果
void invert(char*a,int x,int y)
{
    char t,*p,*q;
      p=a+x;
      q=a+y;
      while(p<q)
    {
        t=*p;
        *p=*q;
        *q=t;
        p++;q--;
      }
}
int main()
{     
    char dt[13]="GoodBookNice";
      int i=0,n=1;
      while(i<8)
    {    invert(dt,i,i+5);
          cout<<"第"<<n++<<"次计算:"<<endl;
          for(int j=i;j<=i+5;j++)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。