| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1110 人关注过本帖
标题:求高手不吝指教,谢谢!!!
只看楼主 加入收藏
micholasmalo
Rank: 2
等 级:论坛游民
帖 子:40
专家分:62
注 册:2012-6-22
收藏
得分:0 
以下是引用lovecwu在2012-9-4 13:01:48的发言:

谢谢,但您的程序有点小错误,如下:
#include
void main()
{
long a[10],max;
int b,c;
printf("\nplease input ten numbers:\n");
for(b=0;b<10;b++)
scanf("%d",&a);            //必须改为scanf("%ld",&a);            
for(c=0;c<9;c++)
for(b=0;b<9-c;b++)
if(a>a)              //题目是从大到小输出,所以改为if(a
不错,你说的两点确实错了,但这是小问题,你的实际问题我已经解决了,算法才是精华。。。不给分只能说是人品问题!
收到的鲜花
  • lovecwu2012-09-10 19:00 送鲜花  2朵   附言:我很赞同
2012-09-09 19:05
micholasmalo
Rank: 2
等 级:论坛游民
帖 子:40
专家分:62
注 册:2012-6-22
收藏
得分:3 
以下是引用micholasmalo在2012-9-9 19:05:03的发言:

不错,你说的两点确实错了,但这是小问题,你的实际问题我已经解决了,算法才是精华。。。不给分只能说是人品问题!
没细看,既然你说了谢谢,那没分也是可以原谅的~~
2012-09-09 19:06
小赵q1
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:492
专家分:777
注 册:2011-8-26
收藏
得分:3 
其实冒泡法的原理就是楼主想象的那样,拿一个数和它后面的那个数比较,结果就是最左边就是最大的或者最小的那个数,
但是楼主的方法只进行了一次比较,也就是说a[0]里面放的确实是最大或者最小的数,但是a[1]里面就一定是仅次于a[0]的那个数吗?答案是:不一定,
所以要运用冒泡法做比较排序就要比较N-1次,每比较一遍元素个数向后移动一位,如第一次从a[0]比较,第二次从a[1]比较,这样在左边的就一定是仅次于前面那个的数,直到倒数第二个数和最后一个数比较过后排序结束。
2012-09-09 21:12
秋小米
Rank: 2
等 级:论坛游民
帖 子:21
专家分:33
注 册:2012-9-9
收藏
得分:3 
按冒泡排序法,我自己写了个程序:
程序代码:
#include <stdio.h>

int main(void)
{
    int a[10], i, j;
   
    for (i=0; i<=9; ++i)
        scanf("%d", &a[i]);
       
    int t;
       
    for (i=0; i<=9; i++)
    {
        for (j=i+1; j<=9; j++)
        {
            if (a[i]<a[j])
            {
                t = a[i];
                a[i] = a[j];
                a[j] = t;   
            }
        }
    }
   
    printf ("你输入的数字从大到小排列为:\n");
   
    for (i=0; i<=9; i++)
    {
        printf("%d ", a[i]);
    }
   
}
2012-09-10 09:49
DELLTOWER
Rank: 1
等 级:新手上路
帖 子:4
专家分:2
注 册:2012-9-2
收藏
得分:0 
回复 楼主 lovecwu
楼主的程序除了“循环结束后,b=10”这个不足外,想法很对,不过程序实现时有了问题。如下图,我输入1到10十个数字。(第二行数字是输入的数字重新输出,好做对比,第三行是排序后的结果)
图片附件: 游客没有浏览图片的权限,请 登录注册

我想应该是,找到最大的数进行相互赋值时出了问题。因为无论那次循环结束,b总是9,所以第一次比较后。以后每次赋值,a[c]变为最大值9,a[9]变为a[c]原来的值。最终c=7时,a[9]变为8。
按楼主的想法,改下代码
程序代码:
#include<stdio.h>
void main()
{
    long a[10],mid;
    int b,c;
    printf("please input ten numbers:\n");
    for(b=0;b<10;b++)
        scanf("%d",&a[b]);
    for(c=0;c<10;c++)
        printf("%d\t",a[c]);
    for(c=0;c<10;c++)
    {
        for(b=c+1;b<10;b++)
        {
            if(a[c]<a[b])  //发现最大值时,进行换位
            {
                mid=a[c];
                a[c]=a[b];
                a[b]=mid;   
            }

 
        }
     
    }
    for(c=0;c<10;c++)
         printf("%d\t",a[c]);
}
结果如下图
图片附件: 游客没有浏览图片的权限,请 登录注册
2012-09-12 00:57
青春无限
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江苏
等 级:贵宾
威 望:24
帖 子:3452
专家分:19340
注 册:2012-3-31
收藏
得分:0 

学 会看代码…学习写程序…学会搞开发…我的目标!呵呵是不是说大话啊!!一切皆可能
2012-09-12 07:13
快速回复:求高手不吝指教,谢谢!!!
数据加载中...
 
   



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

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