指针习题

3,输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。写3个函数:1)输入10个数;2)进行处理;3)输出10个数。
用指针方法处理

楼主的代码

#include<stdio.h>
int *p,s[10],*p1;
void input(int *p)
{int i=0;
 printf("please input 10 numbers:\n");
 for(i=0;i<10;i++)
 {scanf("%d",&s[i]);
 }
}
void process(int *p)
{int i,min,max,temp,m,n;
 min=s[0];
 for(i=1;i<10;i++)
 {if(min>s[i])
  {min=s[i]; 
   m=i;
  }
 }
 max=s[0];
 for(i=1;i<10;i++)
 {if(max<s[i])
  {max=s[i];
   n=i;
  }
 }
   temp=s[0];
   s[0]=s[m];
   s[m]=temp;
   temp=s[9];
   s[9]=s[n];
   s[n]=temp;;
}
void output(int *p)
{int i;
 for(i=0;i<10;i++)
 {printf(" %d",s[i]);
 }
}
int main()
{
 p1=s;
 p=p1;
 input(p);
 p=p1;
 process(p);
 p=p1;
 output(p);	
	return 0;
}

运行结果
在这里插入图片描述

答案的方法

#include<stdio.h>
int main()
{void input (int *);
 void max_min_value(int *);
 void output(int *);
 int number[10];
 input(number);			 			//调用输入10个数的函数 
 max_min_value(number);     			//调用交换函数  
 output(number);     				//调用输出函数 
 return 0;
}
void input (int*number) 				//输入10个数的函数 
{int i;
 printf("input 10 numbers:");
 for(i=0;i<10;i++)
 {scanf("%d",&number[i]);
 }
}
void max_min_value(int *number)      //交换函数 
{int *max,*min,*p,temp;
 max=min=number;                     //开始时是max和min都指向第1个数 
 for(p=number+1;p<number+10;p++)
 {if(*p>*max)  		  		        //若p指向的数大于max指向的数,就使max指向p指向的大数 
  {max=p;}
  else if(*p<*min)					//若p指向的数小于min指向的数,就使min指向p指向的小数 
  {min=p;}
  temp=number[0];number[0]=*min;*min=temp;  //将最小数与第一个数number[0]交换 
  if(max==number)
  {max=min;} 						//如果max和 number相等,表示第一个数是最大数,则使max指向当前的最大数 
  temp=number[9];number[9]=*max;*max=temp; //将最大数与最后一个数交换 
}
}
void output(int *number)				//输出函数 
{int *p;
 printf("Now,they are:    ");
 for(p=number;p<number+10;p++)
 {printf("%d ",*p);
 }
 printf("\n");	
}

运行结果
同楼主的
严格来说,楼主的方法不是利用指针。。。
答案是直接让max和min指向最大值或最小值的地址,交换的时候直接交换就可以了,而楼主的方法还要记录最大值或最小值是第几个,,,
这篇就到这里了

猜你喜欢

转载自blog.csdn.net/weixin_43918004/article/details/84933375