| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 679 人关注过本帖
标题:[求助]为什么我的数组在循环中出错
只看楼主 加入收藏
rejorcelife
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2006-3-26
收藏
 问题点数:0 回复次数:6 
[求助]为什么我的数组在循环中出错
题目:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组
#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 最大的 元素 
2006-04-16 10:54
仁者无敌
Rank: 1
等 级:新手上路
帖 子:199
专家分:0
注 册:2006-3-5
收藏
得分:0 

#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();
}
费时不少啊!


I am a programmer !
2006-04-16 11:46
仁者无敌
Rank: 1
等 级:新手上路
帖 子:199
专家分:0
注 册:2006-3-5
收藏
得分:0 

现在这个可以运行了!


I am a programmer !
2006-04-16 11:47
百年不亮
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:789
专家分:0
注 册:2006-4-14
收藏
得分:0 

你的这一部分有语法和算法上的错误.
语法错误:
 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-04-16 12:05
仁者无敌
Rank: 1
等 级:新手上路
帖 子:199
专家分:0
注 册:2006-3-5
收藏
得分:0 
四楼说的不错,楼主的程序错误是不少!

I am a programmer !
2006-04-16 12:16
rejorcelife
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2006-3-26
收藏
得分:0 
以下是引用百年不亮在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就能记录最大和最小的元素下标,
然后换序输出.






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


一直在努力!
2006-04-16 15:54
qzt040613
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:63
专家分:0
注 册:2006-3-15
收藏
得分: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();
}
这样也应该可以,不过这个算法费时!


天地无极,我本逍遥!
2006-04-16 22:11
快速回复:[求助]为什么我的数组在循环中出错
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.094307 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved