#include <stdio.h>
float BX[6];
float XX[4];
typedef struct _student
{
char name[20];
float bxS[6];
int xx1;
float xx1S;
int xx2;
float xx2S;
}student;
void bxtj(student *stu,int n)
{
for(int i=0;i<n;i++)
{
float sum = 0;
for(int j=0;j<6;j++)
sum += stu[i].bxS[j];
printf("学生 %s 的必修课总成绩为:%.1f\n",stu[i].name,sum);
}
}
void xxtj(student *stu,int n)
{
for(int i=0;i<n;i++)
{
printf("学生 %s 的选修课总成绩为:%.1f\n",stu[i].name,stu[i].xx1S + stu[i].xx2S);
}
}
void cjtj(student *stu,int n)
{
for(int i=0;i<n;i++)
{
float sum = 0;
for(int j=0;j<6;j++)
sum += stu[i].bxS[j];
printf("学生 %s 的总成绩为:%.1f\n",stu[i].name,sum+stu[i].xx1S + stu[i].xx2S);
}
}
void jjpm(student *stu,int n)
{
float qz[40] = {0};
for(int i=0;i<n;i++)
{
for(int j=0;j<6;j++)
qz[i] += stu[i].bxS[j] * BX[j];
for(int j=0;j<4;j++)
{
if(stu[i].xx1 == j+1)
qz[i] += stu[i].xx1S * XX[j];
if(stu[i].xx2 == j+1)
qz[i] += stu[i].xx2S * XX[j];
}
}
for(int i=0;i<n-1;i++)
{
for(int j=0;j<n-i-1;j++)
{
if(qz[j] < qz[j+1])
{
float t = qz[j];
qz[j] = qz[j+1];
qz[j+1] = t;
student s = stu[j];
stu[j] = stu[j+1];
stu[j+1] = s;
}
}
}
for(int i=0;i<n;i++)
printf("名次:%d,学生:%s,加权成绩:%.1f\n",i+1,stu[i].name,qz[i]);
}
int main()
{
student stu[40];
int n,i,j;
printf("请输入学生人数:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("请输入第%d个学生信息:\n",i+1);
printf("请输入学生姓名:");
scanf("%s",stu[i].name);
printf("请输入六门必修课成绩:");
for(j=0;j<6;j++)
scanf("%f",&stu[i].bxS[j]);
printf("请输入第一门选修课序号(1-4)和成绩:");
scanf("%d%f",&stu[i].xx1,&stu[i].xx1S);
printf("请输入第二门选修课序号(1-4)和成绩:");
scanf("%d%f",&stu[i].xx2,&stu[i].xx2S);
}
printf("请输入六门必修课的权值:");
for(i=0;i<6;i++)
scanf("%f",&BX[i]);
printf("请输入四门选修课的权值:");
for(i=0;i<4;i++)
scanf("%f",&XX[i]);
bxtj(stu,n);
xxtj(stu,n);
cjtj(stu,n);
//
jjpm(stu,n);
return 0;
}
如何设计,还是最终如何做?
ez