第一种:无指针版本
#include<stdio.h>
#define ARR_SIZE 10
//互换数组的最大值和最小值
int GetMaxPos(int a[], int n)
{
int maxValue = a[0], maxPos = 0;
int i;
for(i=0; i<n; i++)
{
if(a[i]>maxValue)
{
maxValue = a[i];
maxPos = i;
}
}
return maxPos;
}
int GetMinPos(int a[], int n)
{
int minValue = a[0], minPos = 0;
int i;
for(i=0; i<n; i++)
{
if(a[i]<minValue)
{
minValue = a[i];
minPos = i;
}
}
return minPos;
}
void MaxMinSwap(int a[], int n)
{
int maxPos = 0, minPos = 0;
int temp;
maxPos = GetMaxPos(a, n);
minPos = GetMinPos(a, n);
temp = a[maxPos];
a[maxPos] = a[minPos];
a[minPos] = temp;
}
int main(void)
{
int a[ARR_SIZE], i, n;
printf("Input n(n<=10):");
scanf("%d",&n);
printf("Input %d Numbers:\n", n);
for(i=0; i<n; i++)
{
scanf("%d",&a[i]);
}
MaxMinSwap(a, n);//传递数组元素的首地址
printf("After MaxMinSwap:\n");
for(i=0; i<n; i++)
{
printf("%d ",a[i]);
}
printf("\n");
return 0;
}
第二种:指针版本
#include<stdio.h>
#define ARR_SIZE 10
//互换数组的最大值和最小值
void GetMaxPos(int a[], int n, int *maxPos)
{
*maxPos = 0;//解引用:访问指针变量指向的那个内存中的数据,此处意为赋值为0
for(int i=0; i<n; i++)
{
if(a[i]>a[*maxPos])
{
*maxPos = i;
}
}
}
void GetMinPos(int a[], int n, int *minPos)
{
*minPos = 0;
for(int i=0; i<n; i++)
{
if(a[i]<a[*minPos])
{
*minPos = i;
}
}
}
void Swap(int *x, int *y)
{
int temp;
temp = *x;
*x = *y;
*y = temp;
}
void MaxMinSwap(int a[], int n)
{
int maxPos = 0, minPos = 0;
GetMaxPos(a, n, &maxPos);
GetMinPos(a, n, &minPos);
Swap(&a[maxPos], &a[minPos]);
}
int main(void)
{
int a[ARR_SIZE], i, n;
printf("Input n(n<=10):");
scanf("%d",&n);
printf("Input %d Numbers:\n", n);
for(i=0; i<n; i++)
{
scanf("%d",&a[i]);
}
MaxMinSwap(a, n);//传递数组元素的首地址
printf("After MaxMinSwap:\n");
for(i=0; i<n; i++)
{
printf("%d ",a[i]);
}
printf("\n");
return 0;
}