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

1下列语句的输出结果是______。C

  int **pp,*p,a=5,b=8;

  pp=&p;p=&a;p=&b;printf("%d,%d",*p,**pp);

 A. 5,8   B.8,5      C. 8,8            D. 5,5

2如下程序的输出结果是______。B

#include <stdio.h>

#include <ctype.h>

#include <string.h>

void fun(char *p)

{ int i,k;

   char s[30];

   for(i=0,k=0;p[i]!='\0';i+=2)

     if(!isspace(*p+i)&&(*(p+i)!='a'))

       s[k++]=p[i];

   s[k]='\0';

   strcpy(p,s);}

main()

{ char s[30]="p r o g ra m e";

   fun(s);

   puts(s);

   return;}

A.programe B.progr  C. ame   D. emargorp

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

  char s[]="one",*p=s;

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

A. 字符e的地址   B. 0  C. 12    D. 20

4以下函数的功能是比较两个字符串s和t的大小,函数中应填入______。D

comp(char *s, char *t)

{  for (;*s==*t;______)

     if (*s=='\0')

       return(0);

return(*s-*t);  }

A. s++          B. t++          C. s++;t++        D. s++,t++

5以下程序段的结果为______。B

  static char s[]="language";

  char *p;

  for(p=s;p<s+8;p+=2)

  putchar(*p);

A. language      B. lnug       C. agae          D. 语法错误

6以下程序中调用scanf函数给变量a输入数值的方法是错误的,其错误原因是______。B

#include <stdio.h>

void main()

  {  int *p,a;     p=&a;

     printf("input a:");

     scanf("%d",*p);

     …   }

A. *p表示的是指针变量p的地址。

B. *p表示的是变量a 的值,而不是变量a的地址。

C. *p表示的是指针变量p的值。

D. *p只能用来说明p是一个指针变量。

7在int (*p)[3]; 定义中,标识符p______。C

A.定义非法。

B.是一个指针数组,每个元素是一个指向整型变量的指针。

C.是一个指针,指向一个具有三个元素的一维数组。

D.是一个指向整型变量的指针。

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

#include <stdio.h>

void main()

{  int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};

int (*p)[4]=a,i,j,k=0;

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

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

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

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

A. 60           B. 68            C. 99            D. 108

9能正确执行x和y交换且返回结果的函数是______。A

A. fun(int *x,int *y)                  B. fun(int x,int y)

    {  int p;                           {  int t;

       p=*x;*x=*y;*y=p; }                  t=x;x=y;y=t; }

C. fun(int *x,int *y)                  D. fun(int *x,int *y)

{  *x=*y;*y=*x;  }                 {  *x=*x-*y;  }

10若已知:int x;  int y; 则下面表达式合法的是______。A

A. &x           B. &(x+y)        C.&5            D.&(y+1)

11下列程序段运行后输出______。D

  char s1[5],s2[]="enjoy";

  s1=s2;

  printf("%s",s1);

A.enjoy   B.joy  C. en   D. 编译出错

12以下程序调用findmax函数返回数组中的最大值,在下划线处应填入的是______。B

#include <stdio.h>

findmax(int *a,int n)

{ int *p,*s;

for(p=a,s=a; n>0;n--,p++)

if (_______) s=p;

return(*s);  }

main()

