| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5912 人关注过本帖
标题:c语言结构体数组的排序问题?
取消只看楼主 加入收藏
liuzime
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2006-4-28
收藏
 问题点数:0 回复次数:4 
c语言结构体数组的排序问题?

输入学生成绩按平均分排名。我平均分求出来了。
但是对结构体数组的排序一直没搞懂。
#include<stdio.h>
#include<string.h>
struct liebiao
{
int hao;
char name[20];
float fen1;
float fen2;
float fen3;
float pingjun;
}data[50],*p=data;
int pingjun();
void paiming();
main(void)
{
int j;
j=pingjun(p);
paiming(data[50]);

}
int pingjun(struct liebiao *q)
{
int i,j=0;
char panduan;
for(i=0;i<50;i++,q++,j++)
{
printf("输入学号:");
scanf("%d",&q->hao);
printf("输入姓名:");
fflush(stdin);
gets(q->name);
printf("输入第1科成绩:");
scanf("%f",&q->fen1);
printf("输入第2科成绩:");
scanf("%f",&q->fen2);
printf("输入第3科成绩:");
scanf("%f",&q->fen3);
q->pingjun=(q->fen1+q->fen2+q->fen3)/3;
printf("是否要继续?<y or n>");
fflush(stdin);
scanf("%c",&panduan);
if(panduan=='n')
{
printf("排序前的学员信息如下:\n");
printf("学号\t姓名\t平均成绩\n");
for (i=0;i<=j;i++)
printf("%d\t%s\t%0.2f\n",data[i].hao,data[i].name,data[i].pingjun);
return j;
break;
}
}
}//从这开始是排名。我头都大了。我写的一定不对了。
请高手帮我改改。
void paiming(struct liebiao (*q1)[50])
{
int n,u,i;
struct liebiao temp,*q2;
printf("排名后的学员信息如下:\n");
for(n=0;n<=y;n++,q1++)
{
for (u=1;u<=y;u++,q2++)
{
if (data[n].pingjun<data[u].pingjun)
temp=q1->data;
q1->data=q2->data;
q2->data=temp;
}
}
for (i=0;i<5;i++)
printf("%d\t%s\t%0.2f\n",data[i].hao,data[i].name,data[i].pingjun);
}
还有个问题我感觉结构体不能在子函数中转换呢。

搜索更多相关主题的帖子: c语言 结构体 
2006-05-06 10:22
liuzime
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2006-4-28
收藏
得分:0 

谢谢楼上的回答。
我不是不想整理。是进行不下去了。
因为我不知道怎么进行函数体的整体
转换。
temp=q1->data;我的疑问就这在。
因为我跟本就不知道怎么写。
我只要知道怎么在子函数中怎么进行
函数体整体的负值转换。其他的我自己解决。
因为我还要做插入和删除。不能整体
转换哪可就太费劲了。
我是初学而且数据结构这是自学的。找了好多资料
了都没有关于这方面的。
有不足的地方请见谅。

break; /*这语句有啥用?能执行到这里吗?
这句确实没用。我的失误。

2006-05-06 12:21
liuzime
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2006-4-28
收藏
得分:0 

#include<stdio.h>
#include<string.h>
struct liebiao
{
int hao;
char name[20];
float fen1;
float fen2;
float fen3;
float pingjun;
}data[50],*p=data;
int pingjun();
void paiming();
main(void)
{
int j;
j=pingjun(p);
paiming(data[50],j);

}
int pingjun(struct liebiao *q)
{
int i,j=0;
char panduan;
for(i=0;i<50;i++,q++,j++)
{
printf("输入学号:");
scanf("%d",&q->hao);
printf("输入姓名:");
fflush(stdin);
gets(q->name);
printf("输入第1科成绩:");
scanf("%f",&q->fen1);
printf("输入第2科成绩:");
scanf("%f",&q->fen2);
printf("输入第3科成绩:");
scanf("%f",&q->fen3);
q->pingjun=(q->fen1+q->fen2+q->fen3)/3;
printf("是否要继续?<y or n>");
fflush(stdin);
scanf("%c",&panduan);
if(panduan=='n')
{
printf("排序前的学员信息如下:\n");
printf("学号\t姓名\t平均成绩\n");
for (i=0;i<=j;i++)
printf("%d\t%s\t%0.2f\n",data[i].hao,data[i].name,data[i].pingjun);
return j;
}
}
}
void paiming(struct liebiao data1[50],int y)
{
int n,u,i;
struct liebiao temp;
printf("排名后的学员信息如下:\n");
for(n=0;n<y;n++)
{
for (u=1;u<y;u++)
{
if (data1[n].pingjun<data1[u].pingjun)
temp=data1[n];
data1[n]=data1[u];
data1[u]=temp;
}
}
for (i=0;i<=y;i++)
printf("%d\t%s\t%0.2f\n",data1[i].hao,data1[i].name,data1[i].pingjun);
}
这么写好像跟本不对啊。这是我能写出的东西了。

2006-05-06 12:36
liuzime
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2006-4-28
收藏
得分:0 

谢谢。指针啊指针。一看到就晕了。
temp=*(p+i);这样就负值了。
*是地址运算符。这样就能取值了。
明白了。

2006-05-06 13:08
liuzime
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2006-4-28
收藏
得分:0 
谢谢提醒我会努力的。
不过的我英文要从头来。
2006-05-06 14:28
快速回复:c语言结构体数组的排序问题?
数据加载中...
 
   



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

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