公告:本站提供编程开发方面的技术交流与分享,打造最佳教程网,希望能为您排忧解难!

C语言教程C语言习题集9 指针

C语言习题集9 指针

更新时间:2013-04-13 07:18:37 |

九、指针

一、选择题
1.变量的指针,其含义是指该变量的_________.
  a)值              b)地址
  c)名              d)一个标志
 
2.若有语句int *point,a=4;和point=&a;下面均代表地址的一组选项是_____.
  a)a,point,*&a             b)&*a,&a,*point
  c)*&point,*point,&a       d)&a,&*point ,point
 
3.若有说明;int *p,m=5,n;以下正确的程序段的是________.
 a)p=&n;               b)p=&n;
   scanf("%d",&p);       scanf("%d",*p);
 c)scanf("%d",&n);      d)p=&n;
   *p=n;                  *p=m;
 
4.下面程序段的运行结果是_________.
  char *s="abcde";
  s+=2;printf("%d",s);
  a)cde     b)字符'c'     c)字符'c'的地址     d)无确定的输出结果
 
5.设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确
执行的赋值语句是________.
a)c=*p1+*p2;    b)p2=c    c)p1=p2      d)c=*p1*(*p2);
 
6.以下正确的程序段是_________.
  a)char str[20];                    b)char *p;
    scanf("%s",&str);                  scanf("%s",p);
  c)char str[20];                    d)char str[20],*p=str;
    scanf("%s",&str[2]);               scanf("%s",p[2]);
 
7.若有说明语句
   char a[]="It is mine";
   char *p="It is mine";
  则以下不正确的叙述是________.
  a)a+1表示的是字符t的地址
  b)p指向另外的字符串时,字符串的长度不受限制
  c)p变量中存放的地址值可以改变
  d)a中只能存放10个字符
 
8.下面程序的运行结果是_______.
  #include  <stdio.h>
  #include  <string.h>
  main()
  {
    char *s1="AbDeG";
    char *s2="AbdEg";
    s1+=2;s2+=2;
   printf("%d\n",strcmp(s1,s2));
  }
  a)正数    b)负数   c)零   d)不确定的值
 
9.下面程序的运行结果是_______.
  #include  <stdio.h>
  #include  <string.h>
  fun(char *w,int n)
   {char t,*s1,*s2;
    s1=w;s2=w+n-1;
    while(s1<s2){t=*s1++;*s1=*s2--;*s2=t;}
  }
  main()
{char *p;
  p="1234567";
  fun(p,strlen(p));
  puts(p);
  }
 
a)7654321   b)1714171   c)1711717   d)7177171
 
10.若有以下定义,则对a数组元素的正确引用是_________.
 int a[5],*p=a;
 a)*&a[5]   b)a+2  c)*(p+5)  d)*(a+2)
 
11.若有定义:int a[2][3],则对a数组的第i行j列元素地址的正确引用为______.
  a)*(a[i]+j)   b)(a+i)   c)*(a+j)  d)a[i]+j
 
12.若有以下定义,则p+5表示_______.
  int  a[10],*p=a;
  a)元素a[5]的地址             b)元素a[5]的值
  c)元素a[6]的地址             d)元素a[6]的值


1.以下程序的功能是:通过指针操作,找出三个整数中的最小值并输出。
请填空。
  #include "stdlib.h"
  main()
  {int *a,*b,*c,num,x,y,z;
   a=&x;b=&y;c=&z;
   printf("输入3个整数:");
   scanf("%d%d%d",a,b,c);
   printf("%d,%d,%d\n",*a,*b,*c);
   num=*a;
   if(*a>*b)______;
   if(num>*c)______;
   printf("输出最小整数:%d\n",num);
  }
 
2.下面程序段的运行结果是________.
  char s[80],*sp="HELLO!";
  sp=strcpy(s,sp);
  s[0]='h';
  puts(sp);
 
3.下面程序段的运行结果是________.
  char str[]="abc\0def\0ghi",*p=str;
  printf("%s",p+5);
 
4.下面程序的功能是将两个字符串s1和s2连接起来。请填空。
   #include<stdio.h>
  main()
  {char s1[80],s2[80];
  gets(s1); gets(s2);
   conj(s1,s2);
   puts(s1);
  }
  conj(char *p1,char *p2)
    {char *p=p1;
   while(*p1)______;
   while(*p2){*p1=______;p1++;p2++;}
   *p1='\0';
   __________;
  }
 
5.若有定义:int a[]={2,4,6,8,10,12},*p=a;则*(p+1)的值是______. *(a+5)的值是_________.
6.若有以下定义:int a[2][3]={2,4,6,8,10,12};则a[1][0]的值是_____. *(*(a+1)+0))的值是________.
7.以下程序将数组a中的数据按逆序存放,请填空。
  #define M 8
  main()
  {int a[M],i,j,t;
   for(i=0;i<M;i++)scanf("%d",a+i);
   i=0;j=M-1;
   while(i<j)
    {
     t=*(a+i);________;*(_______)=t;
     i++;j--;
     }
  for(i=0;i<M;i++)printf("%3d",*(a+i));
 }
 
8.若有定义:int a[3][5],i,j;(且0<=i<3,0<=j<5),则a数组中任一元素可用
五种形式引用。它们是:
  (1)a[i][j]
  (2)*(a[i]+j)
  (3)*(*______);
  (4)(*(a+i))[j]
   (5)*(____+5*i+j)
 
9.下面程序的运行结果是_________.
  main()
  {char *a[]={"Pascal","C language","dBase","Coble"};
   char (**p)[];
   int j;
   p=a+3;
   for(j=3;j>=0;j--)printf("%s\n",*(p--));
  }

最佳教程网

最大的技术交流平台 www.goodxyx.com© CopyRight 2011-2013, All Rights Reserved

浙ICP备11033019号