| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1650 人关注过本帖
标题:作业 用选择法排序10个数 但无法得到正确结果 援助[em08]
只看楼主 加入收藏
huangcao
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2008-10-10
结帖率:100%
收藏
 问题点数:0 回复次数:9 
作业 用选择法排序10个数 但无法得到正确结果 援助[em08]
#include <stdio.h>
void main()
{
    int i,j,min,temp,a[10];
    printf("enter data:\n");
    for(i=1;i<=10;i++)
    {
        printf("a[%d]=",i);
        scanf("%d",&a[i]);   /*输入10个数*/
    }
    printf("\n");
    printf("The original numbers:\n");
    for(i=1;i<=10;i++)
        printf("%5d",a[i]);   /*输出这10个数*/
    printf("\n");
    for(i=1;i<=10;i++)         /*以下8行是对10个数排序*/
    {
        min=i;
        for(j=i+1;j<=10;j++)
            if(a[min]>a[j])
        {min=j;              /*以下3行将a[i+1]~a[10]中最小者与a[i]对换*/
        a[min]=a[i];      
        a[i]=a[min];}        
    }
    printf("\n The sorted numbers:\n");
    for(i=1;i<=10;i++)           /*输出己排好序的10个数*/
        printf("%5d",a[i]);
    printf("\n");
}
搜索更多相关主题的帖子: 作业 结果 援助 选择 
2008-11-21 11:37
liangkaiyu
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2008-11-20
收藏
得分:0 
主要是这一段的问题:
   if(a[min]>a[j])
        {min=j;              /*以下3行将a[i+1]~a[10]中最小者与a[i]对换*/
        a[min]=a[i];      
        a[i]=a[min];}
帮你修改下,
在前面定义一个与a[i]同类型的变量,用来做交换的中间变量
即:
int e;
...
if(a[min]>a[j])
{e = a[min];           /*以下3行将a[i+1]~a[10]中最小者与a[i]对换*/
a[min]=a[j];      
a[j]=e;}
2008-11-21 11:50
huangcao
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2008-10-10
收藏
得分:0 
谢谢了 但我修改以后 还是有些小问题


为什么最后两位会是这样~~?

QQ截图未命名.jpg (14.76 KB)
图片附件: 游客没有浏览图片的权限,请 登录注册
2008-11-21 11:56
huangcao
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2008-10-10
收藏
得分:0 
shui谁能解释下么~?
2008-11-21 13:29
zqy110007
Rank: 3Rank: 3
来 自:外太空
等 级:论坛游民
威 望:6
帖 子:1493
专家分:82
注 册:2008-11-19
收藏
得分:0 
...感觉比较的方法不好..
程序代码:
if(a[min]>a[j]){
  min=j;
  a[min]=a[i];       
  a[i]=a[min];
}

我看看该怎么改....
嗯....
好了
程序代码:
#include <stdio.h>
void main(){
int i,j,min,temp,a[10];
printf("enter data:\n");
for(i=0;i<10;i++){
printf("a[%d]=",i);
scanf("%d",&a[i]);
}
printf("\n");
printf("The original numbers:\n");
for(i=0;i<10;i++)
  printf("%5d",a[i]);
printf("\n");
for(i=0;i<10;i++){
  min=a[i];
  for(j=i;j<10;j++)
    if(a[i]>a[j]){
      min=a[j];
      a[j]=a[i];
      a[i]=min;
    }
}
printf("\n The sorted numbers:\n");
for(i=0;i<10;i++)
  printf("%5d",a[i]);
printf("\n");
getch();
}


给你提议点建议啊..
数组是以0开始,而不是以1开始,比如a[10]它就应该是a[0]~a[9]而不是a[1]~a[10]当然,你这么没错,因为a只是地址,你就是定义int a[10]你可以使用a[15]..

每个人都是蛤蟆,只是井的大小不同罢了.
沙石下的泉水,挖得越深,泉水越清.
2008-11-21 17:05
alweeq86
Rank: 2
等 级:论坛游民
帖 子:67
专家分:20
注 册:2008-9-14
收藏
得分:0 
兄弟你定义的a[10]是从a[0]--a[9]
你用的是a[1]--a[10]
a[10]就溢出了
2008-11-21 17:13
zqy110007
Rank: 3Rank: 3
来 自:外太空
等 级:论坛游民
威 望:6
帖 子:1493
专家分:82
注 册:2008-11-19
收藏
得分:0 
对啊..虽然可以用,但是在大程序的话可能会出大错..

每个人都是蛤蟆,只是井的大小不同罢了.
沙石下的泉水,挖得越深,泉水越清.
2008-11-21 17:19
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
for(i=0;i<10;++i)
{
    min=i;
    for(j=i+1;j<10;++j)
       if(a[min]>a[j])
            min=j;
    if(min!=i)
    {
        tmp=a[i];
        a[i]=a[min];
        a[min]=tmp;
    }
}
……
2008-11-21 18:46
fengzhi_zxw
Rank: 1
来 自:地球
等 级:新手上路
帖 子:10
专家分:0
注 册:2008-11-11
收藏
得分:0 
我认为应该是这样的吧:
#include <stdio.h>
void main()
{
    int i,j,e,a[10];
    printf("enter data:\n");
    for(i=0;i<=9;i++)
    {
        printf("a[%d]=",i);
        scanf("%d",&a[i]);   /*输入10个数*/
    }
    printf("\n");
    printf("The original numbers:\n");
    for(i=0;i<=9;i++)
        printf("%5d",a[i]);   /*输出这10个数*/
    printf("\n");
    for(i=0;i<=9;i++)         /*以下8行是对10个数排序*/
    {
        for(j=i+1;j<=9;j++)
            if(a[i]>a[j])
        {
    e=a[j];
    a[j]=a[i];
    a[i]=a[j];
    }      
    }
    printf("\n The sorted numbers:\n");
    for(i=0;i<=9;i++)           /*输出己排好序的10个数*/
        printf("%5d",a[i]);
    printf("\n");
}
2008-11-21 19:05
fengzhi_zxw
Rank: 1
来 自:地球
等 级:新手上路
帖 子:10
专家分:0
注 册:2008-11-11
收藏
得分:0 
#include <stdio.h>
void main()
{
    int i,j,e,a[10];
    printf("enter data:\n");
    for(i=0;i<=9;i++)
    {
        printf("a[%d]=",i);
        scanf("%d",&a[i]);   /*输入10个数*/
    }
    printf("\n");
    printf("The original numbers:\n");
    for(i=0;i<=9;i++)
        printf("%5d",a[i]);   /*输出这10个数*/
    printf("\n");
    for(i=0;i<=9;i++)         /*以下8行是对10个数排序*/
    {
        for(j=i+1;j<=9;j++)
            if(a[i]>a[j])
        {
    e=a[j];
    a[j]=a[i];
    a[i]=e;
    }      
    }
    printf("\n The sorted numbers:\n");
    for(i=0;i<=9;i++)           /*输出己排好序的10个数*/
        printf("%5d",a[i]);
    printf("\n");
}
弄错了一个地方
2008-11-21 19:08
快速回复:作业 用选择法排序10个数 但无法得到正确结果 援助[em08]
数据加载中...
 
   



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

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