当前位置: 代码迷 >> C语言 >> [求助]为什么我的数组在循环中出错
  详细解决方案

[求助]为什么我的数组在循环中出错

热度:150   发布时间:2006-04-16 10:54:00.0
[求助]为什么我的数组在循环中出错
题目:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组
#include "stdio.h"
main()
{ int i,t,max,min;
int a[10];
for(i=0;i<=9;i++) /*输入数组*/
{scanf("%d",&a[i]);}
for(i=0;i<9;i++) /*找出最大和最小值*/
{ if(a[i]>a[i+1])
max=a[i];
min=a[i+1];
if(a[i]<a[i+1])
max=a[i+1];
min=a[i];
}
for(i=0;i<=9;i++) /*将最大值和第一个数值交换,将最小值和最后一个交换*/
{if(max==a[i])
t=a[0];
a[0]=max;
a[i]=t;
if(min==a[i])
t=a[9];
a[9]=min;
a[i]=t;
}
for(i=0;i<=9;i++) /*输出最后结果*/
{printf("%d ",a[i]);}
getch();
}
编译通过,但是输出只有最大值是对的,其他的数都是错的.
搜索更多相关的解决方案: include  最大的  元素  

----------------解决方案--------------------------------------------------------

#include "stdio.h"
main()
{ int i,max,min,t1,t2;
int a[10];
for(i=0;i<=9;i++) /*输入数组*/
{scanf("%d",&a[i]);}
max=a[0];
min=a[0];
for(i=0;i<=9;i++) /*找出最大和最小值*/
{ if(a[i]>=max)
max=a[i];
if(a[i]<=min)
min=a[i];
}

t1=a[0];
t2=a[9];
for(i=0;i<=9;i++) /*将最大值和第一个数值交换,将最小值和最后一个交换*/
{if(a[i]==max)
{ a[i]=t1;}
else
if(a[i]==min)
{a[i]=t2;}
}
a[0]=max;
a[9]=min;

for(i=0;i<=9;i++) /*输出最后结果*/
{printf("%d ",a[i]);}
getch();
}
费时不少啊!


----------------解决方案--------------------------------------------------------

现在这个可以运行了!


----------------解决方案--------------------------------------------------------

你的这一部分有语法和算法上的错误.
语法错误:
 for(i=0;i<9;i++)
 { if(a[i]>a[i+1])
  max=a[i];
  min=a[i+1];/*if内的两条语句要用{}*/
 if(a[i]<a[i+1])
 max=a[i+1];
 min=a[i];/*同上,否则两条min=语句不经判断就执行*/

 }
算法错误是:
  如你输入9 124,执行情况是先max=9,min=1;
第二次循环:max=2,min=1;
第三次循环:max=4,min=1;
显然max和min不能记录最大值和最小值.最后输出结果肯定错误.

改正的方法是设两个下标变量max_indexhe和min_index
用选择排序的算法:
int i,max_indexhe=0,min_index=0;
for(i=0;i<9;i++)
if(a[i]>a[max_indexhe])
max_indexhe=i;
for(i=0;i<9;i++)
if(a[i]<a[min_indexhe])
min_indexhe=i;
这样下标变量max_indexhe和min_index就能记录最大和最小的元素下标,
然后换序输出.







----------------解决方案--------------------------------------------------------
四楼说的不错,楼主的程序错误是不少!

----------------解决方案--------------------------------------------------------
以下是引用百年不亮在2006-4-16 12:05:00的发言:

你的这一部分有语法和算法上的错误.
语法错误:
 for(i=0;i<9;i++)
 { if(a[i]>a[i+1])
  max=a[i];
  min=a[i+1];/*if内的两条语句要用{}*/
 if(a[i]<a[i+1])
 max=a[i+1];
 min=a[i];/*同上,否则两条min=语句不经判断就执行*/

 }
算法错误是:
  如你输入9 124,执行情况是先max=9,min=1;
第二次循环:max=2,min=1;
第三次循环:max=4,min=1;
显然max和min不能记录最大值和最小值.最后输出结果肯定错误.

改正的方法是设两个下标变量max_indexhe和min_index
用选择排序的算法:
int i,max_indexhe=0,min_index=0;
for(i=0;i<9;i++)
if(a[i]>a[max_indexhe])
max_indexhe=i;
for(i=0;i<9;i++)
if(a[i]<a[min_indexhe])
min_indexhe=i;
这样下标变量max_indexhe和min_index就能记录最大和最小的元素下标,
然后换序输出.






收到,没想清楚就开始写程序,毛病还真是不少,费时不说还费力,还犯低级错误,更没想到记录下标,谢谢了!


----------------解决方案--------------------------------------------------------

#include "stdio.h"
main()
{ int i,t,max,min;
int a[10];
for(i=0;i<=9;i++) /*输入数组*/
{scanf("%d",&a[i]);}
for(i=0;i<9;i++) /*找出最大和最小值*/
{ if(a[i]>a[i+1])
max=a[i];
min=a[i+1];
if(a[i]<a[i+1])
max=a[i+1];
min=a[i];
}
for(i=0;i<=9;i++) /*将最大值和第一个数值交换,将最小值和最后一个交换*/
{if(max==a[i])
{t=a[0];
a[0]=max;
a[i]=t;
}
if(min==a[i])
{t=a[9];
a[9]=min;
a[i]=t;
}
}
for(i=0;i<=9;i++) /*输出最后结果*/
{printf("%d ",a[i]);}
getch();
}
这样也应该可以,不过这个算法费时!


----------------解决方案--------------------------------------------------------
  相关解决方案