题目
某班有5名同学,建立一个学生的数学课和英语课信息表,包括学号、姓名、数学课和英语课的成绩。
编写程序,计算每名同学的平均成绩和名次。
(注:一定一个结构体类型,可以用结构指针作为函数参数)
输入格式:
%ld %s %f %f
输出格式:
%-9ld%-10s%-10.1f%-5.1f\n
输出样式
202201 Tom 91.8 85.5
202202 Cat 96.5 87.6
输出样例
Number: Name: Score: Average: Rank:
202201 Tom 91.8 85.5 88.8 3
202202 Cat 96.5 87.6 92.1 1
代码实现
#include <stdio.h>
#include <math.h>
#include <string.h>
struct student {
long long number;
char name[64];
float english_score;
float math_score;
};
int main() {
struct student students[5] = {0};
float array[5] = {0.0};
int i = 0;
for (; i < 5; i++) {
struct student *s = &(students[i]);
int flag = scanf("%ld %s %f %f", &(s->number), s->name,
&(s->math_score), &(s->english_score));
if (flag <= 0) {
break;
}
}
float scores[5] = {0.0};
int ranks[5] = {1, 1, 1, 1, 1};
int j = 0;
int k = 0;
for (j=0; j<i; j++) {
struct student s = students[j];
float average = (s.english_score + s.math_score) / 2;
scores[j] = average;
}
for(j=0; j<i; j++) {
for(k=0; k<i; k++) {
if (scores[k] > scores[j]) {
ranks[j]++;
}
}
}
printf("Number: Name: Score: Average: Rank:\n")
for(j=0; j<i; j++) {
struct student s = students[j];
printf("%-91d%-10s%-5.1f%-5.1f\n", s.number, s.name, s.math_score,
s.english_score, scores[j], ranks[j]);
}
return 0;
}
测试结果
wens-MBP:~ wenzhou$ ./a
202201 Tom 91.8 85.5
202202 Cat 96.5 87.6
a
Number: Name: Score: Average: Rank:
202201 Tom 91.8 85.5 88.7 2
202202 Cat 96.5 87.6 92.1 1
wens-MBP:~ wenzhou$