| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 558 人关注过本帖
标题:帮忙解决数组排序问题。
只看楼主 加入收藏
wwfdzh2012
Rank: 2
等 级:论坛游民
帖 子:88
专家分:27
注 册:2012-11-22
结帖率:94.12%
收藏
已结贴  问题点数:20 回复次数:12 
帮忙解决数组排序问题。
程序代码:
#include<stdio.h>
void main()
{
    int a[11],i,j,t;
    printf("输入10个整数:");
    for(i=0;i<10;i++)
        scanf("%d",&a[i]);
    for(i=0;i<10;i++)
        for(j=0;j<10-i;j++)
        {    if(a[j]<a[j+1])
            {t=a[j],a[j]=a[j+1],a[j+1]=t;}
        }
    printf("由大到小排序为:\n");
    for(i=0;i<10;i++)
        printf("%d\n",a[i]);
   
    printf("输入一个新整数:");
    scanf("%d",&a[10]);
    for(i=0;i<11;i++)
        for(j=0;j<11-i;j++)
        {    if(a[j]<a[j+1])
            {t=a[j],a[j]=a[j+1],a[j+1]=t;}
        }
    printf("新排序为:\n");
    for(i=0;i<11;i++)
       printf("%d\n",a[i]);
}
这个程序是:先输入10个整数进行排序,然后再输入一个新整数再按原来的排序方式插入,形成一个新的排序,运行程序输入10个整数可以排列,但是当输入一个新的数时,程序报错,见附件。
图片附件: 游客没有浏览图片的权限,请 登录注册
2012-12-01 16:51
青春无限
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江苏
等 级:贵宾
威 望:24
帖 子:3452
专家分:19340
注 册:2012-3-31
收藏
得分:0 
kk

学 会看代码…学习写程序…学会搞开发…我的目标!呵呵是不是说大话啊!!一切皆可能
2012-12-01 16:53
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
for(i=0;i<10 - 1;i++)
         for(j=0;j<10-i - 1;j++)
for(i=0;i<11 - 1;i++)
         for(j=0;j<11-i - 1;j++)


[fly]存在即是合理[/fly]
2012-12-01 17:28
C_596322153
Rank: 6Rank: 6
来 自:徽州
等 级:侠之大者
帖 子:182
专家分:466
注 册:2012-1-10
收藏
得分:0 
你可以把 数组初始化一下
2012-12-01 17:41
wwfdzh2012
Rank: 2
等 级:论坛游民
帖 子:88
专家分:27
注 册:2012-11-22
收藏
得分:0 
回复 3楼 azzbcc
麻烦讲清楚一点。。。
2012-12-01 17:42
wwfdzh2012
Rank: 2
等 级:论坛游民
帖 子:88
专家分:27
注 册:2012-11-22
收藏
得分:0 
回复 4楼 C_596322153
还是不行,排序的代码不知道哪里错了。。。
2012-12-01 17:47
wendyc
Rank: 1
来 自:江西省萍乡市
等 级:新手上路
帖 子:6
专家分:4
注 册:2012-11-18
收藏
得分:2 
你试着在声明int a[11]时改为int a[12],我的成功了。
即就是整个程序为:

#include<stdio.h>
void main()
{
    int a[12],i,j,t;
    printf("输入10个整数:");
    for(i=0;i<10;i++)
        scanf("%d",&a[i]);
    for(i=0;i<10;i++)
        for(j=0;j<10-i;j++)
        {    if(a[j]<a[j+1])
            {t=a[j],a[j]=a[j+1],a[j+1]=t;}
        }
    printf("由大到小排序为\n");
    for(i=0;i<10;i++)
        printf("%d\n",a[i]);
   
    printf("输入一个新整数:");
    scanf("%d",&a[i]);
    for(i=0;i<11;i++)
        for(j=0;j<11-i;j++)
        {    if(a[j]<a[j+1])
            {t=a[j],a[j]=a[j+1],a[j+1]=t;}
        }
    printf("新排序为:\n");
    for(i=0;i<11;i++)
       printf("%d\n",a[i]);
}

精简, 创新
2012-12-01 17:55
wwfdzh2012
Rank: 2
等 级:论坛游民
帖 子:88
专家分:27
注 册:2012-11-22
收藏
得分:0 
回复 7楼 wendyc
是可以,但是,我无法理解我的程序哪里错了。。麻烦讲解一下。。。
2012-12-01 18:01
wendyc
Rank: 1
来 自:江西省萍乡市
等 级:新手上路
帖 子:6
专家分:4
注 册:2012-11-18
收藏
得分:2 
我前面那次的修改有问题,我刚再修改了下发现也可以,我觉得我这次的修改更合理些,我也是初学者,所以也讲不出声明道理来哈
你把后面的循环for(j=0;j<11;j++)需改成for(j=0;j<10;j++),另外其实你后面的for(i=0;i<11;i++)循环去掉也是可以执行的,所以这个循环可以去掉。至于里面的道理我也不是很明白。
修改如下:
#include<stdio.h>
void main()
{
    int a[11],i,j,t;
    printf("输入10个整数:");
    for(i=0;i<10;i++)
        scanf("%d",&a[i]);
    for(i=0;i<10;i++)
        for(j=0;j<10-i;j++)
        {    if(a[j]<a[j+1])
            {t=a[j],a[j]=a[j+1],a[j+1]=t;}
        }
    printf("由大到小排序为\n");
    for(i=0;i<10;i++)
        printf("%d\n",a[i]);
   
    printf("输入一个新整数:");
    scanf("%d",&a[i]);
    /*for(i=0;i<11;i++)*/
        for(j=0;j<10;j++)
        {    if(a[j]<a[j+1])
            {t=a[j],a[j]=a[j+1],a[j+1]=t;}
        }
    printf("新排序为:\n");
    for(i=0;i<11;i++)
       printf("%d\n",a[i]);
}

精简, 创新
2012-12-01 18:32
wwfdzh2012
Rank: 2
等 级:论坛游民
帖 子:88
专家分:27
注 册:2012-11-22
收藏
得分:0 
回复 9楼 wendyc
这样是可以,可是不理解啊,这个算法貌似让我很头疼。。。
2012-12-01 18:35
快速回复:帮忙解决数组排序问题。
数据加载中...
 
   



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

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