好心人,帮我看一下这段代码,题意:是实现在数组中找到最大值放在最后,最小值放在最前面
#include <stdio.h>
#define N 5
void jh(int num[N])
{
int min,max,t;
int i,n,k;
min=num[0];
max=num[N-1];
for(i=0;i <N;i++)
{
if(min> num[i])
{
min=num[i];
n=i;
}
}
t=num[0];
num[0]=num[n];
num[n]=num[0];
t=num[0];
for(i=0;i <N;i++)
{
if(max <num[i])
{
max=num[i];
k=i;
}
}
num[N-1]=num[k];
num[k]=num[N-1];
printf( "结果为: ");
for(i=0;i <N;i++)
printf( "%d ",num[i]);
}
void main()
{
int arr[N],i;
printf( "请输入%d个数: ",N);
for(i=0;i <N;i++)
scanf( "%d ",&arr[i]);
jh(arr);
}
[解决办法]
这里有问题:
num[N-1]=num[k]; //将最大值给最后一个,但最后一个值没有备份
num[k]=num[N-1]; //
printf( "结果为: ");
改成这样
int temp=num[N-1];//备份最后一个值
num[N-1]=num[k];
num[k]=temp;
printf( "结果为: ");
[解决办法]
看起來貌似可以。
只是最大和最小在一個循環里面就可以找出來
沒必要整2個循環
[解决办法]
交换两个值的时候,有问题
t=num[0];
num[0]=num[n]; //num[0]的值已经变了
num[n]=t; //把t保存的原来的num[0]的值赋值给num[n]
下面那个交换也有这个问题。