| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1110 人关注过本帖
标题:求高手不吝指教,谢谢!!!
只看楼主 加入收藏
lovecwu
Rank: 1
等 级:新手上路
帖 子:6
专家分:1
注 册:2012-9-3
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:15 
求高手不吝指教,谢谢!!!
题:随机输入10个整数,用C编程将其从大到小依次输出。
     我编程如下,思想为:从第一个数开始,将其与后面的每个数比较,求出最大值,若最大值不是第一个数,则将最大值与第一个数互换位置;然后又从第二个数开始,将第二个数与后面的每个数比较,求出最大值,若最大值不是第二个数,则将此最大值与第二个数互换位置;依此类推,直至最后一位。但按如下程序运行,输出结果却不正确。求解!!!
#include<stdio.h>
void main()
{
 long a[10],max,mid;
 int b,c;
 printf("\nplease input ten numbers:\n");
 for(b=0;b<10;b++)
 scanf("%d",&a[b]);
 for(c=0;c<10;c++)
 {
  max=a[c];
  for(b=c+1;b<10;b++)
  {
   if(max<a[b])
   max=a[b];
  }
  if(max!=a[c])
  {
   mid=a[c];
   a[c]=max;
   a[b]=mid;
  }
 }
  for(c=0;c<10;c++)
  printf("\n%d",a[c]);
}
搜索更多相关主题的帖子: 最大值 numbers include 编程 
2012-09-03 02:14
netlin
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:24
帖 子:544
专家分:4308
注 册:2012-4-9
收藏
得分:3 
楼主,应该是这一段出问题了:
for(c=0;c<10;c++)
{
  max=a[c];
  for(b=c+1;b<10;b++)
  {
   if(max<a[b])
   max=a[b];
  }        //循环完后,b的值已经是10,不是原来最大值的下标了!
  if(max!=a[c])
  {
   mid=a[c];
   a[c]=max;
   a[b]=mid;
  }
}

做一些修改:(增加一个下标变量,用来记录最大值的位置)
#include<stdio.h>
void main()
{
long a[10],max,mid;
int b,b2,c;
printf("\nplease input ten numbers:\n");
for(b=0;b<10;b++)
scanf("%d",&a[b]);
for(c=0;c<10;c++)
{
  max=a[c];
  for(b=c+1;b<10;b++)
  {
   if(max<a[b]){
       b2=b;
       max=a[b];
    }
  }
  if(max!=a[c])
  {
   mid=a[c];
   a[c]=max;
   a[b2]=mid;
  }
}
  for(c=0;c<10;c++)
  printf("\n%d",a[c]);
}
收到的鲜花
  • lovecwu2012-09-04 00:37 送鲜花  3朵   附言:我很赞同,感谢指点迷津

做自己喜欢的事!
2012-09-03 09:43
lovecwu
Rank: 1
等 级:新手上路
帖 子:6
专家分:1
注 册:2012-9-3
收藏
得分:0 
回复 2楼 netlin
感谢指教,但按您的程序运行后仍然得不到正确结果。感谢
2012-09-03 13:26
lovecwu
Rank: 1
等 级:新手上路
帖 子:6
专家分:1
注 册:2012-9-3
收藏
得分:0 
回复 2楼 netlin
感谢您的指教,但按您修改后的程序运行仍得不到正确结果,我仔细查看程序后发现了其中的另一个问题如下。总之非常感谢!
#include<stdio.h>
void main()
{
long a[10],max,mid;
int b,b2,c;
printf("\nplease input ten numbers:\n");
for(b=0;b<10;b++)
scanf("%d",&a[b]);      //此处必须改为scanf("%ld",&a[b]);因为定义时数组a[10]为long型。
for(c=0;c<10;c++)         
{                        
  max=a[c];               
  for(b=c+1;b<10;b++)
  {
   if(max<a[b]){
       b2=b;
       max=a[b];
    }
  }
  if(max!=a[c])
  {
   mid=a[c];
   a[c]=max;
   a[b2]=mid;
  }
}
  for(c=0;c<10;c++)
  printf("\n%d",a[c]);   //此处需改为printf("\n%ld",a[c]);  但此处不改的话也是OK的
}
2012-09-04 00:36
micholasmalo
Rank: 2
等 级:论坛游民
帖 子:40
专家分:62
注 册:2012-6-22
收藏
得分:0 
#include<stdio.h>
void main()
{
long a[10],max;
int b,c;
printf("\nplease input ten numbers:\n");
for(b=0;b<10;b++)
scanf("%d",&a[b]);
for(c=0;c<9;c++)
for(b=0;b<9-c;b++)
if(a[b]>a[b+1])
{
max=a[b];
a[b]=a[b+1];
a[b+1]=max;
}
  for(c=0;c<10;c++)
  printf("\n%ld",a[c]);
}
用的是冒泡法~~~
收到的鲜花
  • lovecwu2012-09-10 19:03 送鲜花  2朵   附言:好文章
