C语言(指针)单元练习

一.选择题

1.下列程序的输出结果是______。                  A

#include <stdio.h>

#include <string.h>

main()

{ char *p1,*p2,s[10]="12345";

   p1="abcde";

   p2="ABCDE";

   strcpy(s+2,p1+3);

   strcat(s,p2+2);

   printf("%s",s);

   return;}

A. 12deCDE   B.12abcAB  C. cdABC45    D. abcBDE

2. 以下程序运行之后的输出结果是______。           B

  #include <stdio.h>

  void main()

  {  int  *p,*p1,*p2,a=3,b=7;

     p1=&a; p2=&b;

     if(a<b) { p=p1;p1=p2;p2=p; }

     printf("%d,%d ",*p1,*p2);

     printf("%d,%d",a,b);

}

A. 3,7 7,3 B. 7,3 3,7

C. 7,3 7,3 D. 3,7 3,7

3. 以下函数的功能是______。                     B

  fun(int *p1,*p2)

  {int *p;

   *p=*p1;

   *p1=*p2;

   *p2=*p;}

A. 正确,但没有交换*p1和*p2的值。

B. 使用了空指针,可能造成系统故障。

C. 能成功交换*p1和*p2的值。

D. 能成功交换*p1和*p2的地址。

4. 有以下程序:                 B

#include <stdio.h>

void main()

