题目
编写程序,创建一个包含 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