{ int x[5]={12,21,13,6,18};

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

A. p>s          B. *p>*s         C. a[p]>a[s]       D. p-a>p-s

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

#include <stdio.h>

void main()

{  int a=100,b=10,*p1,*p2;

p1=&b;p2=&a;

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

A.分别是a和b的地址            B. 不确定的值

C. 10,100                       D. 100,10

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

#include <stdio.h>

void main()

{  char a[]="you are a boy",b[20];

int i;

for (i=0;*(a+i)!='\0';i++)  *(b+i)=*(a+i);

     *(b+i)='\0';

for (i=0;b[i]!='\0';i++)  printf("%c",b[i]); }

A.不确定的值                    B.字符串a的地址

C. you are a boy                   D.数组b的地址

15若有以下说明和语句, 则p2-p1的值为多少______。A

int a[10], *p1, *p2;

p1=a;

p2=&a[5];

A. 5                            B. 6             

C. 10                           D. 没有指针与指针的减法

16已定义以下函数:fun(int *p) { return *p; }该函数的返回值是______。C

A.不确定的值                    B.形参p中存放的值

C.形参p所指存储单元中的值      D.形参p的地址值

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

#include <stdio.h>

void main()

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

     int *p[4], j;

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

     p[j]=a[j];

     printf("%2d,%2d,%2d,%2d\n", *p[1], (*p)[1], p[3][2], *(p[3]+1));

}

A. 4, 4, 9, 8        B. 程序出错    C. 4, 2,12,11     D. 1, 1, 7, 5

18以下程序的输出结果是______。B

#include <stdio.h>

char cchar(char ch)

{  if(ch>='A'&&ch<='Z') ch=ch-'A'+'a';

return ch;  }

main()

{  char s[]="ABC+abc=defDEF",*p=s;

while(*p)

{  *p=cchar(*p);

p++;  }

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

A. abc+ABC=DEFdef             B. abc+abc=defdef

C. abcaABCDEFdef               D. abcabcdefdef

19已定义以下函数

fun(char *p2, char *p1)

{ while((*p2=*p1)!='\0'){ p1++;p2++; } }

函数的功能是:______。A

A.将p1所指字符串复制到p2所指内存空间。

B.将p1所指字符串的地址赋给指针p2。

C.对p1和p2两个指针所指字符串进行比较。

D.检查p1和p2两个指针所指字符串中是否有'\0'。

20执行以下语句后,a的值为______。C

  int a,b,c,x=3,y=7,z=6;

  int *p1=&x,*p2=&y,*p3;

  a=p1==&x;

  b=2*(-*p2)/(*p1)+5;

  c=*(p3=&z)=*p1*(*p2);

A. -1    B. 0 C. 1    D.

21有以下程序:

#include <stdio.h>

void main()

{ char str[]="xyz",*ps=str;

while(*ps) ps++;

for(ps--; ps-str>=0;ps--) puts(ps); }

执行后输出结果是______。C

A. yz           B. z             C. z            D.  x

   xyz             yz               yz               xy

   xyz                              xyz

22有以下程序:

#include <stdio.h>

void main( )

{ int a[][3]={{1,2,3},{4,5,0}},(*pa)[3],i;

pa=a;

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

if(i<2) pa[1][i] = pa[1][i]-1;

else pa[1][i]=1;

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

执行后输出结果是______。A

A.7            B.6            C.8             D.无确定值

23下列语句执行后输出的结果是______。A

  char *s1="world",*s2="word";

  printf("%d\n",strlen(strcpy(s1,s2)));

A.4   B.5     C. 6             D. 7

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

#include <stdio.h>

void main()

{  static char a[3][3]={{'A','B','C'},{'D','E','F'},{'G','H','I'}};

int i;

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

A. AEI                          B. 不确定的值

C. ABC                         D. 分别为a[i][j]的地址

25执行以下程序后,b的值为______。A

#include <stdio.h>

void main()

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

    int i,b=1,*p;

    p=&a[1];

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

      b*=*(p+i);

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

    }

A.192   B.384  C. 64   D. 1152

判断

1一个数组的名字实际上是一个指针表达式。Y

2指针变量可以进行加减乘除运算。N

3 int *p表示定义了一个指向int类型数据的指针变量p。Y

4指针变量是把另一个变量的值作为其值的变量。N

5指针须先赋值后使用。Y

6以下程序:

#include <stdio.h>

void test(int x[],int n)

{   for(int i=0 ; i<n; i++)   printf("%d",*x++ );   }

main()

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

           test(a,10); return; }

能正确输出a数组的值。N

7以下定义中int (*p)[4]与int *p[4]是等价的。N

8若有语句:int a=14, *p=&a;,则a,p,&*a均代表地址。N

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

10以下程序:

#include <stdio.h>

void main()

{  int x=2, y ;   int *px=&x;

           *(px+1)=5;    y=*++px;

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

输出结果为y=5。Y

填空

1在C程序中,可以通过指针变量加一个整型常量 、指针变量减一个整型常量、___________三种运算移动指针。指针赋地址值

2以下程序的运行结果为___________。        1711717           

#include <stdio.h>

#include <string.h>

void fun(char *p,int n)

{  char k,*p1,*p2;

     p1=p;

       p2=p+n-1;

while(p1<p2)

{k=*p1++;

         *p1=*p2--;

         *p2=k;}  }

main()

{  static char s[]="1234567";

       fun(s,strlen(s));

       puts(s); return;  }

3若有数组a[10],类型为int型,元素及值如下所示:

数组元素: a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]

元素中的值:9  4   8  3  2   6  7  0  1  5

则*(a+a[9])的值为___________。6

4以下程序完成查找某个数字在数组a中的位置的功能,请填空。a++

#include <stdio.h>

int *find(int a[],int n, int x)

{  int i=0;

     while(i<n && *a!=x)

      ___________,i++;

     if (i<n)   return a;

     else  return NULL;  }

main()

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

     int *p, x ;

     printf("find what number?\n");

     scanf("%d",&x);

     p=find(a,10,x);

     if (p!=NULL)   printf("%d at a[%d]",x, p-a);  return;  }

5以下程序的输出结果是___________。Sapporo

#include <stdio.h>

void main()

{  char *a[4]={ "Tokyo","Osaka","Sapporo","Nagoya"};

printf("%s",*(a+2)); }

6以下程序用来输出字符串,请填空。*p

#include <stdio.h>

void main()

{  char *a[]={"for", "switch", "if", "while"};

     char **p;

     for(p=a; p<a+4; p++)

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

7二维数组元素a[i][j]可用指针形式表示成*(___________)。a[i]+j

8执行以下程序段后, s的值是___________。16

int a[]={5,3,7,2,1,5,3,10},s=0,k;

  for(k=0;k<8;k+=2)  s+=*(a+k);

9以下程序运行后输入:3,abcde<回车>,则输出结果是___________。 cdeab

#include <stdio.h>

#include <string.h>

void move(char *str, int n)

{  char temp; int i;

temp=str[n-1];

for(i=n-1;i>0;i--) str[i]=str[i-1];

str[0]=temp;  }

main()

{  char s[50]; int n, i, z;

scanf("%d,%s",&n,s);

z=strlen(s);

for(i=1; i<=n; i++) move(s, z);

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

10以下程序的执行结果是___________。0,6

#include <stdio.h>

void main()

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

p=a;

*(p+4)+=2;

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

11以下程序完成查找某个字符串是否在数组name中的功能,请填空。i<5

#include <stdio.h>

#include<string.h>

main()

{char *name[5]={"Li Hua","He Xiao Ming","Zhang Li","Sun Fei","Chen Bao"};

   char in_name[20];   int i, flag=0;

   printf("Enter your name:");

   gets(in_name);

   for(i=0; ___________; i++)

     if (strcmp(name[i],in_name)==0)  { flag=1; break; }

   if (flag==1)  printf("%s is in our class.\n", in_name);

   else  printf("%s is not in our class.\n", in_name); return; }

12以下程序的执行结果是___________。1357

#include <stdio.h>

void main()

{  char ch[2][5]={"1234","5678"},*p[2];

int i,j,s=0;

for (i=0;i<2;i++)  p[i]=ch[i];

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

         for (j=0;p[i][j]>'\0' && p[i][j]<='9';j+=2)

           s=10*s+p[i][j]-'0';

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

13以下程序的输出结果是___________。efgh

#include <stdio.h>

void main()

{  char *p="abcdefgh",*r;

long *q;

q=(long*)p;

q++;

r=(char*)q;

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

14在C程序中,可以通过地址运算符&  、malloc函数、___________三种方式为指针变量赋地址。赋值语句

15以下程序的执行结果是___________。6

#include <stdio.h>

void main()

{  int a[]={2,4,6},*p=&a[0],x=8,y,z;

for (y=0;y<3;y++)  z=(*(p+y)<x)?*(p+y):x;

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

  • 23
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Eternal_U

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值