论坛交流
首页办公自动化| 网页制作| 平面设计| 动画制作| 数据库开发| 程序设计| 全部视频教程
应用视频: Windows | Word2007 | Excel2007 | PowerPoint2007 | Dreamweaver 8 | Fireworks 8 | Flash 8 | Photoshop cs | CorelDraw 12
编程视频: C语言视频教程 | HTML | Div+Css布局 | Javascript | Access数据库 | Asp | Sql Server数据库Asp.net  | Flash AS
当前位置 > 文字教程 > C语言程序设计教程
Tag:新手,函数,指针,数据类型,对象,Turbo,入门,运算符,数组,结构,二级,,tc,游戏,试题,问答,编译,视频教程

C语言习题_冒泡排序

文章类别:C语言程序设计 | 发表日期:2010-3-21 11:39:51

C语言习题_冒泡排序容易出现的错误

21视频教程网3月21日整理

错误实例如下:

       # include <stdio.h>
# include <string.h>
/*结构体定义*/
struct books
{
    char name[30], publisher[15];
    int num;
    float price;
}book[50];
void rank(books book[], int n);
int main()
{
    int i,n;
    printf("请输入图书数量:");
    scanf("%d",&n);
    printf("请分别输入书名、出版社、数量、单价(以空格分开):\n");
    for (i=0 ; i<n ; i++)
        {
            scanf("%s%s%d%f",&book[i].name,&book[i].publisher,&book[i].num,&book[i].price);
        }
    printf("\n");
    rank(book,n);
    return 0;
}

/*排序,输出函数rank*/
void rank(books book[], int n)
{
    int i,j,tnum;
    char tname[30],tpublisher[15];
    float tprice;
    for (i=0 ; i<n-1 ; i++)
    {
        for (j=0 ; j<n-i-1 ; j++)
            if(book[i].price>book[i+1].price)
            {
                strcpy(tname,book[i].name), strcpy(book[i].name,book[i+1].name), strcpy(book[i+1].name,tname);//交换书名
                strcpy(tpublisher,book[i].publisher), strcpy(book[i].publisher,book[i+1].publisher), strcpy(book[i+1].publisher,tpublisher);//交换出版商
                tnum=book[i].num, book[i].num=book[i+1].num, book[i+1].num=tnum;//交换数目
                tprice=book[i].price, book[i].price=book[i+1].price, book[i+1].price=tprice;//交换单价
            }
    }
    for (i=0 ; i<n ; i++)
        {
            printf("%s %s %d %.2f\n",book[i].name,book[i].publisher,book[i].num,book[i].price);
        }
}


按说输入以下内容:
3
a aa 50 25.5
b bb 30 31.55
c cc 60 18.3
时应该出现的结果是:
c cc 60 18.3
a aa 50 25.5
b bb 30 31.55
可为何却出现:
a aa 50 25.5
c cc 60 18.3
b bb 30 31.55

C语言编辑部纠错:

void rank(books book[], int n)
{
    int i,j,tnum;
    char tname[30],tpublisher[15];
    float tprice;
    struct books tmp;
    for (i=0 ; i<n ; i++)
    {
        for (j=i+1 ; j<n ; j++)
            if(book[i].price>book[j].price)
            {
                tmp = book[i];
                book[i] = book[j];
                book[j] = tmp;
            }
    }
    for (i=0 ; i<n ; i++)
    {
        printf("%s %s %d %.2f\n",book[i].name,book[i].publisher,book[i].num,book[i].price);
    }
}

出错的原因在于:
if(book[i].price>book[i+1].price)
to
if(book[j].price>book[j+1].price)
下面花括号里的i也相应地改为j

C语言编辑部

上一篇:{实例}C语言_linxu epoll问题 人气:2639
下一篇:{实例}C语言习题_字符串换位 人气:2638
视频教程列表
文章教程搜索
 
C语言程序设计推荐教程
C语言程序设计热门教程
看全部视频教程
购买方式/价格
购买视频教程: 咨询客服
tel:15972130058