*p2)max=*p1;elsemax=*p2;printf("max=%d\n",max);}2、用间接引用求出三个数中的最大数。main(){intx,y,z,max," />
当前位置:文档之家› 指针典型例题

指针典型例题

2007-06-26 11:46指针应用程序设计

1、用间接引用求出两个数中的最大数。

main()
{int x,y,max,*p1,*p2;
p1=&x;
p2=&y;
scanf("%d%d",p1,p2);/*或scanf("%d%d",&x,&y);*/
if(*p1>*p2)
max=*p1;
else
max=*p2;
printf("max=%d\n",max);
}

2、用间接引用求出三个数中的最大数。

main()
{int x,y,z,max,*p1,*p2,*p3;
p1=&x;
p2=&y;
p3=&z;
scanf("%d%d%d",p1,p2,p3);/*或scanf("%d%d%d",&x,&y,&z);*/
if(*p1>*p2)
max=*p1;
else
max=*p2;
if(*p3>max)
max=*p3;
printf("max=%d\n",max);
}

3、用间接引用将两个数按升序排序并输出。

main()
{float a,b,t,*p1,*p2;
p1=&a;
p2=&b;
scanf("%f%f",p1,p2);/*或scanf("%f%f",&a,&b);*/
if(*p1>*p2)
{t=*p1;*p1=*p2;*p2=t;}
printf("%f,%f\n",*p1,*p2);
}

4、用间接引用将三个数按升序排序并输出。

main()
{float a,b,c,t,*p1,*p2,*p3;
p1=&a;
p2=&b;
p3=&c;
scanf("%f%f%f",p1,p2,p3);/*或scanf("%f%f%f",&a,&b,&c);*/
if(*p1>*p2)
{t=*p1;*p1=*p2;*p2=t;}
if(*p1>*p3) /*不能写作else if(*p1>*p3)*/
{t=*p1;*p1=*p3;*p3=t;}
if(*p2>*p3) /*不能写作else if(*p2>*p3)*/
{t=*p2;*p2=*p3;*p3=t;}
printf("%f,%f,%f\n",*p1,*p2,*p3);
}

5、编写交换两个变量值的函数,并调用该函数交换主函数中两个变量的值(不能使用全局变量传递数据)。

void swap(int *p1,int *p2)
{int t;
t=*p1;
*p1=*p2;
*p2=t;
}
main()
{int a,b;
scanf("%d%d",&a,&b);
swap(&a,&b);
printf("a=%d,b=%d\n",a,b);
}

5A、编写交换两个变量值的函数,并调用该函数对三个数按升序排序(不能使用全局变量传递数据)。

void swap(float *p,float *q)
{float t;
t=*p;
*p=*q;
*q=t;
}
main()
{float a,b,c;
scanf("%f%f%f",&a,&b,&c);
if(a>b) swap(&a,&b);
if(a>c) swap(&a,&c); /*不能写作else if(a>c)*/
if(b>c) swap(&b,&c); /*不能写作else if(b>c)*/
printf("%f,%f,%f\n",a,b,c);
} 

6、编写求两个数中最大数的函数,并调用该函数求出主函数中两个数中的最大数(不能使用全局变量或return语句传递数据)。

void max(int x,int y,int *p)
{int m;
if(x>y)
m=x;
else
m=y;
*p=m;
}
main()
{int a,b,r;
scanf("%d%d",&a,&b);
max(a,b,&r);
printf("r=%d\n",r);
}

7、编写求三个数中最大数的函数,并调用该函数求出主函数中三个数中的最大数(不能使用全局变量或return语句传递数据)。

void max(int x,int y,int z,int *p)
{int m;
if(x>y)
m=x;
else
m=y;
if(z>m)
m=z;
*p=m;
}
main()
{int a,b,c,r;
scanf("%d%d%d",&a,&b,&c);
max(a,b,c,&r);
printf("r=%d\n",r);
}

8、从键盘输入十个整数存入一维数组中,再按反序输出(要求用指针访问数组元素)。

方法一:
main()
{int x[10],i;
for(i=0;i<=9;i++)
scanf("%d",x+i);/*scanf("%d",&x[i]);*/
for(i=9;i>0;i--)
printf("%d,",*(x+i));/*printf("%d,",x[i]);*/
}

方法二:
main()
{int x[10],i,*p=x;
for(i=0;i<=9;i++)
scanf("%d",p+i);/*p

值不变*/
for(i=9;i>0;i--)
printf("%d,",*(p+i));
}

方法三:
main()
{int x[10], *p;
for(p=x;p<=x+9;p++) /*p值变化*/
scanf("%d",p);
for(p=x+9;p>=x;p--) /*p值变化*/
printf("%d,",*p);
}

方法四:
main()
{int x[10],i,*p;
p=x;
for(i=0;i<=9;i++)
{scanf("%d",p); /*p值变化*/
p++;
}
p=x+9;
for(i=9;i>0;i--)
{printf("%d,",*p); /*p值变化*/
p--;
}
}

9、从键盘输入十个整数存入一维数组中,求出其中的最大数并输出(要求用指针访问数组元素)。

方法一:
main()
{int a[10],max,i;
for(i=0;i<=9;i++)
scanf("%d",a+i); /*或scanf("%d",&a[i]);*/
max=*(a+0); /*或max=*a;*/
for(i=1;i<=9;i++)
{if(*(a+i)>max)
max=*(a+i);
}
printf("max=%d\n",max);
}

方法二:
main()
{int a[10],*p=a,max,i;
for(i=0;i<=9;i++)
scanf("%d",p+i); /*或scanf("%d",&a[i]);*/
max=*(p+0); /*或max=*p;*/
for(i=1;i<=9;i++)
if(*(p+i)>max)
max=*(p+i);
printf("max=%d\n",max);
}

10、从键盘输入11个整数存入一维数组中,再将该数组的内容前后倒置并输出(要求用指针访问数组元素)。

方法一:
main()
{int a[11],i,j,t,*p;
p=a;
for(i=0;i<=10;i++)
scanf("%d",p+i); /*或scanf("%d",&a[i]);*/
i=0;j=10;
while(i{t=*(p+i);
*(p+i)=*(p+j);
*(p+j)=t;
i++;j--;
}
for(i=0;i<=10;i++)
printf("%d,",*(p+i));
}

方法二:
main()
{int a[11],t,*p,*q;
for(p=a;p<=a+10;p++)
scanf("%d",p); /*或scanf("%d",&a[i]);*/
p=a;q=a+10;
while(p{t=*p;
*p=*q;
*q=t;
p++;q--;
}
for(p=a;p<=a+10;p++)
printf("%d,",*p);
}

11、从键盘输入十个整数存入一维数组中,求出它们的和及平均值并输出(要求用指针访问数组元素)。

main()
{int a[10],i;
float sum=0,p;
for(i=0;i<=9;i++)
scanf("%d",a+i); /*scanf("%d",&a[i]);*/
for(i=0;i<=9;i++)
sum=sum+*(a+i);
p=sum/10;
printf("sum=%f,p=%f\n",sum,p);
}

11A、编写求n个数平均值的函数,并调用此函数求从键盘输入的100个数的平均值(要求用指针访问数组元素)。

float ave(float *p,int n)
{float s=0,r;
int i;
for(i=0;i{s=s+*(p+i);}
r=s/n;
return(r);
}
main()
{float a[100],pj;
int i;
for(i=0;i{scanf("%f",a+i);}
pj=ave(a,100);
printf("pj=%f\n",pj);
}

12、从键盘输入一个字符串存入数组a中,再将a的内容前后倒置后重新存入数组a中并输出(要求用指针访问数组元素)。

#include
main()
{char a[80],t,*p,*q;
int n;
gets(a);
n=strlen(a);
p=0;q=a+n-1;
while(p{t=*p;*p=*q;*q=t; /*交换对应元素的值*/
p++;q--;
}
puts(a);
}

13、从键盘输入一个字符串,判断是否是回文(要求用指针访问数组元素)。

main()
{char a[100],*p,*q;
int n;
gets(a);
n=strlen(a);
p=a;
q=a+n-1;
while(p{if(*p==*q)
{p++;q--;}
else
break;
}
if(p>=q)
p

rintf("yes.\n");
else
printf("no.\n");
}

14、编写字符串复制的函数(要求用指针实现),并调用此函数复制一个字符串。

void scopy(char *b,char *a)
{while(*a!='\0')
{*b=*a; /*未复制'\0'*/
a++;b++;
}
*b='\0';
}
main()
{char a[80],b[80];
gets(a);
scopy(b,a);
puts(b);
}

15、编写连接两个字符串的函数(要求用指针实现),并调用此函数连接两个字符串。

void scat(char *a,char *b)
{while(*a!='\0')
a++;
while(*b!='\0')
{*a=*b; /*未复制'\0'*/
a++;b++;
}
*a='\0';
}
main()
{char a[80],b[80];
gets(a);
gets(b);
scat(a,b);
puts(a);
}

16、编写将一个字符串前后倒置的函数(要求用指针实现),并调用此函数将一个字符串前后倒置。

void srev(char *p)
{char t,*q;
int n;
n=strlen(p);
q=p+n-1;
while(p{t=*p;*p=*q;*q=t; /*交换对应元素的值*/
p++;q--;
}
}
main()
{char a[80];
gets(a);
srev(a)
puts(a);
}


相关主题
文本预览
相关文档 最新文档