C语言1某班有5名同学,建立一个学生的简单信息表,包括学号、姓名、3门课程的成绩,编写程序,计算每名学生的平均成绩及名次。(30分) 题目内容: 某班有5名同学,建立一个学生的简单信息表,包括学号、

1某班有5名同学,建立一个学生的简单信息表,包括学号、姓名、3门课程的成绩,编写程序,计算每名学生的平均成绩及名次。(30分)
题目内容:

某班有5名同学,建立一个学生的简单信息表,包括学号、姓名、3门课程的成绩,编写程序,计算每名学生的平均成绩及名次。(注:定义一个结构体类型,用结构指针作为函数参数)

输入格式:

%ld %s %f %f %f

输出格式:

%-9ld%-10s%-5.1f%-5.1f%-8.1f%-10.1f%-d\n

输入样例:

201701 zhao 29.8 85.4 65.4
201702 qian 96.5 87.5 65.4
201703 sun 85.4 65.4 84.6
201704 li 63.4 95.4 86.3
201705 zhou 65.9 84.6 97.5

输出样例:

Number: Name: score: Average: rank:
201701 zhao 29.8 85.4 65.4 60.2 5
201702 qian 96.5 87.5 65.4 83.1 1
201703 sun 85.4 65.4 84.6 78.5 4
201704 li 63.4 95.4 86.3 81.7 3
201705 zhou 65.9 84.6 97.5 82.7 2
在这里插入图片描述

在这里插入图片描述
#include <stdio.h>
#include <string.h>

#define NUM_STUDENTS 5

struct Student {
long studentId;
char name[20];
float score1, score2, score3;
float average;
int rank;
};

void calculateAverage(struct Student *student) {
student->average = (student->score1 + student->score2 + student->score3) / 3.0;
}

void calculateRank(struct Student students[]) {
int i, j;
for (i = 0; i < NUM_STUDENTS; i++) {
students[i].rank = 1;
for (j = 0; j < NUM_STUDENTS; j++) {
if (students[j].average > students[i].average) {
students[i].rank++;
}
}
}
}

int main() {
struct Student students[NUM_STUDENTS];

for (int i = 0; i < NUM_STUDENTS; i++) {
    scanf("%ld %s %f %f %f", &students[i].studentId, students[i].name, &students[i].score1, &students[i].score2, &students[i].score3);
    calculateAverage(&students[i]);
}

calculateRank(students);

printf("Number:  Name:        score:       Average:  rank:\n");
for (int i = 0; i < NUM_STUDENTS; i++) {
    printf("%-9ld%-10s%-5.1f%-5.1f%-8.1f%-10.1f%-d\n",
           students[i].studentId, students[i].name, students[i].score1, students[i].score2, students[i].score3, students[i].average, students[i].rank);
}

return 0;

}

  • 12
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是使用C语言编写序,实现上述需求: ```c #include<stdio.h> #include<string.h> #define N 5 // 学生数量 struct Student { int id; // 学号 char name[20]; // 姓名 float score[3]; // 3课程成绩 float average; // 平均成绩 int rank; // 名次 }; void Input(struct Student *stu) { // 输入学生信息 int i, j; for(i = 0; i < N; i++) { printf("请输入第%d个学生学号:", i+1); scanf("%d", &(stu+i)->id); printf("请输入第%d个学生姓名:", i+1); scanf("%s", (stu+i)->name); printf("请输入第%d个学生的3课程成绩:", i+1); for(j = 0; j < 3; j++) { scanf("%f", &(stu+i)->score[j]); } } } void Calculate(struct Student *stu) { // 计算平均成绩名次 int i, j, cnt; float sum; for(i = 0; i < N; i++) { sum = 0.0; for(j = 0; j < 3; j++) { sum += (stu+i)->score[j]; } (stu+i)->average = sum / 3; } for(i = 0; i < N; i++) { cnt = 1; for(j = 0; j < N; j++) { if((stu+i)->average < (stu+j)->average) { cnt++; } } (stu+i)->rank = cnt; } } void Output(struct Student *stu) { // 输出学生信息 int i; printf("学号\t姓名\t成绩1\t成绩2\t成绩3\t平均\t名次\n"); for(i = 0; i < N; i++) { printf("%d\t%s\t%.1f\t%.1f\t%.1f\t%.1f\t%d\n", (stu+i)->id, (stu+i)->name, (stu+i)->score[0], (stu+i)->score[1], (stu+i)->score[2], (stu+i)->average, (stu+i)->rank); } } int main() { struct Student stu[N]; Input(stu); Calculate(stu); Output(stu); return 0; } ``` 序实现的基本思路是:先定义一个结构体类型 `Student`,包括学号姓名、3课程成绩平均成绩名次等字段;然后使用 `Input` 函数输入每个学生信息;接着使用 `Calculate` 函数计算每个学生平均成绩名次;最后使用 `Output` 函数输出所有学生信息。 在 `Calculate` 函数中,计算平均成绩时使用了一个循环嵌套,别对每个学生的3课程成绩进行累加求和,然后除以3即可得到平均成绩计算名次时也使用了一个循环嵌套,对于每个学生,都先将其名次初始化为1,然后再遍历所有学生,如果发现有其他学生平均成绩比当前学生高,就将当前学生名次加1。 希望我的回答能够帮助到你,如果你还有其他问题,可以继续提出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值