c语言编程:输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。 我的答案错了

#include "stdio.h"
int i;
int main()
{
void input(int d[10]);
void change(int b[10]);
void output(int c[10]);
int d[10];
input(d);
change(d);
output(d);
return 0;
}
void input(int d[10])
{
for(i=0;i<10;i++)
scanf("%d",&d[i]);
}
void change(int b[10])
{
int temp,m=b[0],n=b[0],s,t;
for(i=0;i<10;i++)
{
if(m>b[i+1])
{
m=b[i+1];
s=i+1;
}
if(n<b[i+1])
{
n=b[i+1];
t=i+1;
}

}
temp=b[0];
b[0]=b[s];
b[s]=temp;
temp=b[9];
b[9]=b[t];
b[t]=temp;
}
void output(int c[10])
{
for(i=0;i<10;i++)
printf("%d",c[i]);
}
请问错哪了?

#include "stdio.h"
int i;
int main()
{
 void input(int d[10]);
 void change(int b[10]);
 void output(int c[10]);
 int d[10];
 input(d);
 change(d);
 output(d);
 return 0;
}
void input(int d[10])
{
 for(i=0;i<10;i++)
  scanf("%d",&d[i]);
}
void change(int b[10])
{
 int temp,min=b[0],max=b[0],s,t;//这里定义为min和max好区分
 for(i=0;i<10;i++)
 { 
  if(min>=b[i]) //因为你已经定义第一个元素给他了就用不着再+1了,你+1后反而会溢出
  { 
   min=b[i];  
   s=i;
  }
  if(max<=b[i])
  { 
   max=b[i];
   t=i;
  }
}
 temp=b[0];
 b[0]=b[s];
 b[s]=temp;
 temp=b[9];
 b[9]=b[t];
 b[t]=temp;
}
void output(int c[10])
{
 for(i=0;i<10;i++)
  printf("%3d",c[i]);
 printf("\n");
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-05-16
首先函数声明不能声明在主函数内、
其次,函数参数的数组的中括号不用填写数字。由于,数组的参数传递的是数组第一个参数的地址。

帮你稍微调整了一下。应该没有什么问题。还是,这么简单的一个功能被你写得那么复杂。后面附上一个相对简短的程序。
int main()

{
int d[10];

input(d);
change(d);
output(d);

return 0;
}

void input(int d[])
{
for(i=0;i<10;i++)
scanf("%d",&d[i]);
}

void change(int b[])
{
int temp,m=b[0],n=b[0],s,t;

for(i=0;i<10;i++){

if(m>b[i+1]){
m=b[i+1];
s=i+1;
}

if(n<b[i+1]){
n=b[i+1];
t=i+1;
}

}

temp=b[0];
b[0]=b[s];
b[s]=temp;

temp=b[9];
b[9]=b[t];
b[t]=temp;
}

void output(int c[])
{
for(i=0;i<10;i++)
printf("%d",c[i]);
}

建议程序:

#include <stdio.h>

int main(void)
{
int a[10], max, min, temp;

int i, j;

printf("please input 10 number:\n");

for( i = 0; i < 10; i++)

scanf("%d", a++); # a代表数组a的第一个参数的地址,所以无需要&

max = a[0];

min = a[0];

for( i = 0; i < 10; i++){ #判断最大值所在的位置

if(a[i] > max){

max = a[i];

j = i;

}
}

temp = a[j]; #把最大值与最后一位交换

a[j] = a[9];

a[9] = temp;

for( i = 0; i < 10; i++){ #判断最小一位的位置

if(a[i] < min){

min = a[i];
j = i;

}

}

temp = a[j]; #交换第一位和最小值

a[j] = a[0];

a[0] = temp;

for(i = 0; i < 10; i++)

printf("% ", a[i]);

}

这样写相对没那么乱。你也可以把它改成你希望的函数形式。本回答被提问者采纳
第2个回答  2013-05-16
#include "stdio.h"
int i;
int main()
{
void input(int d[]);
void change(int b[]);
void output(int c[]);
int d[10];
input(d);
change(d);
output(d);
return 0;
}
void input(int d[])
{
for(i=0;i<10;i++)
scanf("%d",&d[i]);
}
void change(int b[])
{
int temp,m=b[0],n=b[0],s,t;
for(i=1;i<10;i++)
{
if(m>b[i])
{
m=b[i];
s=i;
}
if(n<b[i])
{
n=b[i];
t=i;
}

}
temp=b[0];
b[0]=b[s];
b[s]=temp;
temp=b[9];
b[9]=b[t];
b[t]=temp;
}
void output(int c[])
{
for(i=0;i<10;i++)
printf("%2d",c[i]);
}
//错误是改好了 但还有个问题 就是当最小值是最后一个的时候交换会出问题 你可以分开找最小值和最大值 先找到一个最大值然后交换 然后找最小值 找出最小值后再交换
或是在交换时不同情况不同对待本回答被网友采纳
第3个回答  2013-05-16
在你的change函数中,由于你的循环控制变量i没有控制好,导致了两个循环都不能很好的完全遍历整个数组,所以答案是错误的。个人意见第一种方法是最大最小数的查找用两个循环实现,第二种方法是增加循环控制变量。谢谢
第4个回答  2013-05-16
#include "stdio.h"
void input(int d[10])
{int i;
for(i=0;i<10;i++)
scanf("%d",&d[i]);
}
void change(int b[10])
{int i;
int temp,m=b[0],n=b[0];
for(i=0;i<9;i++)//比较九次即可
{
if(m>b[i+1])
{
m=b[i+1];//你那s,t没啥作用吧

}
if(n<b[i+1])
{
n=b[i+1];
}
}
temp=m;
m=b[0];//你这乱的
b[0]=temp;

temp=n;
n=b[9];
b[9]=temp;
}
void output(int c[10])
{ int i;
for(i=0;i<10;i++)
printf("%2d",c[i]);
}
int main()
{
void input(int d[10]);
void change(int d[10]);
void output(int d[10]);
int d[10];
input(d);
change(d);
output(d);
return 0;
}