05级《C语言程序设计》实验报告题目
已知N个学生的学号和4门功课的成绩,计算:
(1)每个学生的总分、平均分和每门课程的平均分。
(2)按总分从大到小排序,同时调整学号、4门功课成绩和平均分;输出经排序后全部学生的成绩单。
(3)任意输入一个学生的学号,输出该学生的成绩单。
注:每一小题用一个函数完成。
哪里有错,希望会的人指出错误.
#include"stdio.h"
#include"conio.h"
#define LEN sizeof(struct student)
typedef struct student
{
long number;
float sc[4];
struct student *next;
};
student *head=NULL;
int count=0;/*全局变量,节点个数,即学生人数*/
struct student *create();
void f1(int x);
void f2(int y);
void f3(int z);
void main()
{
clrscr();
creat();/*创建链表*/
f1();/*满足要求1的函数*/
f2();/*满足要求2的函数*/
f3();/*满足要求3的函数*/
}
struct student *create()
{
struct student *head=NULL,*new,*tail;
new=tail=(struct student *)malloc(LEN);
print("please input the data:\n");
scanf("%ld%f%f%f%f",&new->number,&new->sc[0],&new->sc[1],&new->sc[2],&new->sc[3],);
while(new->number)
{count++;
if(count==1) head=new;
else tail->next=new;
tail=new;
new=(struct student *)malloc(LEN);
scanf("%ld%f%f%f%f",&new->number,&new->sc[0],&new->sc[1],&new->sc[2],&new->sc[3],);
}
tail->next=NULL;
return head;
}
void f1()
{
student *p=head;
float num0=num1=num2=num3=0;
while(p!=NULL)
{
num0+=p->sc[0];num1+=sc[1];num2+=sc[2];num3+=sc[3];
p=->next;
}
p=head;
while(p!=NULL)
{
printf("xuehao------zongfen--pingjunfen--ave1--ave2--ave3--ave4\n");
printf("%ld--%f----%f---%f---%f---%f---&f",p->number,p->sc[0]+p->sc[1]+p->sc[2]+p->sc[3],(p->sc[0]+p->sc[1]+p->sc[2]+p->sc[3])/4,num0/4,num1/4,num2/4,num3/4)
p=p->next;
}
printf("press any key to continue\n");
gatch();
}
void f2()
{
struct stu
{
long number;
float num;ave;sc[4];
}s[count];
student *p=head;
int i,j;
float k;
for(i=0;p!=NULL&&i<count;p=p->next,i++)
{
s[i]->number=p->number;s[i]->num=p->sc[0]+p->sc[1]+p->sc[2]+p->sc[3];s[i]->ave=(p->sc[0]+p->sc[1]+p->sc[2]+p->sc[3])/4;s[i]->sc[0]=p->sc[0];s[i]->sc[1]=->p->sc[1];s[i]->sc[2]=->p->sc[2];s[i]->sc[3]=->p->sc[3];
}
for(i=0;i<count-1;i++)
{
for(j=i+1;j<count;j++)
if(s[i]->num<s[j]->num)
{k=s[i]->num;s[i]->num=s[j]->num;s[j]->num=k;
k=s[i]->number;s[i]->number=s[j]->number;s[j]->number=k;
k=s[i]->ave;s[i]->ave=s[j]->ave;s[j]->ave=k;
k=s[i]->sc[0];s[i]->sc[0]=s[j]->sc[0];s[j]->sc[0]=k;
k=s[i]->sc[1];s[i]->sc[1]=s[j]->sc[1];s[j]->sc[1]=k;
k=s[i]->sc[2];s[i]->sc[2]=s[j]->sc[2];s[j]->sc[2]=k;
k=s[i]->sc[3];s[i]->sc[3]=s[j]->sc[3];s[j]->sc[3]=k;
}
printf("the data checked is:\n");
printf("%ld--%f----%f---%f---%f---%f---&f:\n")
for(i=0;i<count,i++)
printf("%ld--%f----%f---%f---%f---%f---&f\n",s[i]->number,s[i]->num,s[i]->ave,s[i]->sc[0],s[i]->sc[1],s[i]->sc[2],k=s[i]->sc[3]");
gatch();
}
void f3()
{
student *p=head;
int find=0;
long number;
do
{
clrscr();
printf(input the number of the student you want:\n);
scanf("%ld",&number);
for(;p!=NULL;p=p->next)
if(number==p->number)
{
printf("xuehao------zongfen--pingjunfen--sc1--sc2--sc3--sc4\n");
printf("%ld--%f----%f---%f---%f---%f---&f",p->number,p->sc[0]+p->sc[1]+p->sc[2]+p->sc[3],(p->sc[0]+p->sc[1]+p->sc[2]+p->sc[3])/4,p->sc[0],p->sc[1],p->sc[2],p->sc[3]);
}
printf("press the space key to continue,other keys to exit!")
}
while(gatch()==' ');
}