C语言(指针)单元练习二

1有以下程序:

#include <stdio.h>

void fun( int *a, int i, int j)

{ int t;

if(i<j) { t=a[i]; a[i]=a[j]; a[j]=t;

fun(a,++i,--j);  }  }

main()

{ int a[]={1,2,3,4,5,6},i;

fun(a,0,5);

for(i=0; i<6; i++)

printf("%d ",a[i]); return; }

执行后输出结果是______。A

A.6 5 4 3 2 1     B.4 3 2 1 5 6     C.4 5 6 1 2 3    D.1 2 3 4 5 6

2以下语句的输出结果是______。B

  char s[]="\t\ \chinese\ \girl\n";

  printf("%d",strlen(s));

A. 12   B.15  C. 13    D. 14

3有以下程序:

#include <stdio.h>

void main()

{ char *s[]={"one","two","three"},*p;

p=s[1];

printf("%c,%s\n",*(p+1), s[0]); }

执行后输出结果是______。C

A. n, two         B. t, one         C. w, one        D. o, two

4若已知说明语句:int a, s[3][3]; 则不能将s[2][1]的值赋给变量a的语句是______。D

A. a=s[2][1];   B.a=*(*(s+2)+1);  C. a=*(s[2]+1);   D. a=*(*(s+2)); 

5以下程序的执行结果是______。C

  #include <stdio.h>

  void main()

  {  int  i,*p;

     p=&i;

     *p=8;

     printf("i=%d ",i);

}

A. i为不定值 B. i=0

C. i=8 D.程序有错误

6以下程序:

#include <stdio.h>

char fun(char *p)

{ if(*p>='A'&&*p<='Z')

    *p-='A'-'a';

    return *p;}

main()

{ char s[80],*p=s;

   gets(s);

   while(*p)

   {*p=fun(p);

    putchar(*p);

    p++;}

   return;}

当输入BIG BIG WORLD回车,则输出结果是______。C

A. big big WORLD B. BIG BIG world

C. big big world D. BIG BIG WORLD

7以下程序的运行结果是______。C

#include <stdio.h>

void abc(char *p)

{  int i, j;

 for(i=j=0; *(p+i)!='\0'; i++)

     if(*(p+i)<'n')

     {   *(p+j)=*(p+i);

         j++;  }

 *(p+j)='\0'; }

main()

{  char str[]="morning";

     abc(str);

 puts(str); return; }

A. morig B. morning       C. mig          D. or

8设int x []={4,2,3,1},q,*p=&x[1];则执行语句q=(*--p)++后,变量q的值为 ______。A

A.4              B.3             C.2             D.1

9有以下程序:

#include <stdio.h>

#include <string.h>

void main()

{  char str[][20]={"Hello","Beijing"},*p=str;

printf("%d\n",strlen(p+20)); }

程序运行后的输出结果是______。C

A.0             B.5             C.7             D.20

10定义compare(char *s1, char *s2)函数,以实现比较两个字符串大小的功能,在下划线处应填入的是______。B

#include <stdio.h>

compare(char *s1, char *s2)

{  while(*s1&&*s2&& _______ )

     {  s1++;

        s2++; }

     return *s1-*s2;  }

main()

