输入学生成绩按平均分排名。我平均分求出来了。
但是对结构体数组的排序一直没搞懂。
#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);
}
还有个问题我感觉结构体不能在子函数中转换呢。
----------------解决方案--------------------------------------------------------
输入学生成绩按平均分排名。我平均分求出来了。
但是对结构体数组的排序一直没搞懂。
#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);
}
还有个问题我感觉结构体不能在子函数中转换呢。
建议你先把你自己的代码好好整理一下,不要这样就发上来,看起来很累人!
----------------解决方案--------------------------------------------------------
谢谢楼上的回答。
我不是不想整理。是进行不下去了。
因为我不知道怎么进行函数体的整体
转换。
temp=q1->data;我的疑问就这在。
因为我跟本就不知道怎么写。
我只要知道怎么在子函数中怎么进行
函数体整体的负值转换。其他的我自己解决。
因为我还要做插入和删除。不能整体
转换哪可就太费劲了。
我是初学而且数据结构这是自学的。找了好多资料
了都没有关于这方面的。
有不足的地方请见谅。
break; /*这语句有啥用?能执行到这里吗?
这句确实没用。我的失误。
----------------解决方案--------------------------------------------------------
#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);
}
这么写好像跟本不对啊。这是我能写出的东西了。
----------------解决方案--------------------------------------------------------
#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);
}
}
通过测试了,晕死,
你自己要学着写!
你语法错误太多,我重新写的,你自己比较.
----------------解决方案--------------------------------------------------------
谢谢。指针啊指针。一看到就晕了。
temp=*(p+i);这样就负值了。
*是地址运算符。这样就能取值了。
明白了。
----------------解决方案--------------------------------------------------------
还有,提醒楼上的,要学好英语,不要用拼音代替变量,
不然以后找工作面试的时候不容易
----------------解决方案--------------------------------------------------------
谢谢提醒我会努力的。
不过的我英文要从头来。
----------------解决方案--------------------------------------------------------