(1)输入每个学生的学号、姓名和 3 门课成绩(学生数自己确定); (2)分别计算每个学生的总分,并输出; (3)分别计算每门课的平均分,并输出; (4)按每个学生的总分由高到低排出名次表,并输出; (5)按姓名查询学生的信息,并输出; (6)输出每个学生的信息,每个学生的信息占据一行。
参考如下:
#include <stdio.h>
struct student
{
int id; //学号
char name[30]; //姓名
float score[3]; //5门课成绩
float total; //总分
float ave; //平均分
};
//录入
void input(struct student stu[],int n)
{
int i,j;
for (i=0;i<n;i++)
{
printf("请输入学生%d的学号:",i+1);
scanf("%d",&stu[i].id);
getchar();
printf("请输入学生%d的姓名:",i+1);
scanf("%s",stu[i].name);
printf("请输入学生%d的3门课成绩:");
for(j=0;j<3;j++)
scanf("%f",&stu[i].score[j]);
}
}
//计算总分、平均分
void caculate(struct student stu[],int n)
{
int i,j;
for (i=0;i<n;i++)
{
stu[i].total = 0;
//总分
for(j=0;j<3;j++)
{
stu[i].total += stu[i].score[j];
}
//平均分
stu[i].ave = stu[i].total/3;
printf("学生%d的总分:%.1f,平均分:%.1f\n",i+1,stu[i].total,stu[i].ave);
}
}
//查询
void findbyid(struct student stu[],int n)
{
int id,i,j;
printf("请输入需要查找的学号:");
scanf("%d",&id);
for (i=0;i<n;i++)
{
if(stu[i].id == id)
{
printf("学号:%d\n",stu[i].id);
printf("姓名:%s\n",stu[i].name);
printf("成绩:");
for(j=0;j<3;j++)
printf("%.1f ",stu[i].score[j]);
printf("\n");
printf("总分:%.1f\n",stu[i].total);
printf("平均分:%.1f\n",stu[i].ave);
break;
}
}
if(i==n)
printf("未找到该学号的学生\n");
}
//根据学分排序
void sortbyxf(struct student stu[],int n)
{
int i,j;
struct student tt;
for (i=0;i<n-1;i++)
{
for (j=0;j<n-1-i;j++)
{
if(stu[j].total < stu[j+1].total)
{
tt = stu[j];
stu[j]=stu[j+1];
stu[j+1]=tt;
}
}
}
}
//显示
void show(struct student stu[],int n)
{
int id,i,j;
for (i=0;i<n;i++)
{
printf("学号:%d\n",stu[i].id);
printf("姓名:%s\n",stu[i].name);
printf("成绩:");
for(j=0;j<3;j++)
printf("%.1f ",stu[i].score[j]);
printf("\n");
printf("总分:%.1f\n",stu[i].total);
printf("平均分:%.1f\n",stu[i].ave);
}
}
int main()
{
struct student stu[100];
int nmb = 0;
printf("请输入学生人数:");
scanf("%d",&nmb);
//(1)
input(stu,nmb);
//(2)
caculate(stu,nmb);
//(4)
findbyid(stu,nmb);
//(5)
sortbyxf(stu,nmb);
//显示
show(stu,nmb);
return 0;
}
定义学生结构数组,循环输入学生成绩,并统计每个学生总分
#include <stdio.h>
typedef struct _student
{
char num[20];
char name[20];
float score[3];
float total;
}student;
void sorts(student *s,int n)
{
int i,j;
student temp;
for(i=0;i<n-1;i++)
for(j=0;j<n-i-1;j++)
{
if(s[j].total < s[j+1].total)
{
temp = s[j];
s[j] = s[j+1];
s[j+1] = temp;
}
}
}
void print(student *s,int n)
{
int i;
for(i=0;i<n;i++)
printf("%-20s%-20s%-10.1f%-10.1f%-10.1f\n",s[i].num,s[i].name,s[i].score[0],s[i].score[1],s[i].score[2]);
}
void query(student *s,int n,char *name)
{
int i;
for(i=0;i<n;i++)
{
if(strcmp(s[i].name,name) == 0)
{
printf("%-20s%-20s%-10.1f%-10.1f%-10.1f\n",s[i].num,s[i].name,s[i].score[0],s[i].score[1],s[i].score[2]);
break;
}
}
}
void calcavg(student *s,int n)
{
int i,j,sum=0;
for(i=0;i<3;i++)
{
sum = 0;
for(j=0;j<n;j++)
{
sum += s[j][i];
}
printf("第%d门课平均分:%.1f\n",i+1,sum/3.0);
}
}
int main()
{
student s[100];
int n,i;
char name[20];
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%s%s%f%f%f",s[i].num,s[i].name,&s[i].score[0],&s[i].score[1],&s[i].score[2]);
s[i].total = s[i].score[0] + s[i].score[1] + s[i].score[2];
}
printf("总分分别为:\n");
for(i=0;i<n;i++)
printf("%d\n",s[i].total);
calcavg(s,n);
sorts(s,n);
print(s,n);
scanf("%s",name);
query(s,n,name);
//
return 0;
}