2012-09-04 02:28
wiseley747
Rank: 1
等 级:新手上路
帖 子:22
专家分:8
注 册:2012-8-16
收藏
得分:0 
回复 楼主 lovecwu
程序代码:
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int a[10] = {34, 12, 5, 66, 1,23,54,66,77,88};
    int i,j,tmp,k;
    for(i=10;i>1;i--)
    {
      for(j=0;j<=i-2;j++)
      {
        printf("i=%d j=%d\n",i,j);
        if(a[j]>a[j+1])
        {
          tmp = a[j];
          a[j] = a[j+1];
          a[j+1] = tmp;   
         
        }
         
      }
    }
    for(i=0;i<10;i++)
          
      printf("%d\n", a[i]);
    system("pause");
    return 0;
}

    
哈哈 大家的冒泡排序都好複雜  這樣比較簡單  
我把a[10]元素改成定值 這樣很快可以看出結果
大家的代碼我再研究一下
图片附件: 游客没有浏览图片的权限,请 登录注册
2012-09-04 11:02
lovecwu
Rank: 1
等 级:新手上路
帖 子:6
专家分:1
注 册:2012-9-3
收藏
得分:0 
回复 5楼 micholasmalo
谢谢,但您的程序有点小错误,如下:
#include<stdio.h>
void main()
{
long a[10],max;
int b,c;
printf("\nplease input ten numbers:\n");
for(b=0;b<10;b++)
scanf("%d",&a[b]);            //必须改为scanf("%ld",&a[b]);            
for(c=0;c<9;c++)
for(b=0;b<9-c;b++)
if(a[b]>a[b+1])              //题目是从大到小输出,所以改为if(a[b]<a[b+1])              
{
max=a[b];
a[b]=a[b+1];
a[b+1]=max;
}
  for(c=0;c<10;c++)
  printf("\n%ld",a[c]);
}
用的是冒泡法~~~
2012-09-04 13:01
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:3 
回复 6楼 wiseley747
咦,这是真正台湾的朋友耶。抑或香港?

授人以渔,不授人以鱼。
2012-09-04 13:15
wiseley747
Rank: 1
等 级:新手上路
帖 子:22
专家分:8
注 册:2012-8-16
收藏
得分:3 
回复 8楼 TonyDeng
我來自台北
很高興認識你
2012-09-04 18:10
senpujituan
Rank: 4
等 级:业余侠客
帖 子:91
专家分:203
注 册:2012-6-29
收藏
得分:3 
我想你是想用选择排序法吧,那不妨这样,你记录下标,比如把:max=a[c]改为 max=c 参考程序如下:
程序代码:
#include<stdio.h>
int main(int argc, char *argv[])
{
    int n,i,j,t,index;
    long a[10];
    for(i=0;i<10;i++)
    scanf("%d",&a[i]);

    for(i=0;i<9;i++)
    {
        index=i;
        for(j=i+1;j<10;j++)
        {
            if(a[j]>a[index])
               index=j;
        }
        if(a[i]!=a[index])
        {
        t=a[i];
        a[i]=a[index];
        a[index]=t;
        }
    }

    for(i=0;i<10;i++)
    printf("%d ",a[i]);

    return 0;
}

2012-09-04 18:27
快速回复:求高手不吝指教,谢谢!!!
数据加载中...
 
   



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

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