发布网友 发布时间:2024-10-23 16:57
共1个回答
热心网友 时间:9分钟前
/*
* 有30个学生,每个学生的数据包括学号、姓名、数学,英语,计算机3门课成绩和总分。
* 要求编写C程序,完成以下任务:
* 1. 从键盘输入30个学生的数据信息,计算每个学生3门课的总成绩,并按总分的高低依次输出每个学生的学号、姓名,3门课成绩及总分。
* 2. 统计各课最高分和最低分,并输出对应学生的数据信息
* 3. 统计各课及格和不及格的人数,输出对应学生的数据信息。
*/
#include<stdio.h>
#define N 30
struct STUDENT
{
char num[6];
char name[20];
float score[3];
float sum;
};
struct STUDENT stu[N];
void print_student(struct STUDENT user)
{
printf("学号:%s\t姓名:%s\t数学:%3.2f\t英语:%3.2f\t计算机:%3.2f\t总分:%3.2f\n",
user.num,
user.name,
user.score[0],
user.score[1],
user.score[2],
user.sum
);
}
int main()
{
int i, j, temp, k;
char* score[3] = {"数学", "英语", "计算机"};
int sort[N];
int ss[3][N];
for(i=0; i<N; i++)
{
printf("输入学生信息[%d]:\n",i+1);
printf("学号:");
scanf("%s",stu[i].num);
printf("姓名:");
scanf("%s",stu[i].name);
for(k=0; k<3; k++)
{
printf("%s成绩:", score[k]);
scanf("%f",&stu[i].score[k]);
}
stu[i].sum = stu[i].score[0] + stu[i].score[1] + stu[i].score[2];
sort[i] = i;
}
/* 1.按总分排序 */
for(i=0; i<N-1; i++)
{
for(j=0; j<N-i-1; j++)
{
if (stu[sort[j]].sum < stu[sort[j+1]].sum)
{
temp = sort[j];
sort[j] = sort[j+1];
sort[j+1] = temp;
}
}
}
for(i=0; i<N; i++)
{
print_student(stu[sort[i]]);
}
/* 2.按各科分排序 */
for(k=0; k<3; k++)
{
for(i=0; i<N; i++)
{
for(j=0; j<N-i-1; j++)
{
if (stu[sort[j]].score[k] < stu[sort[j+1]].score[k])
{
temp = sort[j];
sort[j] = sort[j+1];
sort[j+1] = temp;
}
}
}
/* 统计每科数据 */
for(i=0; i<N; i++)
{
ss[k][i] = sort[i];
}
printf("%s最高分学生:\n", score[k]);
print_student(stu[sort[0]]);
printf("%s最低分学生:\n", score[k]);
print_student(stu[sort[N-1]]);
}
/* 3. 统计各课及格和不及格的人数,输出对应学生的数据信息。 */
for(k=0; k<3; k++)
{
j = 0;
for(i=0; i<N; i++)
{
if(stu[ss[k][i]].score[k] >= 60)
{
j++;
}
}
printf("%s及格学生人数(%d):\n", score[k], j);
for(i=0; i<j; i++)
{
print_student(stu[ss[k][i]]);
}
printf("%s不及格学生人数(%d):\n", score[k], N-j);
for(i=j; i<N; i++)
{
print_student(stu[ss[k][i]]);
}
}
return 0;
}
这样就可以了