C语言 输入10个整数存入一维数组,将其中的最大值与最后一个数交换,最小数与第1个数交换

这是我的代码
#include<stdio.h>
int main()
{
int a[10];
int i, t, max, min;
for (i = 0; i < 10; i++)
scanf("%d", &a[i]);
min = max =0;

for (i = 0; i < 10; i++)
{
if (a[i] > max)
{
max = i;
}
if (a[i] < min)
{
min = i;
}
}
t = a[min];
a[min] = a[max];
a[max] = t;
for (i = 0; i < 10; i++)
printf("%d\t", a[i]);
return 0;
}

输入
10 8 34 45 67 78 42 43 89 3

输出的是
89 8 34 45 67 78 42 43 10 3 我的答案
而要求却是
3 8 34 45 67 78 42 43 10 89

逻辑非常混乱。

1、按你程序的意思,max、min应该是下标吧。但是又有if (a[i] > max)、if (a[i] < min)这样的语句,直接拿下标和数组元素比较大小?
2、t = a[min];a[min] = a[max];a[max] = t;的作用是将最大值和最小值互换,而不是题目要求的最大值与最后一个数交换,最小数与第1个数交换。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-12-26
#include<stdio.h>
void cc(int a[])
{
int max, min, t, MAX, MIN, i, k;
max = a[0]; min = a[0]; MAX = 0; MIN = 0;
for (i = 1; i < 10; i++)
{
if (a[i] > max)
max = a[i], MAX = i;
if (a[i] < min)
min = a[i], MIN = i;
}
if (MAX == 0 && MIN == 9)
t = a[0], a[0] = a[9], a[9] = t;
else
{
t = a[0]; a[0] = a[MIN]; a[MIN] = t;
t = a[9]; a[9] = a[MAX]; a[MAX] = t;
}
}
int main(void)
{
int a[10], i;
for (i = 0; i < 10; i++)
scanf("%d", &a[i]);
cc(a);
for (i = 0; i < 10; i++)
printf("%d ", a[i]);
}
相似回答