| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 455 人关注过本帖
标题:修改一下.还差一步了,只能显示最长的名字,其它的不能显示.
只看楼主 加入收藏
yuchin
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2010-5-7
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:7 
修改一下.还差一步了,只能显示最长的名字,其它的不能显示.
#include<stdio.h>
#include<string.h>


struct book
{
        char name[10];
        float price;
}
        pers[10];

void change(void);
void print_book(void);
void putinbook(void);

void main()
{   
        putinbook();
        print_book();               
        change();
        printf("That's ok!\n");
       system("pause");
}

void print_book(void)
{
        int i;
        printf("the first turn:\n");
        for(i=0;i<10;i++)
        printf("%s\t%g\n",pers[i].name,pers[i].price);
}

void putinbook(void)
{
        int i;
        printf("Please input 10 books name,price:\n");
        for(i=0;i<10;i++)
        scanf("%s %f",pers[i].name,&pers[i].price);
}
void change(void)
{
        int i,finish,j;
        float min;
        char minname[10];
        char ove[100];
        printf("the turn after sort:\n");
        printf("book name\tbook price\n");
        for(i=0;i<10;i++)
        {
             finish=1;
             for(j=0;j<10;j++)
             {
                 if(pers[j].price<pers[j+1].price)
                 {
                      min=pers[j].price;
                      pers[j].price=pers[j+1].price;
                      pers[j+1].price=min;
                      strcpy(minname,pers[j].name);
                      strcpy(pers[j].name,pers[j+1].name);
                      strcpy(pers[j+1].name,minname);
                      finish=0;
                 }
                 if(pers[j].price==pers[j+1].price)
                 {
                     
                     if(strcmp(pers[j].name,pers[j+1].name)<0)
                    {
                        ove[100]=pers[j].price;
                        pers[j].price=pers[j+1].price;
                        pers[j+1].price=ove[100];
                        strcpy(pers[j].name,pers[j+1].name);
                        strcpy(pers[j+1].name,ove);
                        finish=0;
                    }
                 }
                 
                 
             }
             if(finish==1)   
             break;
        }
        for(i=0;i<10;i++)
        printf("%s\t\t%g\n",pers[i].name,pers[i].price);
}
搜索更多相关主题的帖子: change 名字 
2011-01-16 17:59
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
收藏
得分:20 
void change(void)
{
        int i,j;
        float min=0;
        char minname[100];
        char ove[100];
        printf("the turn after sort:\n");
        printf("book name\tbook price\n");
        for(i=0;i<9;i++)
        {
               for(j=i+1;j<10;j++)
             {
                 if(pers[i].price<pers[j].price)
                 {
                      min=pers[i].price;
                      pers[i].price=pers[j].price;
                      pers[j].price=min;
                      strcpy(minname,pers[i].name);
                      strcpy(pers[i].name,pers[j].name);
                      strcpy(pers[j].name,minname);
                   }
                 if(pers[i].price==pers[j].price)
                 {
                     
                     if(strcmp(pers[i].name,pers[j].name)<0)
                    {
                        min=pers[i].price;
                        pers[i].price=pers[j].price;
                        pers[j].price=min;
                        strcpy(ove,pers[i].name);
                        strcpy(pers[i].name,pers[j].name);
                        strcpy(pers[j].name,ove);

                    }
                 }
              }
          }
        for(i=0;i<10;i++)
        printf("%s\t\t%g\n",pers[i].name,pers[i].price);
}

[ 本帖最后由 qq1023569223 于 2011-1-16 18:37 编辑 ]

   唯实惟新 至诚致志
2011-01-16 18:20
yuchin
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2010-5-7
收藏
得分:0 
回复 2楼 qq1023569223
问题应该不是那么简单,我用9和10效果一样.我觉得问题出在这.
程序代码:
                    if(strcmp(pers[j].name,pers[j+1].name)<0)
                    {
                        ove[100]=pers[j].price;
                        pers[j].price=pers[j+1].price;
                        pers[j+1].price=ove[100];
                        strcpy(pers[j].name,pers[j+1].name);
                        strcpy(pers[j+1].name,ove);
                        finish=0;
                    }
但我已经能力到限了,找不出来问题.
本来是10个书名,结果只输出了最长的那个,剩下的都是空名.
2011-01-16 18:28
yuchin
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2010-5-7
收藏
得分:0 
回复 2楼 qq1023569223
我的思路是如果price相同,就用名字长短来排序.
2011-01-16 18:31
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
收藏
得分:0 
我再改了下,你试试。

   唯实惟新 至诚致志
2011-01-16 18:34
yuchin
Rank: 1
等 级:新手上路
帖 子:19
专家分:0
注 册:2010-5-7
收藏
得分:0 
回复 5楼 qq1023569223
可以了。我假期也该把书好好再看看了。
谢谢你。
2011-01-16 18:38
A13433758072
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广东潮州
等 级:小飞侠
威 望:1
帖 子:1182
专家分:2784
注 册:2010-7-22
收藏
得分:0 
            。。。。。。。。。。。。悲剧               






 #include<stdio.h>
#include<string.h>
#include<stdlib.h>


struct book
{
        char name[10];
        float price;
}
        pers[10];

void change(void);
void print_book(void);
void putinbook(void);

void main()
{   
        putinbook();
        print_book();               
        change();
        printf("That's ok!\n");
       system("pause");
}

void print_book(void)
{
        int i;
        printf("the first turn:\n");
        for(i=0;i<10;i++)
        printf("%s\t%g\n",pers[i].name,pers[i].price);
}

void putinbook(void)
{
        int i;
        printf("Please input 10 books name,price:\n");
        for(i=0;i<10;i++)
        scanf("%s %f",pers[i].name,&pers[i].price);
}
void change(void)
{
        int i,finish,j;
        float min;
        char minname[10];
        char ove[100];
        printf("the turn after sort:\n");
        printf("book name\tbook price\n");
        for(i=0;i<10;i++)
        {
             finish=1;
             for(j=0;j<10;j++)
             {
                 if(pers[9].price<pers[9+1].price)
                 {
                      min=pers[9].price;
                      pers[9].price=pers[9+1].price;
                      pers[9+1].price=min;
                      strcpy(minname,pers[j].name);
                      strcpy(pers[j].name,pers[j+1].name);
                      strcpy(pers[j+1].name,minname);
                      finish=0;
                 }
                 if(pers[j].price==pers[j+1].price)
                 {
                     
                     if(strcmp(pers[j].name,pers[j+1].name)<0)
                    {
                        ove[100]=pers[j].price;
                        pers[j].price=pers[j+1].price;
                        pers[j+1].price=ove[100];
                        strcpy(pers[j].name,pers[j+1].name);
                        strcpy(pers[j+1].name,ove);
                        finish=0;
                    }
                 }
                 
                 
             }
             if(finish==1)   
             break;
        }
        for(i=0;i<10;i++)
        printf("%s\t\t%g\n",pers[i].name,pers[i].price);
}               

一步一个脚印...............................默默地前进.....
诚邀乐于解答c菜鸟问题,的热心网友加入,  QQ群38490319
2011-01-16 18:46
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
收藏
得分:0 
楼上的对头。

   唯实惟新 至诚致志
2011-01-16 18:49
快速回复:修改一下.还差一步了,只能显示最长的名字,其它的不能显示.
数据加载中...
 
   



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

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