利用c语言用结构体数组录取学生信息:学号,名字,各科成绩,平均分,最低和最高分
时间: 2023-08-15 22:40:48 浏览: 153
可以使用如下的C语言代码来实现:
#include <stdio.h>
#include <string.h>
#define NUM_STUDENTS 3
#define NUM_SUBJECTS 3
struct student {
int id;
char name[20];
int scores[NUM_SUBJECTS];
float average;
int min_score;
int max_score;
};
int main()
{
struct student students[NUM_STUDENTS];
//录入学生信息
for (int i = 0; i < NUM_STUDENTS; i++) {
printf("请输入第%d个学生的学号:", i + 1);
scanf("%d", &students[i].id);
printf("请输入第%d个学生的名字:", i + 1);
scanf("%s", students[i].name);
printf("请输入第%d个学生的各科成绩:\n", i + 1);
for (int j = 0; j < NUM_SUBJECTS; j++) {
printf("第%d门课成绩:", j + 1);
scanf("%d", &students[i].scores[j]);
}
}
//计算每个学生的平均分、最低分和最高分
for (int i = 0; i < NUM_STUDENTS; i++) {
//计算平均分
float total_score = 0;
for (int j = 0; j < NUM_SUBJECTS; j++) {
total_score += students[i].scores[j];
}
students[i].average = total_score / NUM_SUBJECTS;
//计算最低分和最高分
students[i].min_score = students[i].scores[0];
students[i].max_score = students[i].scores[0];
for (int j = 1; j < NUM_SUBJECTS; j++) {
if (students[i].scores[j] < students[i].min_score) {
students[i].min_score = students[i].scores[j];
}
if (students[i].scores[j] > students[i].max_score) {
students[i].max_score = students[i].scores[j];
}
}
}
//输出学生信息
printf("\n学生信息如下:\n");
printf("学号\t姓名\t成绩1\t成绩2\t成绩3\t平均分\t最低分\t最高分\n");
for (int i = 0; i < NUM_STUDENTS; i++) {
printf("%d\t%s\t", students[i].id, students[i].name);
for (int j = 0; j < NUM_SUBJECTS; j++) {
printf("%d\t", students[i].scores[j]);
}
printf("%.2f\t%d\t%d\n", students[i].average, students[i].min_score, students[i].max_score);
}
return 0;
}
该程序使用了一个名为student
的结构体来存储每个学生的信息,其中包括了学号、名字、各科成绩、平均分、最低分和最高分。程序首先定义了一个students
数组来存储每个学生的信息,然后通过循环逐一录入学生信息、计算每个学生的平均分、最低分和最高分,并最终输出所有学生的信息。
需要注意的是,在输入学生名字时,使用了scanf("%s", students[i].name)
来读入字符串,这里没有使用&
符号,是因为name
是一个字符数组,它本身就代表了字符数组的首地址,无需再取地址。同时,在输出学生信息时,使用了printf("%.2f", students[i].average)
来指定输出的浮点数保留两位小数。
相关推荐















