| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5903 人关注过本帖
标题:c语言结构体数组的排序问题?
只看楼主 加入收藏
liuzime
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2006-4-28
收藏
 问题点数:0 回复次数:7 
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
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 
以下是引用liuzime在2006-5-6 10:22:00的发言:

输入学生成绩按平均分排名。我平均分求出来了。
但是对结构体数组的排序一直没搞懂。
#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++)   /*y横空出世?*/
{

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);
}
还有个问题我感觉结构体不能在子函数中转换呢。

建议你先把你自己的代码好好整理一下,不要这样就发上来,看起来很累人!


对不礼貌的女生收钱......
2006-05-06 11:46
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
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分: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 counter=0;
int scan(struct liebiao *);
void range(struct liebiao *);
main()
{

printf("You have enter %d informations.\n",scan(p));
range(data);
getch();
}
int scan(struct liebiao *p)
{
char ch;
int i;
float a;float *q;
q=&a;

do{
printf("id:");
scanf("%d",&p->hao);
printf("name:");
fflush(stdin);
gets(p->name);
printf("the first subject marks:");
scanf("%f",&p->fen1);
printf("the second subject marks:");
scanf("%f",&p->fen2);
printf("the third subject marks:");
scanf("%f",&p->fen3);
p->pingjun=(p->fen1+p->fen2+p->fen3)/3;
counter++;
fflush(stdin);
printf("continue,y/n?");
ch=getchar();
if(ch=='n')
{
printf("information as follows:\n");
printf("id\tname\taver\n");
for (i=0;i<counter;i++)
printf("%d\t%s\t%0.2f\n",data[i].hao,data[i].name,data[i].pingjun);
return counter;
}
else p++;
}while(ch!='n');
}
void range(struct liebiao *p)
{
int i,j;
struct liebiao temp;
for(i=0;i<counter;i++)
for(j=i+1;j<counter;j++)
{
if((p+i)->pingjun>(p+j)->pingjun)
{
temp=*(p+i);
*(p+i)=*(p+j);
*(p+j)=temp;
}
}
printf("information as follows:\n");
for(i=0;i<counter;i++)
{
printf("%d\t%s\t%f\t%f\t%f\t%f\n",data[i].hao,data[i].name,data[i].fen1,data[i].fen2,data[i].fen3,data[i].pingjun);
}
}
通过测试了,晕死,
你自己要学着写!
你语法错误太多,我重新写的,你自己比较.


对不礼貌的女生收钱......
2006-05-06 12:38
liuzime
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2006-4-28
收藏
得分:0 

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

2006-05-06 13:08
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 
还有,提醒楼上的,要学好英语,不要用拼音代替变量,
不然以后找工作面试的时候不容易

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



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

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