1.找出数组中的最大值和最小值索引位置,然后将其交换即可
#include
// 交换最大、最小值位置
void SwapLimVal(int *src, int len)
{
int max , min, maxlen = 0, minlen = 0;
max = min = src[0]; // 初始化最大、最小值暂时为第一个
for (int i = 1; i < len; i++)
{
if (max < src[i]) // 元素如果比最大数的,则重置最大值,及其索引
{
max = src[i];
maxlen = i;
}
else if (min > src[i])// 元素如果比最小数的,则重置最小值,及其索引
{
min = src[i];
minlen = i;
}
}
if (maxlen == minlen) // 如果所有值一样,不用交换
return;
int tem = src[maxlen]; // 交换最大、最小值
src[maxlen] = src[minlen];
src[minlen] = tem;
}
int main()
{
int a[10];
printf("intput 10 number : "); // 输入10个整数
for (int i = 0; i < 10; i++)
scanf("%d", &a[i]);
SwapLimVal(a, 10);
for (int i = 0; i < 10; i++) // 输出交换结果
printf("%d ", a[i]);
return 0;
}
你程序的错误:
FindMAx和FindMin逻辑不对,你的意思是要返回最大值与最小值得位置吗,如果是这样,完全没有实现这个功能,无论怎样,返回值都是9,如果你要返回最大最小值,那就不应该return i或者return j ,而应该return max或者return min
Read函数也有问题,你返回一个值是什么意思?有必要吗?
无论是Read函数,还是FindMax,FindMin函数,对于数组循环遍历时都只进行了9遍,你不是处理10个数吗?
for(i=0;i<=t;i++);
printf("%d ",a[i]);
for(i=t+1;i<=s;i++)
printf("%d ",a[i]);
这几句代码是什么意思? 只是输出数组中的元素的话一个循环就够,没必要拆开啊?
总之,逻辑不清楚,其实这个问题非常的简单,你可以一个函数就写出来,遍历10个数,用maxIndex和minIndex同时记录最大值与最小值得位置,根据得到的maxIndex和minIndex 交换最大值与最小值在数组中的位置,最后只需要输出数组即可
有什么问题可以追问。
#include
void main()
{
int a[10],i,maxpos,minpos,temp;
for (i=0;i<10;i++)
{
printf("please input number %d:",i+1);
scanf("%d",&a[i]);
printf("\n");
}
maxpos=minpos=0;
for (i=1;i<10;i++)
{
if (a[i]>a[maxpos])
maxpos=i;
if (a[i] minpos=i;
}
temp=a[maxpos];
a[maxpos]=a[minpos];
a[minpos]=temp;
for (i=0;i<10;i++)
printf("%d ",a[i]);
}
int Read(int a[])
改成int Read(int a[10]),下面的也是,C数组不支持未知大小的数组,求最大最小值哪里直接返回数组吧,不是还要+1