{ int x[8]={8,7,6,5,0,0},*s;

s=x+3;

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

执行后输出结果是______。

A.随机值         B.0             C.5            D.6

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

#include <stdio.h>

#include <string.h>

void main()

{  char b1[8]="abcdefg",b2[8],*pb=b1+3;

while (--pb>=b1)  strcpy(b2,pb);

printf("%d\n",strlen(b2)); }

A. 8            B. 3            C. 1             D. 7

6. 若有以下说明:                                       D

int w[3][4]={{0,1},{2,4},{5,8}};

int (*p)[4]=w;

则数值为4的表达式是______。

A. *w[1]+1      B. p++,*(p+1)     C. w[2][2]       D. p[1][1]

7. 以下程序的输出结果是______。                   A

#include <stdio.h>

int i;

fun(int a, int *b);

main()

{  int i=1, j=2;

     fun(fun(i, &j), &j); return; }

fun(int a, int *b)

{  static int m=2;

     i+=m+a;

     m=++(*b);

     printf("%d,%d\n", i, m);

     return (m);  }

A. 3,3           B. 3,3          C. 3,3           D. 3,3

   9,4             6,3             9,3              6,4

                      6.4

8. 若有语句:int a=4, *p=&a;,下面均代表地址的一组选项是______。   C

A. a,p,&*a      B. *&a,&a,*p     C. &a,p,&*p      D. *&p,*p,&a

9. 以下程序的输出结果为______。            C

#include <stdio.h>

void main()

{  char s[]="123",*p;

 p=s;

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

A. 123       B. 231       C. 321      D. 312

10. 以下程序的输出结果是______。          A

#include <stdio.h>

void main()

{ static char s1[]="programe",s2[]="language";

   char *p1,*p2;   int i;

   p1=s1;   p2=s2;

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

     if(*(p1+i)==*(p2+i))

       printf("%c",*(p1+i));

   }

A. gae   B.ga  C. pro    D. lang

11. 以下定义中与int *p[4]等价的是______。           C

A. int p[4]       B. int *p         C. int *(p[4])     D. int (*p)[4]

12. 以下程序的运行结果是______。               A

#include <stdio.h>

void main()

{  char *s="xcbc3abcd";

 int a, b, c, d;

 a=b=c=d=0;

     for(; *s; s++)

       switch(*s)

       {  case 'c': c++;

          case 'b': b++;

          default : d++; break;

          case 'a': a++;    }

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

A. a=1,b=5,c=3,d=8                 B. a=1,b=2,c=3,d=3

C. a=9,b=5,c=3,d=8                D. a=0,b=2,c=3,d=3

13. 设char *aa[2]={"abcd","ABCD"}; 则以下说法中正确的是______。  C

A. aa数组元素的值分别是"abcd"和"ABCD"。

B. aa是指针变量,它指向含有两个数组元素的字符型一维数组。

C. aa数组的两个元素分别存放的是含有4个字符的一维字符数组首地址。

D. aa数组的两个元素中各自存放了字符'a'和'A'的地址。

14. 已知函数定义如下:                                      B

  fun (char *p1)

  {  char *p2=p1;

     while(*p2!= '\0')

     p2++;

     return (p2-p1); }

在主函数中用语句printf("%d",fun("hello world!"));调用上述函数,则输出结果为______。

A. 13          B.12           C. 11          D. 10

15. 若有以下定义:int a[]={1,2,3,4,5,6,7,8,9,10}, *p=a; 表达式的值为3的是______。A

A. p+=2,*(p++)   B. p+=2,*++p      C. p+=3,*p++   D. p+=2,++*p

16. 以下程序段执行完后,a的值为______。A

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

  int a,*p;

  p=&s[0][1];

  a=(*p)*(*p+3)*(*p+5);

A. 24    B. 15   C. 28    D. 不确定

17设x为一数字字符,则其所对应的十进制数值为______。B

A.x             B.x-‘0’          C.*x             D.&x

18以下程序中函数scmp的功能是返回形参指针s1和s2所指字符串中较小字符串的首地址,若运行时依次输入:abcd、abba和abc三个字符串,则输出结果为______。B

#include <stdio.h>

#include <string.h>

char *scmp(char *s1, char *s2)

{  if(strcmp(s1,s2)<0)

return(s1);

else return(s2);  }

main()

{  int i; char string[20], str[3][20];

for(i=0;i<3;i++) gets(str[i]);

strcpy(string,scmp(str[0],str[1]));

strcpy(string,scmp(string,str[2]));

printf("%s\n",string); return;}

A.abcd          B.abba          C.abc           D.abca

19. 以下程序的输出结果是______。A

  #include <stdio.h>

void main()

{  int *p1,*p2,*p,a=7,b=9;

     p1=&a;p2=&b;

     if(a<b)  {p=p1;p1=p2;p2=p;}

     printf("%d,%d ",*p1,*p2);

     printf("%d,%d ",a,b);  }

A. 9,7  7,9       B. 7,9  7,9   C. 7,9  9,7      D. 9,7  9,7

20. 有以下程序:                    B

#include <stdio.h>

int *f(int *x, int *y)

{  if (*x < *y)  return x;

else  return y;  }

main()

{ int a=7,b=8,*p,*q, *r;

p=&a; q=&b;

r = f(p,q);

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

执行后输出结果是______。

A.7,8,8          B.7,8,7          C.8,7,7          D.8,7,8

21. 已知有以下的说明,那么执行语句a=p+2;后, a[0]的值等于多少______。       D

float a[3]={1.2,45.6,-23.0};

float *p=a;

A. 1.2          B. 45.6           C. -23.0         D. 语句有错

22. 如下程序的执行结果是______。                                     C

#include <stdio.h>

void main()

{  int p1,m1,n1,dv,df;

char *p="a+b-c+d/e",c;

p1=m1=n1=dv=df=0;

while ((c=*p++)!='\0')

{  switch(c)

        {  case '+':p1++;break;

           case '-':m1++;break;

           case '*':n1++;break;

           case '/':dv++;break;

           default:df++;  }  }

printf("%d,%d,%d,%d\n",p1,m1,dv,df);  }

A.2,1,0,1        B. 2,1,0,5        C. 2,1,1,5        D. 2,1,1,2

23. 有以下程序:                    B

#include <stdio.h>

void main()

{ int a[3][3],*p,i;

p=&a[0][0];

for(i=0;i<9;i++) p[i]=i+1;

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

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

A.3             B.6             C.9             D.2

24. 如下程序的执行结果是______。A

#include <stdio.h>

void main()

{  int a[3][3]={{2},{4},{6}},i,*p=&a[0][0];

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

{  if (i==0) a[i][i+1]=*p+1;

        else ++p;

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

printf("\n"); }

A. 23           B. 26            C. 33            D. 36

25. 已知char s[]="789",*p;则执行下列语句后的输出是______。B

  p=s;

  printf("%c",*(p+2));

A.字符'8' B.字符'9' C.字符'8' 的地址 D.字符'9'的地址

二、判断题

1.(对)以下程序:

#include <stdio.h>

int fun(int array[],int n)

{  int m=0,i;

           for(i=0; i<n; i++)   { m+=*array; array++; }

           return m;  }

main()

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

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

其输出结果是1~10的总和。   

2.(对)有如下定义:int a[]={1,3,5,7,9}, i, *p ;

则语句:

for(i=0; i<5; i++)  printf("a[%d]=%d\t",i,a[i]);

与语句:

for(p=a, i=0; i<5; i++)  printf("a[%d]=%d\t",i,p[i]); 等价的。

3.(错)以下程序:

#include <stdio.h>

main()

{  int i=10,*p;

           p=&i;     *p=5;

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

输出结果为10。

4.(错)在定义:int *fun();中,标识符fun是一个用于指向函数的指针变量。

5.(错)可通过int *i=NULL;  scanf("%d",i);  正确进行整数赋值。

6.(错)指针加1表示每次向下移动1个字节。

7.(对)相同类型的指针可以进行减法运算。

8.(错)函数fun(int *p){ return *p; }的返回值是不确定的值。

9.(错)使用指针变量作函数参数采取的是"值传递"的方式。

10.(对)如果数组中每个元素都是具有相同的数据类型的指针,则这种数组称为指针数组。

三、填空题

1. 以下程序的执行结果是___12________。

#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]); }

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

3. 已知有以下的说明,

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

那么a[*(a+a[3])]的值为_____0______。

4. 在C程序中,指针变量的值增1,表示指针变量指向______下一个_____存储单元。

5. 以下程序中,select 函数的功能是:在N行M列的二维数组中,选出一个最大值作为函数值返回,并通过形参传回此最大值所在的行下标,请填空。row

#include <stdio.h>

#define N 3

#define M 3

select(int a[N][M],int *n)

{  int i,j,row=1,colum=1;

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

for(j=0;j<M;j++)

if(a[i][j]>a[row][colum]){row=i;colum=j;}

*n=______row_____;

return  a[row][colum];  }

main()

{  int a[N][M]={9,11,23,6,1,15,9,17,20},max,n;

max=select(a,&n);

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

6. 输入10个整数存入一维数组,从中查找某个整数X,查到则输出其是第几个数,查不到则输出“Not Find!”。请填空。

  #include <stdio.h>

  void main ()

  {  int a[10],*p=a,x,n,flag=0;

     for (;p<a+10;p++) scanf ("%d",p);

     scanf ("%d",&x);

     for (n=1,p=a; ______n<=10_____ ;p++,n++)

        if (*p==x) {flag = 1;break;}

     if (! flag) printf ("Not Find! \n");

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

7. 执行以下程序后,输出结果为_564379207816xyz__________。       

#include <stdio.h>

void main()

{  char *s[6]={"564","379","207","816","xyz","abc"};

     char **p;

     int i;

     p=s;

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

       printf("%s",p[i]);

     }

8. 一个专门用来存放另一个变量地址的变量叫___指针变量________。

9. 以下程序的执行结果是___ch=f________。

#include <stdio.h>

void main()

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

p=a;

*(p+3)+=2;

printf("ch=%c\n",*(p+5)); }

10. 以下程序的执行结果是______a=100_____。

#include <stdio.h>

void main()

{  int a=50,*p;

p=&a;

*p=100;

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

11. 以下程序的输出结果是__7_________。

#include <stdio.h>

void sub(int *a,int n,int k);

main()

{  int x=0;

sub(&x,8,1);

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

void sub(int *a,int n,int k)

{  if(k<=n) sub(a,n/2,2*k);

*a+=k;  }

12. mystrlen函数的功能是计算str所指字符串的长度,并作为函数值返回。

请填空。

int mystrlen(char *str)

{  int i;

for(i=0; __*(str+i)或str[i]_________!='\0';i++);   return i;   }

13. 以下程序的执行结果是___s=24________。

#include <stdio.h>

void main()

{  int a[]={2,3,4},*p,s,i;

s=1;p=a;

for (i=0;i<3;i++)   s*=*(p+i);

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

14. 执行以下程序段后,a的值为___4________。

  static int s[]={5,8,4,6,10,7};

  int a,i,*p;

  a=10; p=&s[0];

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

    a=(*(p+i)<a)?*(p+i):a;

15. 执行以下程序段后,m的值是____6_______。

  int a[]={7,4,6,3,10},m,k,*ptr;

  m=10;

  ptr=&a[0];

  for(k=0;k<5;k+=2)  m=(*(ptr+k)<m)?*(ptr+k):m;

相关推荐

  1. C语言指针单元练习

    2024-03-15 05:16:02       31 阅读
  2. C语言指针单元练习

    2024-03-15 05:16:02       33 阅读
  3. C语言(循环)单元练习

    2024-03-15 05:16:02       32 阅读
  4. C语言(数组)单元练习

    2024-03-15 05:16:02       38 阅读
  5. c语言练习

    2024-03-15 05:16:02       50 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-15 05:16:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-15 05:16:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-15 05:16:02       87 阅读
  4. Python语言-面向对象

    2024-03-15 05:16:02       96 阅读

热门阅读

  1. 知识点总结,c,c++的各种知识点

    2024-03-15 05:16:02       36 阅读
  2. https部署的几个坑

    2024-03-15 05:16:02       43 阅读
  3. 12种常见的网络钓鱼

    2024-03-15 05:16:02       35 阅读
  4. 力扣每日练习3.14

    2024-03-15 05:16:02       39 阅读
  5. 大数据学习

    2024-03-15 05:16:02       38 阅读
  6. SpringBoot mvc返回中文会变问号

    2024-03-15 05:16:02       43 阅读
  7. 旅游市场游客满意度调查报告

    2024-03-15 05:16:02       36 阅读