#include<stdio.h>
#define X 10
int main()
{
int max,min,i;
int a[X];
int N;
int t1,t2,t;
scanf("%d",&N);
for(i=0;i<N;i++)
{
scanf("%d",&a[i]);
}
min=a[0];
for(i=1;i<N;i++)
{
if(a[i]<min)
{
min=a[i];
t1=i;
}
}
t=a[0];
a[0]=a[t1];
a[t1]=t;
max=a[0];
for(i=1;i<N;i++)
{
if(a[i]>max)
{
max=a[i];
t2=i;
}
}
t=a[N-1];
a[N-1]=a[t2];
a[t2]=t;
for(i=0;i<N;i++)
{
printf("%d ",a[i]);
}
return 0;
}
第五行的a[X]中X的值为多少?目测要么是X没有赋初值,要么是数组开小了
#include<stdio.h>
int main(void)
{
int N;
int array[10];
scanf("%d", &N);
for (int i = 0; i < N; i++)
{
scanf("%d", &array[i]);
}
// 先假设第一个数是最大数、最小数,后续比较过程中更新其值
minIndex = maxIndex = 0;
for (int i = 0; i < N; i++)
{
// 后续输入过程中存在比max大的数
if (array[i] > array[maxIndex])
{
maxIndex = i;
}
// 后续输入过程中存在比min小的数
if (array[i] < array[minIndex])
{
minIndex = i;
}
}
// 分情况讨论
if (minIndex == 0) // 最小的数在开头,则将最大的数交换到末尾
{
int temp = array[N - 1];
array[N - 1] = array[maxIndex];
array[maxIndex] = temp;
}
else if (maxIndex == N - 1) // 最大的数在末尾,则将最小的数交换到开头
{
int temp = array[0];
array[0] = array[minIndex];
array[minIndex] = temp;
}
else if (minIndex == N - 1) // 最小的数在末尾,先将最大的数换到末尾,再将最小的数换到开头
{
// 将最大的数与最小的数交换
int temp = array[N - 1];
array[N - 1] = array[maxIndex];
array[maxIndex] = temp;
minIndex = maxIndex;
// 将最小的数交换到开头
temp = array[minIndex];
array[minIndex] = array[0];
array[0] = temp;
}
else if (maxIndex == 0) // 最大的数在开头,先将最小的数换到开头,再将最大的数换到最后
{
// 将最小的数与最大的数交换
int temp = array[0];
array[0] = array[minIndex];
array[minIndex] = temp;
maxIndex = minIndex;
// 将最大的数交换到末尾
temp = array[N - 1];
array[N - 1] = array[maxIndex];
array[maxIndex] = temp;
}
else // 最大最小数均在中间,直接将最大数交换到末尾,再将最小数交换到开头
{
// 最小数交换到开头
int temp = array[0];
array[0] = array[minIndex];
array[minIndex] = temp;
// 最大数交换到末尾
temp = array[N - 1];
array[N - 1] = array[maxIndex];
array[maxIndex] = temp;
}
for (int i = 0; i < N; i++)
{
printf("%d ", array[i]);
}
return 0;
}