{  printf("%d\n", compare("abCd", "abc"); return; }

A. *s1!=*s2 B. *s1==*s2 C. *s1=*s2 D. s1!=s2

11如下程序的执行结果是_______。A

#include <stdio.h>

void main()

{  int a[]={2,4,6,8},*p=a,i;

for (i=0;i<4;i++)

       a[i]=*p++;

 printf("%d\n",a[2]); }

A.6             B. 8             C. 4             D. 2

12以下程序的输出结果是______。D

#include <stdio.h>

void 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若已有定义int (*p)(); 则指针p______。B

A. 代表函数的返回值            B. 指向函数的入口地址

C. 表示函数的类型              D. 表示函数返回值的类型

14以下程序段的输出结果是______。D

int **pp,*p,a=10,b=20;

pp=&p;p=&a;p=&b;

printf("%d,%d\n",*p,**pp);

A.10,20         B.10,10           C.20,10        D. 20,20

15阅读以下函数:

fun(char *s1,char *s2)

{ int i=0;

while(s1[i]==s2[i] && s2[i]!='\0') i++;

return (s1[i]=='\0' && s2[i]=='\0');  }

此函数的功能是______。C

A.将s2所指字符串赋给s1。

B.比较s1和s2所指字符串的大小,若s1比s2的大,函数值为1,否则函数值为0。

C.比较s1和s2所指字符串是否相等,若相等,函数值为1,否则函数值为0。

D.比较s1和s2所指字符串的长度,若s1比s2的长,函数值为1,否则函数值为0。

16以下程序的运行结果是______。D

#include <stdio.h>

void fun(char *s);

main()

{  static char str[]="123";

 fun(str);  return;}

void fun(char *s)

{  if(*s)

     {  fun(++s);

        printf("%s\n", --s); }  }

A. 3 B. 123       C. 1           D. 3

   32    12          12              23

   321    1          123              123

17以下程序的输出结果是______。D

#include <stdio.h>

void 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. 1,5           C. 0,6            D. 1,6

18执行以下程序段后,a的值是______。B

  static int s[]={6,8,2,5,4,9,1,3};

  int a=0,i;

  for(i=1;i<8;i+=2)

  a+=*(s+i);

A. 13          B.25           C. 15         D. 不确定

19 有以下程序:

#include <stdio.h>

void fun(char *a, char *b)

{ a=b; (*a)++; }

main()

{ char c1='A',c2='a',*p1,*p2;

p1=&c1; p2=&c2; fun(p1,p2);

printf("%c%c\n",c1,c2); return;  }

程序运行后的输出结果是______。A

A.Ab           B.aa             C.Aa            D.Bb

20在说明语句:int *f();中,标识符f代表的是______。D

A. 一个用于指向整型数据的指针变量。

B. 一个用于指向一维数组的行指针。

C. 一个用于指向函数的指针变量。

D. 一个返回值为指针型的函数名。

21有如下语句说明:

1. char(*ptr)[5];   2. int *fip();      3. int (*pfi)();    4. int **pfpi;

正确的说法是______。B

A.第1个不合法  B.都合法        C.第3个不合法  D.第4个不合法

22以下程序的输出结果为______。D

  static char s[]="language";

  char *p;

  p=s;

  while(*p)

  printf("%c",*p-32);

  p++;

A. LANGUAGE    B. LANG   C. language     D. 陷入死循环

23有以下程序段:

#include <stdio.h>

void main()

{  int a=5,*b,**c;

c=&b; b=&a;

…… }

程序在执行了c=&b;b=&a;语句后,表达式:**c的值是______。C

  1. 变量a的地址  B.变量b中的值  C.变量a中的值  D.变量b的地址

24若有定义char *language[]={"FORTRAN", "BASIC", "PASCAL", "JAVA", "C"}; 则language[2]的值是______。B

A. 一个字符   B. 一个地址   C. 一个字符串   D. 不定值

25以下程序的运行结果是______。D

#include <stdio.h>

void sub(int *x, int y, int z)

{  *x=y-z; }

main()

{  int a, b, c;

     sub(&a, 10, 5);

 sub(&b, a, 7);

 sub(&c, a, b);

     printf("%d,%d,%d\n", a, b, c); return; }

A. 10,-2,5      B. 10,5,7      C. 10,-2,7      D. 5,-2,7

判断

1 《缺失》

2内存单元间接访问是直接根据变量名存取变量的值。N

3int *p[3];定义了一个可指向一维数组的指针变量p,所指一维数组应具有三个int类型元素。N

4以下程序:

#include <stdio.h>

void main()

{  int a[5]={2,1,3,4,5};

           int *p1,*p2,num;

       p1=&a[0];   p2=&a[3];   num=p2-p1;

           printf("num=%d\n",num); }

输出结果为num=2。N

5当指针p指向数组a的首址后,由于p[i]和a[i]都能引用数组元素,所以这里p和a是等价的。N

6数组名代表数组的起始地址。Y

7当两个指针指向同一数组时,两个指针相减的差即为两个指针相隔的元素个数。Y

8各个变量定义为:int i;char c,*s;float f,g;

则表达式 *(s+i)+(int)f和 *s+(int)c均为整型。Y

9以下程序:

#include <stdio.h>

void swap(int *,int *);

main()

{  int a=3, b=8;

           swap(&a, &b);

           printf("a=%d, b=%d\n",a,b); return; }

void swap(int * x , int * y)

{  int temp=*x;  *x=*y;   *y=temp;  }

输出结果为:a=3,b=8。N

10指针变量本身也是一种变量,它存放各种类型数据的地址。Y

填空

1以下程序的运行结果是___________。1 3 5 7 9

#include <stdio.h>

main ( )

  {  static int a[10],i;             

     for (i=0;i<10;i++)  a[i]=i+1;

     for (i=0;i<10;i=i+2)  printf("%d ",*(a+i)); return;} 

2以下函数的功能是删除字符串s中的所有数字字符,请填空。s[i]<'0'|| s[i]>'9' 或 !(s[i]>='0'&&s[i]<='9')

void dele(char *s)

{  int n=0,i;

for(i=0; s[i]; i++)

if (___________ )

s[n++]=s[i];

s[n]= '\0' ;  }

3定义int a[]={1,2,3,4,5},*p=a; 表达式*++p的值是___________。2

4下面程序是判断输入的字符是否中心对称,(如“xyzzyx”和“xyzyx”都中心对称),请填空。p2--

#include <stdio.h>

#include <string.h>

main()

{  char s[100],*p1,*p2;   int n;

gets(s);

n=strlen(s);

p1=s;

p2= s+n-1  ;

while(p1<p2)

if (*p1!=*p2) break;

else {p1++; ___________ ;}

if (p1<p2) printf("NO\n");

else printf("YES\n"); return;}

5以下程序的执行结果是___________。3,4,5,

#include <stdio.h>

void main()

{  int a[5]={3,4,5,6,7};   int i,*p;

for (p=a;p<(a+3);p++)  printf("%d,",*p); }

6若有以下程序:

#include <stdio.h>

int f(int x, int y)

{  return (y-x)*x; }

main()

{  int a=3,b=4,c=5,d;

d = f(f(3,4),f(3,5));

printf("%d\n",d); return; }

执行后输出结果是___________。9

7以下程序的fun函数用于统计字符串s中元音字母(a,A,e,E,i,I,o,O,u,U)的个数,请填空。==*s

#include <stdio.h>

fun(char *s)

{  char a[]="aAeEiIoOuU", *p;

     int n=0;

     while( *s!='\0' )

     {  for(p=a; *p; p++)

          if(*p ___________ )

          {  n++;

             break; }

        s++;  }

     return n;  }

main()

{  char str[255];

     gets(str);

     printf("元音字母的个数为: %d\n", fun(str)); return; }

8以下程序的执行结果是___________。5,2

#include <stdio.h>

void main()

{  int a[2],*p=a;

*p=2;

p++;*p=5;

printf("%d,",*p);

p--;

printf("%d\n",*p); }

9若有定义:int a[3][2]={2,4,6,8,10,12};则*(a[1]+1)的值是___________。8

10以下程序的执行结果是___________。i=10,j=2

#include <stdio.h>

void main()

{  int i,j,*p,*q;

i=2;j=10;

p=&i;q=&j;

*p=10;*q=2;

printf("i=%d,j=%d\n",i,j); }

11以下程序段的输出结果是___________。4

  float a[8]= {1,2,3,4,5,6,7,8};

  float *p1,*p2;

  int b;

  p1=&a[3];

  p2=&a[7];

  b=p2-p1;

  printf("%d\n",b);

12执行以下程序段后,指针变量p所指对象的值为____________。3

  static int a[8]={1,2,3,4,5,6,7,8};

  int *p;

  p=a;

  p++;

  p+=6;

  p--;

  p-=3;

13若有以下定义和语句:

int a[4]={0,1,2,3},*p;

p=&a[2];

则*--p的值是___________。1

14以下程序的执行结果是___________。1,2,3,4,5,

#include <stdio.h>

void main()

{  int a[5]={1,2,3,4,5};

int i;

for (i=0;i<5;i++)  printf("%d,",*(a+i)); }

15当程序输入0 -5 3时,程序依次输出哪三个数? ___、___、___。-5 0 3

#include <stdio.h>

#define SIZE 3

void swap(int *a,int *b);

main()

{  int data[SIZE];

int i,j;

for(i=0;i<SIZE;i++)  scanf("%d",&data[i]);

for(i=0;i<SIZE-1;i++)

for(j=i+1;j<SIZE;j++)

if(data[i]>data[j])  swap(&data[i],&data[j]);

for(i=0;i<SIZE;i++)  printf("%d ",data[i]); return; }

void swap(int *a,int *b)

{  int temp;

temp=*a;*a=*b;*b=temp;  }