C语言制作成绩单

1)定义一个结构体数据,存放10个学生的学号、姓名、三门课程的成绩;2)从键盘输入10个学生的以上内容;3)输出单门课程成绩最高的学生的学号、姓名以及该门课程的成绩;4)输出三门课程的平均分数最高的学生的学号、姓名及其平均分;5)将10个学生按照平均分数从高到底进行排序,输出结果,

第1个回答  2013-08-01
#include <stdio.h>struct stud
{
int num;
char name[20];
float score1, score2, score3, aver;
}; int main(void)
{
int high;
int i, j;
struct stud myClass[10], *pStu = myClass;
struct stud temp; printf("Please input students info:Num Name score1 score2 score3\n");
for (i = 0; i < 10; i++)
{
printf("%d:", i + 1);
scanf("%d %s %f %f %f", &myClass[i].num, &myClass[i].name, &myClass[i].score1,
&myClass[i].score2, &myClass[i].score3);
myClass[i].aver = (myClass[i].score1 + myClass[i].score2 + myClass[i].score3) / 3;
} high = 0;
for (i = 0; i < 10; i++)
{
if (myClass[i].aver > myClass[high].aver)
{
high = i;
}
} printf("\nThe Highest is %s(%d)\nscore1=%.2f score2=%.2f score3=%.2f aver=%.2f\n",
myClass[high].name, myClass[high].num,
myClass[high].score1, myClass[high].score2, myClass[high].score3, myClass[high].aver); for (i = 0; i < 9; i++)
{
for (j = i + 1; j < 10; j++)
{
if ((pStu + j)->aver > (pStu + i)->aver)
{
temp = *(pStu + j);
*(pStu + j) = *(pStu + i);
*(pStu + i) = temp;
}
}
} printf("\nResult of sort:\n");
printf("Num Name score1 score2 score3 average\n");
for (i=0; i<10; i++)
{
printf("%-5d %-20s %-8.2f %-8.2f %-8.2f %-.2f\n", (pStu+i)->num, (pStu+i)->name,
(pStu+i)->score1, (pStu+i)->score2, (pStu+i)->score3, (pStu+i)->aver);
}
return 0;
}
第2个回答  2013-08-01
/*
刚一个雏形 程序还需为完善 printf("Please enter a Student ID:");
输入 “-1” 是推出循环程序输出结果让后结束
*/
#include<stdio.h>
struct Class
{
char *Name; //姓名
int Sid; //学生的id 学号
int Mscore; //数学分数
int Lscore; //语文
int Escore; //英语
int Ascorer;
int Tscorer;
struct Class *node;
};
typedef struct Class Students; //班级学生这各类
typedef Students *Ps;
Ps TcraseClsSt(Ps lina); // 催的操作Ps CraseClsSt(Ps lina,char *Name,int Sid,int Mscore,int Lscore,int Escore,int Ascorer,int Tscorer); //存过程Ps Scre(Ps lina); //排序过程void OutSmary(Ps lina); //输出结果 void main()
{
Ps lina=NULL;
lina=TcraseClsSt(lina);
if(lina!=NULL) //如果lina为NULL是错误内存非配失败
{
lina=Scre(lina);
OutSmary(lina);
}
else
printf("Error");
getch();
} Ps TcraseClsSt(Ps lina)
{
int Cmd=0;
char Name[100];
int Sid;
int Mscore;
int Lscore;
int Escore;
int Ascorer;
int Tscorer;
do
{
printf("Please enter a Student ID:");
scanf("%d",&Sid);
Cmd=Sid;
if(Cmd!=-1)
{
printf("Please enter a name:");
scanf("%s",Name);
printf("Please enter the math scores:");
scanf("%d",&Mscore);
printf("Please enter the language scores:");
scanf("%d",&Lscore);
printf("Please enter the English scores:");
scanf("%d",&Escore);
Tscorer=Mscore+Lscore+Escore;
Ascorer=Tscorer/3;
lina=CraseClsSt(lina,Name,Sid,Mscore,Lscore,Escore,Tscorer,Ascorer);
} } while(Cmd!=-1&&lina!=NULL);
return lina;
} Ps CraseClsSt(Ps lina,char *Name,int Sid,int Mscore,int Lscore,int Escore,int Tscorer,int Ascorer)
{
Ps merory;
Ps linb;
merory=(Ps)malloc(sizeof(Students));
if(!merory)
{
return NULL; //merory为NULL是返回零 NULL
}
merory->node=NULL;
strcpy(merory->Name,Name); //用字符创拷贝函数 段错午 在turbo c 编译器 gcc换别的用法
merory->Sid=Sid;
merory->Mscore=Mscore;
merory->Lscore=Lscore;
merory->Escore=Escore;
merory->Tscorer=Tscorer;
merory->Ascorer=Ascorer;
if(lina==NULL)
return merory; linb=lina; while(linb->node!=NULL)
linb=linb->node; linb->node=merory;
return lina;
}void strex(int *a,int *b)
{
int tem;
tem=*a;
*a=*b;
*b=tem;
}
Ps Scre(Ps lina)
{
Ps linb;
Ps linc;
Ps tem;
char Name[100];
int Sid;
int Mscore;
int Lscore;
int Escore;
int Ascorer;
int Tscorer;
linb=lina;
while(linb!=NULL)
{
linc=linb->node;
while(linc!=NULL)
{
if(linc->Ascorer>linb->Ascorer)
{
strcpy(Name,linc->Name);
strcpy(linc->Name,linb->Name);
strcpy(linb->Name,Name);
strex(&(linc->Sid),&(linb->Sid));
strex(&(linc->Mscore),&(linb->Mscore));
strex(&(linc->Lscore),&(linb->Lscore));
strex(&(linc->Escore),&(linb->Escore));
strex(&(linc->Ascorer),&(linb->Ascorer));
strex(&(linc->Tscorer),&(linb->Tscorer));
}
linc=linc->node;
}
linb=linb->node;
}
return lina;
}
void OutSmary(Ps lina)
{
while(lina!=NULL)
{
printf("Name:%s,StudentID:(%d),Total:(%d),Average:(%d)\n",
lina->Name,lina->Sid,lina->Tscorer,lina->Ascorer);
lina=lina->node;
}
}