帮忙看下,数组排序问题

xiaoliang_c 2011-03-30 11:37:24
下面代码是用数组作的排序的内容,为什么输入几回值怎么都乱了?

#include <stdio.h>
#define MAX 7

int max_min (int max_mn[MAX]);
int sort (int sort_s[MAX]);
int inoder (int inoder_i[MAX]);

int main (void)
{
char ch;
int oder;
int i=0;
int array_t[MAX], array_m[MAX], array_i[MAX];

printf ("请输入想要实现的一些数\n");
while (i < MAX && scanf ("%d", &array_t[i]) == 1)
++i;
while (scanf ("%d", &oder) != 4)
{
printf ("请选择\n");
printf ("\t\tMenu\n");
printf ("\t1.最大值与最小值排序\n");
printf ("\t2.排序\n");
printf ("\t3.倒序\n");

switch (oder)
{
case 1:
if (1 == oder)
{
max_min (array_t);
for (i=0; i<=MAX; i++)
printf ("%d ", array_t[i]);
printf ("\n");
}
break;

case 2:
if (2 == oder)
{
sort (array_t);
for (i=0; i<=MAX; i++)
{
array_m[i] = array_t[i];
printf ("%d ", array_m[i]);
}
printf ("\n");
}
break;
case 3:
if (3 == oder)
{
inoder (array_t);
for (i=MAX; i>=0; i--)
{
array_i[i] = array_t[i];
printf ("%d ", array_i[i]);
}
printf ("\n");
}
break;
default: printf ("输入错误请从新输入\n");
break;
}



}

printf ("Done\n");
return 0;
}

int max_min (int max_mn[MAX])
{
int i;
int max_cnt = 0;
int min_cnt = 0;
for (i=0; i<=MAX; i++)
{
if (max_cnt < max_mn[i])
max_cnt = max_mn[i];
else if (min_cnt > max_mn[i])
min_cnt = max_mn[i];
}
for (i=0; i <= 2; i++)
{
if (0 == i)
max_mn[i] = max_cnt;
if (1 == i)
max_mn[i] = min_cnt;
}
return max_mn[MAX];
}

int sort (int sort_s[MAX])
{
int i, j, temp;

for (i=0; i<=MAX; i++)
for (j=0; j<i; j++)
if (sort_s[i] < sort_s[j])
{
temp = sort_s[i];
sort_s[i] = sort_s[j];
sort_s[j] = temp;
}

return sort_s[MAX];

}

int inoder (int inoder_i[MAX])
{
int i;
sort (inoder_i);
for (i=0; i<=MAX; i++)
inoder_i[i];
return inoder_i[MAX];
}
...全文
100 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaoliang_c 2011-03-31
  • 打赏
  • 举报
回复
第2个选择如果多按几下的话,会把数组里面的值都覆盖了,,什么情况?
xiaoliang_c 2011-03-31
  • 打赏
  • 举报
回复
数组的上下限不太理解,谁能帮忙讲下?
xiaoliang_c 2011-03-30
  • 打赏
  • 举报
回复
又测试了下 , 还有问题? 什么原因 请讲解下吧
無_1024 2011-03-30
  • 打赏
  • 举报
回复

#include <stdio.h>
#define MAX 7

int max_min (int max_mn[MAX]);
int sort (int sort_s[MAX]);
int inoder (int inoder_i[MAX]);

int main (void)
{
char ch;
int oder;
int i=0;
int array_t[MAX], array_m[MAX], array_i[MAX];

printf ("请输入想要实现的一些数\n");
while (i < MAX && scanf ("%d", &array_t[i]) == 1)
++i;
while (scanf ("%d", &oder) != 4)
{
printf ("请选择\n");
printf ("\t\tMenu\n");
printf ("\t1.最大值与最小值排序\n");
printf ("\t2.排序\n");
printf ("\t3.倒序\n");

switch (oder)
{
case 1:
if (1 == oder)
{
max_min (array_t);
for (i=0; i<MAX; i++)
printf ("%d ", array_t[i]);
printf ("\n");
}
break;

case 2:
if (2 == oder)
{
sort (array_t);
for (i=0; i<MAX; i++)
{
array_m[i] = array_t[i];
printf ("%d ", array_m[i]);
}
printf ("\n");
}
break;
case 3:
if (3 == oder)
{
inoder (array_t);
for (i=MAX-1; i>=0; i--)
{
array_i[i] = array_t[i];
printf ("%d ", array_i[i]);
}
printf ("\n");
}
break;
default: printf ("输入错误请从新输入\n");
break;
}



}

printf ("Done\n");
return 0;
}

int max_min (int max_mn[MAX])
{
int i;
int max_cnt = max_mn[0];
int min_cnt = max_mn[0];//
for (i=1; i<MAX; i++)
{
if (max_cnt < max_mn[i])
max_cnt = max_mn[i];
if (min_cnt > max_mn[i])
min_cnt = max_mn[i];
}
for (i=0; i <= 2; i++)
{
if (0 == i)
max_mn[i] = max_cnt;
if (1 == i)
max_mn[i] = min_cnt;
}
return max_mn[MAX];
}

int sort (int sort_s[MAX])
{
int i, j, temp;

for (i=0; i<MAX; i++)
for (j=0; j<i; j++)
if (sort_s[i] < sort_s[j])
{
temp = sort_s[i];
sort_s[i] = sort_s[j];
sort_s[j] = temp;
}

return sort_s[MAX];

}

int inoder (int inoder_i[MAX])
{
int i;
sort (inoder_i);
for (i=0; i<MAX; i++)
inoder_i[i];
return inoder_i[MAX];
}
//max 和min的初始化不能用0
xiaoliang_c 2011-03-30
  • 打赏
  • 举报
回复
还是不行啊,值还是乱的
無_1024 2011-03-30
  • 打赏
  • 举报
回复
所有的 <=MAX 应该吧=去掉

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