hxlou520 发表于 2008-9-6 13:20

请高手指教"一道排序題"

从键盘上顺序输入10本书的名称和单价,程序按照单价从小到大进行排序,然后输出排序的结果。

那位高手能不能幫我解答下啊...謝謝了,小弟在此感謝



怎么样才能输出单价的同时也把对应的书名一同输出.....
请各位高手帮助下,谢谢了
下面我只是把代码缩段用来调试的,所以没有把10本书的条件全部写进去....
#include<stdio.h>
main()
{
int i,price[10];
void Price(int price1[]);
char bname[10];
printf("\ninput book name and price:\n");
for(i=0;i<5;i++)
  scanf("%s",&bname);
for(i=0;i<5;i++)
  scanf("%d",&price[i]);
printf("\n");
Price(price);
}
void Price(int price1[])
{
int i,j,p,q,temp;
for(i=0;i<5;i++)
{
  p=i;q=price1[i];
  for(j=i+1;j<5;j++)
  if(q>price1[j])
  {
   p=j;
   q=price1[j];
  }
  if(i!=p)
  {
   temp=price1[i];
   price1[i]=price1[p];
   price1[p]=temp;
  }
  printf("%d ",price1[i]);
}
printf("\n");
}

[[it] 本帖最后由 hxlou520 于 2008-9-6 21:49 编辑 [/it]]

StarWing83 发表于 2008-9-6 14:08

不能,随便哪本书都有排序的。
你自己不认真看。

hxlou520 发表于 2008-9-6 14:10

不是啊,我自己現在也在調試啊...可是輸入的時候就有點問題了....

我是初學者,不太懂啊....

希望你們以幫我說下就可以了...代碼我可以自己寫....

StarWing83 发表于 2008-9-6 14:18

算法问题自己解决,况且,我都不知道你准备使用什么算法

曾经发了一个排序算法总结贴,你搜索以下看看?

hxlou520 发表于 2008-9-6 14:22

那謝謝你了....

pinglideyu 发表于 2008-9-6 16:41

一个结构体,一个交换就OK了。
估计LZ基础不是很硬,要多看看书呀。

hxlou520 发表于 2008-9-6 20:16

呵呵,不好意思让你笑话了.....

一定努力把基础学硬...

cosdos 发表于 2008-9-6 21:10

typedef struct {
    char Name[81];
    int Prices;
} Book;

Book books[10];

字符串比较 strcmp()
整形比较 > 或 <

[[it] 本帖最后由 cosdos 于 2008-9-6 21:11 编辑 [/it]]

hxlou520 发表于 2008-9-6 21:29

排序问题......

我以下的代码自己写,可是我不知道怎么在输出单价的时候也把对应的书名输出啊??
请各位高手指点下.
谢谢了

#include<stdio.h>
main()
{
int i,price[10];
void Price(int price1[]);
char bname[10];
printf("\ninput book name and price:\n");
for(i=0;i<5;i++)
  scanf("%s",&bname);
for(i=0;i<5;i++)
  scanf("%d",&price[i]);
printf("\n");
Price(price);
}
void Price(int price1[])
{
int i,j,p,q,temp;
for(i=0;i<5;i++)
{
  p=i;q=price1[i];
  for(j=i+1;j<5;j++)
  if(q>price1[j])
  {
   p=j;
   q=price1[j];
  }
  if(i!=p)
  {
   temp=price1[i];
   price1[i]=price1[p];
   price1[p]=temp;
  }
  printf("%d ",price1[i]);
}
printf("\n");
}

广陵绝唱 发表于 2008-9-6 22:49

[code]/*******************************************************************************

        从键盘上顺序输入10本书的名称和单价,程序按照单价从小到大进行排序,
    然后输出排序的结果。

*******************************************************************************/
#include<stdio.h>
#define N 10
#define Y {char c;while(c=getchar()!='\n');}
struct ST
{
    char name[20];
    float money;
}book[N],num;
void _input()  /* 输入 */
{
    int i;
    float m;
    for(i=0;i<N;i++)
    {
        printf("input NO.%d name\n",i+1);
        gets(book[i].name);
        printf("input money:\n");
        scanf("%f",&m);
        Y;  /* 清除键盘缓存 */
        book[i].money=m;
    }
}
void px()  /* 冒泡法排序 */
{
    int i,j;
    for(i=0;i<N;i++)
        for(j=i+1;j<N;j++)
            if(book[i].money>book[j].money)
            {
                num=book[i];
                book[i]=book[j];
                book[j]=num;
            }
}
int main(void)
{
    int i;
    _input();
    px();
    for(i=0;i<N;i++)
        printf("%10s %10.2f\n",book[i].name,book[i].money);
    getch();
}


[/code]

hxlou520 发表于 2008-9-6 22:54

谢谢你,广陵。。。。

广陵绝唱 发表于 2008-9-6 23:04

回复 11# hxlou520 的帖子

~~~~~~~~~~~~~~~~~~~

    不用客气,也许这里的高手们真的不屑于回答这种初级问题,也许是真的回答不耐烦了——不过据我到这里这么长时间的观察,没看到有几个耐心回答初级问题的。

    记得当初我也到这来问过类似的问题(结构体的排序),但也许是我的问题描述得不对,也许是我的态度不佳。总之没得到我想得到的点拔,后来自己苦思冥想,终于把问题弄明白了。

    我现在告诉了你,你豁然开朗,一下子明白了。但当你遇到下一问题时,又会很苦恼。所以,遇到问题自己多思考,实在不明白了,再上这里来问一下。高手们能点拔一下,是自己的幸运,高手们不屑于回答,那是再正常不过的事情,也不必怨天尤人。

    祝你学C愉快,天天进步。

hxlou520 发表于 2008-9-6 23:24

嗯,还是要谢谢你,刚才看了结构那章现在有点明白了,因为之前没有去看这章然后就接触这道题,所以看上去感觉什么都不懂,不过刚才去看了下,明白了很多。。。

谢谢你的祝愿。。。。

下次有什么不明白的地方可以在问你吗?

会不会打扰你?

页: [1]

编程论坛