题目

编写程序,创建一个包含 3 名学生记录的结构体数组(字段包含姓名 name 与分数 score);遍历该数组计算全班平均分,并找出所有分数达到及格线(≥ 60)的学生姓名。

输入格式:无需外部输入。

输出格式:输出全班平均分及及格学生名单。

数据范围与约定:结构体数组操作。

思路与算法

1. 结构体数组概念
每一个下标元素都是具有相同字段模式的独立结构体,例如 students(1), students(2)。

2. 逗号分隔列表(Comma-Separated List)
核心技巧:[students.score] 会自动将结构体数组所有元素的 score 字段解包并拼接成一个一维数值向量!利用此语法无需循环即可求平均:mean([students.score])。

3. 高维数据组织
科研实验管理多批次测量参数时,结构体数组是极其标准的数据容器。

完整程序

% Octave / MATLAB 第77题:结构体数组与成绩筛选
% 初始化结构体数组
students(1).name = "Alice";
students(1).score = 88;

students(2).name = "Bob";
students(2).score = 52;

students(3).name = "Charlie";
students(3).score = 95;

% 1. 解包所有成绩为向量,计算班级平均分
all_scores = [students.score];
avg_score = mean(all_scores);

fprintf("班级总人数: %d\n", length(students));
fprintf("所有成绩向量: %s\n", mat2str(all_scores));
fprintf("全班平均分: %.2f\n", avg_score);

% 2. 筛选及格学生
fprintf("\n及格名单 (score >= 60):\n");
for k = 1:length(students)
    if students(k).score >= 60
        fprintf("  学生: %-8s | 分数: %d\n", students(k).name, students(k).score);
    end
end

运行示例

输出:

班级总人数: 3
所有成绩向量: [88 52 95]
全班平均分: 78.33

及格名单 (score >= 60):
  学生: Alice    | 分数: 88
  学生: Charlie  | 分数: 95