[题解] P5742 【深基7.例11】评等级
本题考查结构体。
知识铺垫
用户可以优先阅读 结构体 相关知识点。
结构体可以帮助我们更好的对同种目的的数据进行合并表示。
例如:如果我们需要对成员的成绩进行分析,可以定义一个名为 student 的结构体。
使用结构体,应当先定义结构体类型,它的基本语法格式如下:
struct 结构体名称
{
成员类型1 成员名称1;
成员类型2 成员名称2;
...
成员类型n 成员名称n;
};
struct 是定义结构体的关键字,结构体名称用于标识这个新的数据类型,花括号内部包含了若干成员变量的声明。每个成员变量都有自己的类型和名称,它们之间用分号分隔。
下面展示本题对于成员的结构体命名:
struct students
{
int numb; // 表示 int 类型的 numb,题目中存储学生学号
int xueye, suzhi; // 表示 int 类型的 xueye,suzhi,题目中存储学生学业成绩和素质成绩
int zonghe; // 表示 int 类型的 zonghe,题目中存储学生综合成绩
}s[MAXN];
结构体是一种类型,而不是变量,不能赋值;定义了结构体类型后,还需要声明结构体变量才能使用。
声明结构体变量有两种方式:先定义类型再声明变量,或者在定义类型的同时声明变量。
// 方式 1:先定义类型,再声明变量
struct students s[MAXN]; //使用了已经定义的结构体类型 Student
// 方式 2:定义类型的同时声明变量
struct students
{
int numb; // 表示 int 类型的 numb,题目中存储学生学号
int xueye, suzhi; // 表示 int 类型的 xueye,suzhi,题目中存储学生学业成绩和素质成绩
int zonghe; // 表示 int 类型的 zonghe,题目中存储学生综合成绩
}s[MAXN];
题目分析
题目中要求我们使用结构体进行存储。所以可以设计一个名为 students 的结构体,同时分别命名了学号、学业成绩、素质拓展成绩、综合分数。
根据题目要求,按照 \(70\%\) 和 \(30\%\) 权重计算综合分数即可。
需要注意的是:本题存在精度误差问题,请将 a * 0.7 + b * 0.3 与 80 比较 转化为 a * 7 + b * 3 与 800 比较。
代码
// P5742 【深基7.例11】评等级
// code by:cq_irritater
// time:2025/06/26
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1010;
struct students
{
int numb;
int xueye, suzhi;
int zonghe;
}s[MAXN];
int n;
int main()
{
// freopen("code.in", "r", stdin);
scanf("%d", &n);
for (int i = 1; i <= n; i++)
{
scanf("%d %d %d", &s[i].numb, &s[i].xueye, &s[i].suzhi);
s[i].zonghe = s[i].xueye * 7 + s[i].suzhi * 3;
}
for (int i = 1; i <= n; i++)
{
if (s[i].xueye + s[i].suzhi > 140 && s[i].zonghe >= 800)
{
printf("Excellent\n");
}
else
{
printf("Not excellent\n");
}
}
return 0;
}

浙公网安备 33010602011771号