将数组中的最大和最小值与某位元素交换

  • Post author:
  • Post category:其他




这里我想到指针的灵活性,就用到了下标法。



min 和 max 大同小异,我就拿max来讲细节。

#include <stdio.h>
#define N 10
void input(int *p,int n) {
	int i;
	for(i=0; i<n; i++) {
		scanf("%d",(p++));
	}
}
void output(int *p,int n) {
	int i;
	for(i=0; i<n; i++) {
		printf("%6d",*(p+i));
	}
}
//这里想到了指针可以用下标法来表示数组。
void max_array(int *p, int n) {
	int i,max,k;    //用数组的第一个元素的值赋给max, k是用来替换的中间量。
	int loc=0;    //loc用来表示当某个元素大于max时,该元素的序号。
	max=*p;
	for(i=0; i<n; i++) {
		if(max<*(p+i)) {
			max=*(p+i);
			loc=i;
		}
	}
//这里就用到了下标法,就不用担心指针p不知道指向哪个元素。
	k=p[loc];
	p[loc]=p[n-1];
	p[n-1]=k;
}
void min_array(int *p, int n) {
	int i,min,k;
	int loc=0;
	min=*p;
	for(i=0; i<n; i++) {
		if(min>*(p+i)) {
			min=*(p+i);
			loc=i;
		}
	}
	k=p[loc];
	p[loc]=p[0];
	p[0]=k;
}

int main() {
	void input(int *p, int n); //从键盘上输入n个整数到p所指向的数组
	void max_array(int *p, int n); //找到p所指向数组中的最大数与最后一个数组元素互换
	void min_array(int *p, int n); //找到p所指向数组中的最小数与第一个数组元素互换
	void output(int *p,int n); //输出p所指向的数组中的n个数
	int num[N];

	input(num,N);
	max_array(num,N);
	min_array(num,N);
	output(num,N);

	return 0;
}



版权声明:本文为Lulu_qifei原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。