【C语言】输入10个整数,将其中最大的数放在首位,最小的数放在末尾,然后输出之。

 思路:写三个函数:输入函数、处理函数、输出函数。利用指针完成关键部分的操作。

编写程序:

#include<stdio.h>
/*输入函数*/
void input(int a[]){	
	int i;
	printf("请输入十个数:\n");
	for(i=0;i<10;i++)
		scanf("%d",&a[i]);
} 
/*处理函数*/
void fun0(int a[10]){
	int *p,*max,*min,t; 
	max=min=a;		//指针初始化 
	for(p=a+1;p<a+10;p++)		//遍历首元素以外的全部元素 
		if(*p<*min)		//若当前元素的值比当min指向的元素值小 
			min=p;			//让min指向当前元素 
	//与首元素交换 
	t=*min;
	*min=a[0];
	a[0]=t;	
	for(p=a+1;p<a+10;p++)
		if(*p>*max)		//若当前元素的值比当max指向的元素值大 
			max=p;			//让max指向当前元素 
	//与尾元素交换 
	t=*max;
	*max=a[9];
	a[9]=t;
}
/*输出函数*/
void output(int a[]){
	int *p;
	for(p=a;p<a+10;p++)
		printf("%d,",*p);
}
int main(){
	int a[10];
	input(a);
	fun0(a);
	output(a);
	return 0;
} 

之所以使用两个循环来完成最大最小数位置的交换,是因为本次我们使用指针来记录了最大最小值,如果使用一个循环当然可以找出最大最小值的位置,然后把它们的值交换到指定位置上去,看上去没有什么问题,但如果有一个最大值就在第一的位置上,我们仍然使用交换,那么先将最小值放到第一个的位置上,此时我们刚才记录最大值的指针没有动,但它却指向了刚刚交换好的最小值了,这样就出现了bug。所以用两个循环依次找出最大最小值切找到后就交换到指定位置上去。

当然用一个循环一次找出最大最小值,只需要在交换值的时候添加一个判断语句(如果最大值在第一的位置上,那么交换后原来指向最大值的指针的值应该是现在指向最小值的指针的值)

即:

if(max==a)max=min;

程序测试截图: 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

.魚肉

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

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

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

打赏作者

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

抵扣说明:

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

余额充值