| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1254 人关注过本帖
标题:结构体成员排序问题
只看楼主 加入收藏
你不想去那儿
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:56
专家分:114
注 册:2012-9-21
结帖率:100%
收藏
已结贴  问题点数:5 回复次数:8 
结构体成员排序问题
程序代码:
#include<stdio.h>
#include<string.h>
struct Student
{
    char num[6];
    char name[10];
    int math;
    int english;
    int general;
};
struct Student stu[100]={{"05001","Jam",78,68,146},{"05002","Bill",80,98,178},{"05003","Bob",82,83,165},{"05004","Sam",69,82,151},{"05005","Steven",94,83,177}};
void exchange(struct Student stu[],struct Student *p1,struct Student *p2)        //交换函数
{
    int matht,englisht,generalt;
    char namet[10],numt[6];
    strcpy(numt,p1->num);strcpy(p1->num,p2->num);strcpy(p2->num,numt);
    strcpy(namet,p1->name);strcpy(p1->name,p2->name);strcpy(p2->name,namet);
    matht=p1->math;p1->math=p2->math;p2->math=matht;
    englisht=p1->english;p1->english=p2->english;p2->english=englisht;
    generalt=p1->general;p1->general=p2->general;p2->general=generalt;
}

//功能八,通过总分信息排序
void main()       
{
    int i,j,k,m,p;
    int hign;
    for(m=0;m<100;m++)
    if(stu[m].num[0]==NULL)
    {
        hign=m-1;
        break;
    }
    printf("%d\n",hign);
    for(i=hign;i<=0;i--)        //我感觉着部分好像没有执行啊!
        for(j=0;j<i;j++)
            if(p=stu[j].general>stu[j+1].general)
            {
                printf("%d",p);
                exchange(stu,&stu[j],&stu[j+1]);        //冒泡排序
            }
    for(k=0;k<100;k++)
        if(stu[k].num[0]!=NULL)
            printf("%s    %s    %d    %d    %d\n",stu[k].num,stu[k].name,stu[k].math,stu[k].english,stu[k].general);
}
我感觉着有一部分好像没有执行啊!
搜索更多相关主题的帖子: english general 结构体 color 
2012-12-21 15:34
w527705090
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:11
帖 子:441
专家分:1882
注 册:2011-6-28
收藏
得分:0 
排序成功了吗?

有心者,千方百计;无心者,千难万难。
2012-12-21 15:44
daniel_
Rank: 5Rank: 5
等 级:职业侠客
帖 子:212
专家分:307
注 册:2012-11-13
收藏
得分:5 
#include<stdio.h>
#include<string.h>

typedef struct Student
{
    char num[6];
    char name[10];
    int math;
    int english;
    int general;
}STU;

STU stu[100]={
                {"05001","Jam",78,68,146},
                {"05002","Bill",80,98,178},
                {"05003","Bob",82,83,165},
                {"05004","Sam",69,82,151},
                {"05005","Steven",94,83,177}
            };
void exchange(STU stu[],struct Student *p1,struct Student *p2)        //交换函数
{
    int matht = 0;
    int englisht = 0;
    int generalt = 0;
    char namet[10];
    char numt[6];

    strcpy(numt,p1->num);
    strcpy(p1->num,p2->num);
    strcpy(p2->num,numt);

    strcpy(namet,p1->name);
    strcpy(p1->name,p2->name);
    strcpy(p2->name,namet);

    matht=p1->math;
    p1->math=p2->math;
    p2->math=matht;

    englisht = p1->english;
    p1->english = p2->english;
    p2->english = englisht;

    generalt = p1->general;
    p1->general = p2->general;
    p2->general=generalt;
}

//功能八,通过总分信息排序
void main()      
{
    int i = 0;
    int j = 0;
    int k = 0;
    int m = 0;
    int p = 0;
    int hign = 0;
    for(m = 0;m < 100;m++)
    if(stu[m].num[0] == NULL)
    {
        hign = m-1;
        break;
    }
    printf("%d\n",hign);
    for(i = hign;i <= 0;i--)        //我感觉着部分好像没有执行啊!
        for(j = 0;j < i;j++)
            if(p = stu[j].general > stu[j+1].general)
            {
                printf("%d",p);
                exchange(stu,&stu[j],&stu[j+1]);        //冒泡排序
            }
    for(k = 0;k < 100;k++)
        if(stu[k].num[0] != NULL)
            printf("%s    %s    %d    %d    %d\n",stu[k].num,stu[k].name,stu[k].math,stu[k].english,stu[k].general);
}

2012-12-21 16:06
你不想去那儿
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:56
专家分:114
注 册:2012-9-21
收藏
得分:0 
一样没有排序啊!
2012-12-21 16:23
你不想去那儿
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:56
专家分:114
注 册:2012-9-21
收藏
得分:0 
就是根据general的大小进行排序
2012-12-21 16:24
你不想去那儿
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:56
专家分:114
注 册:2012-9-21
收藏
得分:0 
调试发现break直接跳到倒数第二行!!!
求指教1
2012-12-21 18:57
善ing
Rank: 2
来 自:华东师范
等 级:论坛游民
帖 子:34
专家分:19
注 册:2012-11-18
收藏
得分:0 
for(i = hign;i <= 0;i--) //我感觉着部分好像没有执行啊!
-----------------------------------------
这里你的i<=0
应改为i>=0.
另外,结构体变量可整体交换,不必想你那样交换成员.

邂逅c  (⊙o⊙)
2012-12-21 20:10
你不想去那儿
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:56
专家分:114
注 册:2012-9-21
收藏
得分:0 
如何整体交换?
我没有学过
2012-12-31 20:42
善ing
Rank: 2
来 自:华东师范
等 级:论坛游民
帖 子:34
专家分:19
注 册:2012-11-18
收藏
得分:0 
void exchange(STU stu[],struct Student *p1,struct Student *p2)
 //交换函数
{
    STU temp ; //临时结构体变量。
    temp = *p1 ;
    *p1 = *p2 ;
    *p2 = temp ;
}
如果结构体里有指针就别这么做了,比如链表,后果你试试就知道了。

邂逅c  (⊙o⊙)
2012-12-31 21:05
快速回复:结构体成员排序问题
数据加载中...
 
   



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

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