从键盘输入10个整数,用函数编程实现计算其最大值和最小值,并互换它们所在数组中的位置。

从键盘输入10个整数,用函数编程实现计算其最大值和最小值,并互换它们所在数组中的位置。
要求按如下函数原型编写程序
void ReadData(int a[], int n);
void PrintData(int a[], int n);
void  MaxMinExchang(int a[], int n);
**输入提示信息要求:
"Input n(n<=10):\n"
"Input %d numbers:\n"
**要求输入格式为:"%d"
**输出提示信息:"Exchange results:"
**要求输出格式为:"%5d"
                  输出数组中所有数据后换行

程序运行示例:
Input n(n<=10):
4
Input 4 numbers:
4 2 9 3
Exchange results:    4    9    2    3
//计算数组最大值及最大值下标

//计算数组最大值及最大值下标
int Findmax(int a[], int n, int* pos)  //*为下标的位置pos,n为数组长度
{
	int i, maxNum;
	*pos = 0;//记录下标
	maxNum = a[0];//记录最大值
	for (int i = 0; i < n; i++)
	{
		if (maxNum < a[i])
		{
			maxNum = a[i];//为了下一次比较
			*pos = i;//找到了最大值对应下标
		}
	}
	return maxNum;
}
//计算数组最小值及最小值下标
int Findmin(int arr[], int n,int *pos)
{
	int temp = arr[0];
	*pos = 0;
	for (int i = 0; i < n; i++)
	{
		if (temp > arr[i])//如果大于,就换成小的
		{
			temp = arr[i];
			*pos = i;
		}
	}
	return temp;
}
//排序常用的数组值的交换:
void swap_arr(int arr[], int a, int b)
{
	int temp;
	temp = arr[a];
	arr[a] = arr[b];
	arr[b] = temp;
}
void MaxMinExchang(int a[], int n)
{
	int Pos_min, Pos_max;
	int *pos_min=&Pos_min,*pos_max=&Pos_max;
	Findmax(a, n,pos_max);
	Findmin(a, n, pos_min);
	swap_arr(a, Pos_min, Pos_max);
}

int main()
{
	int a[10] = {0};
	int n;
	printf("Input n(n<=10):\n");
	scanf("%d", &n);
	printf("Input %d numbers:\n", n);
	Input_arr(a, n);
	MaxMinExchang(a, n);
	printf("Exchange results:");
	printf_arr1(a, n);
	system("pause");
	return 0;
}

对于该题目解答分为三个函数如上所示,其中找最大和最小只用修改判断条件即可,不过有一个缺点就是如果数组中有重复的数据,只能查到一个值,如果有需要可以利用数组储存所要查找下标的值,对于本题,上述足矣.

你可能感兴趣的:(数组相关,c语言)