某人需要对某班学生成绩进行处理,生成班级成绩单。假设班级人数为N(为了方便调试程序,N取5),学生的学号、姓名均不超过10个字符,输入每个学生的学号、姓名、4科成绩(例如:英语、数学、体育、计算机),计算每个学生的总分、平均分,然后按照总分由高到低排名,输出原始的成绩单和排名后的成绩单。利用一维、二维数组 c语言
#include <stdio.h>
#include <stdlib.h>
#define NUM 5 //5个学生,方便修改
typedef struct _Student
{
char id[11]; // 学号
char name[11]; // 姓名
float score[4]; // 4科成绩
float total; // 总分
float avg; // 平均分
}Student;
int main()
{
Student stu[NUM]; // 学生信息数组
int i, j;
// 输入学生信息和成绩
for (i = 0; i < NUM; i++)
{
printf("请输入第%d个学生的学号:",i+1);
scanf("%s",stu[i].id);
printf("请输入第%d个学生的姓名:",i+1);
scanf("%s",stu[i].name);
stu[i].total = 0;
for (j = 0; j < 4; j++)
{
printf("请输入第%d个学生的第%d门课成绩:",i+1,j+1);
scanf("%f", &stu[i].score[j]);
stu[i].total += stu[i].score[j];
}
stu[i].avg = stu[i].total/4;
}
printf("原始成绩单:\n");
printf("%12s%12s%10s%10s%10s%10s%10s%10s\n","学号","姓名","英语","数学","体育","计算机","总分","平均分");
for (i = 0; i < NUM; i++)
{
printf("%12s%12s", stu[i].id, stu[i].name);
for (j = 0; j < 4; j++)
{
printf("%10.1f", stu[i].score[j]);
}
printf("%10.1f%10.1f", stu[i].total, stu[i].avg);
}
for (i = 0; i < NUM - 1; i++)
{
for (j = 0; j < NUM - i - 1; j++)
{
if (stu[j].total < stu[j+1].total)
{
Student temp = stu[j];
stu[j] = stu[j+1];
stu[j+1] = temp;
}
}
}
printf("\n排序后成绩单:\n");
printf("%12s%12s%10s%10s%10s%10s%10s%10s\n","学号","姓名","英语","数学","体育","计算机","总分","平均分");
for (i = 0; i < NUM; i++)
{
printf("%12s%12s", stu[i].id, stu[i].name);
for (j = 0; j < 4; j++)
{
printf("%10.1f", stu[i].score[j]);
}
printf("%10.1f%10.1f", stu[i].total, stu[i].avg);
}
system("pause");
return 0;
}
#include <stdio.h>
#include <string.h>
#define N 5
#define M 4
struct Student {
char id[11]; // 学号
char name[11]; // 姓名
int score[M]; // 4科成绩
int sum; // 总分
float avg; // 平均分
int rank; // 排名
};
int main() {
struct Student students[N]; // 学生信息数组
int i, j;
// 输入学生信息和成绩
for (i = 0; i < N; i++) {
printf("请输入第%d个学生的学号、姓名和4科成绩,用空格分隔:", i+1);
scanf("%s%s", students[i].id, students[i].name);
for (j = 0; j < M; j++) {
scanf("%d", &students[i].score[j]);
}
}
// 计算每个学生的总分和平均分
for (i = 0; i < N; i++) {
students[i].sum = 0;
for (j = 0; j < M; j++) {
students[i].sum += students[i].score[j];
}
students[i].avg = (float)students[i].sum / M;
}
// 排名
for (i = 0; i < N; i++) {
students[i].rank = 1;
for (j = 0; j < N; j++) {
if (students[j].sum > students[i].sum) {
students[i].rank++;
}
}
}
// 输出原始成绩单
printf("\n原始成绩单:\n");
printf("学号\t姓名\t英语\t数学\t体育\t计算机\t总分\t平均分\n");
for (i = 0; i < N; i++) {
printf("%s\t%s\t", students[i].id, students[i].name);
for (j = 0; j < M; j++) {
printf("%d\t", students[i].score[j]);
}
printf("%d\t%.2f\n", students[i].sum, students[i].avg);
}
// 按总分排名
for (i = 0; i < N-1; i++) {
for (j = i+1; j < N; j++) {
if (students[i].sum < students[j].sum) {
struct Student temp = students[i];
students[i] = students[j];
students[j] = temp;
}
}
}
// 输出排名后成绩单
printf("\n排名后成绩单:\n");
printf("排名\t学号\t姓名\t总分\t平均分\n");
for (i = 0; i < N; i++) {
printf("%d\t%s\t%s\t%d\t%.2f\n", students[i].rank, students[i].id, students[i].name, students[i].sum, students[i].avg);
}
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 5 // 班级人数
// 定义结构体 Student,用于存储每个学生的信息
struct Student {
char id[11]; // 学号
char name[11]; // 姓名
int scores[4]; // 成绩,包括英语、数学、体育、计算机
int total_score; // 总分
float avg_score; // 平均分
int rank; // 排名
};
int main() {
struct Student students[N]; // 定义一个学生结构体数组,存储班级学生信息
// 通过循环依次读入学生信息
for (int i = 0; i < N; i++) {
printf("请输入第%d个学生的信息(学号、姓名、英语成绩、数学成绩、体育成绩、计算机成绩):\n", i+1);
scanf("%s%s%d%d%d%d", students[i].id, students[i].name, &students[i].scores[0], &students[i].scores[1], &students[i].scores[2], &students[i].scores[3]);
// 计算学生总分和平均分
students[i].total_score = students[i].scores[0] + students[i].scores[1] + students[i].scores[2] + students[i].scores[3];
students[i].avg_score = (float)students[i].total_score / 4;
}
// 对学生按照总分由高到低进行排序
for (int i = 0; i < N - 1; i++) {
for (int j = 0; j < N - i - 1; j++) {
if (students[j].total_score < students[j+1].total_score) {
struct Student temp = students[j];
students[j] = students[j+1];
students[j+1] = temp;
}
}
}
// 给每个学生排名,并输出原始成绩单
printf("\n原始成绩单:\n");
printf("%-10s%-10s%-10s%-10s%-10s%-10s%-10s\n", "学号", "姓名", "英语成绩", "数学成绩", "体育成绩", "计算机成绩", "总分");
for (int i = 0; i < N; i++) {
students[i].rank = i + 1;
printf("%-10s%-10s%-10d%-10d%-10d%-10d%-10d\n", students[i].id, students[i].name, students[i].scores[0], students[i].scores[1], students[i].scores[2], students[i].scores[3], students[i].total_score);
}
// 输出排名后的成绩单
printf("\n排名后的成绩单:\n");
printf("%-10s%-10s%-10s%-10s%-10s%-10s%-10s%-10s\n", "排名", "学号", "姓名", "英语成绩", "数学成绩", "体育成绩", "计算机成绩", "总分");
for (int i = 0; i < N; i++) {
printf("%-10d%-10s%-10s%-10d%-10d%-10d%-10d%-10d\n", students[i].rank, students[i].id, students[i].name, students[i].scores[0], students[i].scores[1], students[i].scores[2], students[i].scores[3], students[i].total_score);
}
return 0;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!