| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2347 人关注过本帖
标题:用冒泡排序编程,代码运行正确,但结果排出了负数,望各位指点 ^_^
只看楼主 加入收藏
Redeyes
Rank: 4
来 自:中国
等 级:业余侠客
威 望:1
帖 子:301
专家分:292
注 册:2015-5-13
结帖率:86%
收藏
已结贴  问题点数:18 回复次数:6 
用冒泡排序编程,代码运行正确,但结果排出了负数,望各位指点 ^_^
题目描述
编程输入10个正整数,然后自动按从大到小的顺序输出。
输入
输入只有一行,包括10整数.
输出
输出只有一行,包括10个整数。
样例输入
1 2 3 4 5 7 6 8 9 10
样例输出
10 9 8 7 6 5 4 3 2 1
程序代码:
#include<stdio.h>
#define N 10
int main()
{
    int a[N];
    int i,j,k;
    for(i=1;i<=N;i++)
    {
        scanf("%d",&a[i]);
    }
    for(i=0;i<N;i++)
        for(j=0;j<N-1;j++)
    if(a[j]<a[j+1])
    {
        k=a[j];
        a[j]=a[j+1];
        a[j+1]=k;
    }
    for(i=1;i<=N;i++)
        printf("%5d",a[i]);

 } 
搜索更多相关主题的帖子: 正整数 
2016-02-23 13:48
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
收藏
得分:4 
你的错误在于数组下标越界了,请注意数组的下标从0开始,到N-1结束。请参考下面代码做改正。
程序代码:
#include <stdio.h>
#include <stdlib.h>
#define N 10

void sortArraybyXuanzhe(int a[]);  //选择排序
void sortArraybyMaopao(int a[]);   //冒泡排序

int main()
{
    int arr1[N]={1,3,5,7,9,2,4,6,8,10};
    int arr2[N]={1,3,5,7,9,2,4,6,8,10};

    sortArraybyXuanzhe(arr1);
    sortArraybyMaopao(arr2);

    return 0;
}

void sortArraybyXuanzhe(int a[])
{
    int i,j,tmp;

    for(i=0;i<N-1;i++)
    {
        for(j=i+1;j<N;j++)
        {
            if(a[i]>a[j])
            {
                tmp=a[i];
                a[i]=a[j];
                a[j]=tmp;
            }
        }
    }

    for(i=0;i<N;i++)
    {
        printf("%d ",a[i]);
    }
    printf("\n");
}

void sortArraybyMaopao(int a[])
{
    int i,j,tmp;

    for(i=0;i<N;i++)
    {
        for(j=0;j<N-1;j++)
        {
            if(a[j]>a[j+1])
            {
                tmp=a[j];
                a[j]=a[j+1];
                a[j+1]=tmp;
            }
        }
    }

    for(i=0;i<N;i++)
    {
        printf("%d ",a[i]);
    }
    printf("\n");
}


[此贴子已经被作者于2016-2-23 14:23编辑过]


   唯实惟新 至诚致志
2016-02-23 13:50
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:4 
程序代码:
程序代码:

#include<stdio.h>
#define N 10
int main()

 {
     int a[N];
     int i,j,k;
     for(i=1;i<=N;i++)//应该修改为(i=0;i<N;i++)C语言数组下标是从零开始的,所以当我们声明一个大小为X的数组是,有效下标为(0到X-1)
     {
         scanf("%d",&a[i]);
     }
     for(i=0;i<N;i++)
         for(j=0;j<N-1;j++)
     if(a[j]<a[j+1])
     {
         k=a[j];
         a[j]=a[j+1];
         a[j+1]=k;
     }
     for(i=1;i<=N;i++)//同理,这里也是错的。。。
         printf("%5d",a[i]);
  } 

φ(゜▽゜*)♪
2016-02-23 17:18
傻瓜都一样
Rank: 2
等 级:论坛游民
帖 子:8
专家分:12
注 册:2016-1-7
收藏
得分:4 
楼主理解有错误吧:
题目描述
编程输入10个正整数,然后自动按从大到小的顺序输出。
输入
输入只有一行,包括10整数.//注意这里,输入只有一行,包括10整数
输出
输出只有一行,包括10个整数。
样例输入
1 2 3 4 5 7 6 8 9 10
样例输出
10 9 8 7 6 5 4 3 2 1

以下这个循环是不能只输入一行的。
    for(i=1;i<=N;i++)
    {
        scanf("%d",&a[i]);
    }
2016-02-23 17:35
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:0 
回复 4楼 傻瓜都一样
0.0我不是很理解你说的这个“一行”是指什么?scanf读数的时候只要有空格/回车/换行等有效的分隔符就行了。不是非要用换行的

φ(゜▽゜*)♪
2016-02-24 18:46
木子韦德C
Rank: 1
等 级:新手上路
帖 子:2
专家分:4
注 册:2016-2-3
收藏
得分:4 
scanf输入时数组的下标i应该从0开始吧
2016-02-24 21:32
ldsh304
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:7
帖 子:242
专家分:755
注 册:2016-1-18
收藏
得分:4 
回复 6楼 木子韦德C
a[0]——a[9]正好10个数

#include<stdio.h>
#define N 10
int main()
 {
     int a[N];
     int i,j,k;
     for(i=1;i<=N;i++)
     {
         scanf("%d",&a[i]);
     }
     for(i=0;i<N;i++)
         for(j=0;j<N-1;j++)    //这里应改成j<N-1 应该改成 j<N-i-1 或者 j<=N-i
     if(a[j]<a[j+1])
     {
         k=a[j];
         a[j]=a[j+1];
         a[j+1]=k;
     }
     for(i=1;i<=N;i++)
         printf("%5d",a[i]);
  }
2016-02-24 21:43
快速回复:用冒泡排序编程,代码运行正确,但结果排出了负数,望各位指点 ^_^
数据加载中...
 
   



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

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