学生平均分计算pta c++类实现
时间: 2025-03-17 09:19:27 浏览: 54
### PTA C++ 实现 学生平均分计算 类 示例代码 解题思路
#### 题目分析
根据引用描述,目标是设计一个程序来解决学生平均分的计算问题。具体来说,需要过滤掉不符合条件的输入数据并仅基于合法数据进行平均值计算。
合法数据的标准如下:
- 数据应在 [-1000, 1000] 范围内。
- 小数部分不得超过两位有效数字。
以下是具体的解题方法和示例代码:
---
#### 解决方案
为了完成此任务,可以按照以下逻辑编写代码:
1. **读取输入**:通过标准输入获取一组实数。
2. **验证合法性**:逐一检查每个数值是否满足合法性的定义。
3. **计算平均值**:累加所有合法数值,并除以合法数值的数量得出最终结果。
4. **输出结果**:如果没有任何合法数值,则应输出特殊提示(如 `Undefined` 或其他约定形式)。
---
#### 示例代码
```cpp
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
// 判断是否为合法数值
bool isValid(double num) {
if (num < -1000 || num > 1000) return false;
double intPart;
double fractional = fabs(modf(num, &intPart));
return fractional * 100 <= 1e-6 || fractional * 100 >= 99.99; // 精确到小数点后两位
}
int main() {
vector<double> numbers;
double input;
cout << "请输入一系列实数(按Ctrl+D结束输入):" << endl;
while (cin >> input) { // 循环接收输入直到EOF
numbers.push_back(input);
}
double sum = 0;
int count = 0;
for (double num : numbers) {
if (isValid(num)) { // 如果当前数值合法
sum += num;
++count;
}
}
if (count == 0) {
cout << "No valid data to calculate average." << endl;
} else {
printf("%.2lf\n", sum / count); // 输出保留两位小数的结果
}
return 0;
}
```
---
#### 关键点说明
1. **合法性判断函数**
使用 `modf()` 函数分离整数部分和小数部分[^1]。对于小数部分,确保其精度不超过两位有效数字。
2. **边界情况处理**
当没有合法数据时,需特别处理输出内容,避免出现错误或异常行为。
3. **浮点数比较注意事项**
浮点运算可能存在误差,因此在比较小数部分时引入了一个极小量阈值 \(1 \times 10^{-6}\) 来规避潜在问题。
---
####
阅读全文
相关推荐


















