C++/PTA 计算全班学生C++课程的总成绩和平均成绩

简介: 定义一个类Student,记录学生C++课程的成绩。要求使用静态数据成员或静态成员函数计算全班学生C++课程的总成绩和平均成绩。

题目要求

定义一个类Student,记录学生C++课程的成绩。要求使用静态数据成员或静态成员函数计算全班学生C++课程的总成绩和平均成绩。


输入格式:

输入5个不超过100的正整数,作为C++成绩。


输出格式:

在第一行中输出成绩的和,第二行输出平均成绩。


输入样例:

90 80 70 60 50


输出样例:

350

70


method 1

#include<bits/stdc++.h>
using namespace std;
class Student{
    protected:
    int studentscore;
    static int sum;
    static double avg;
    public:
    Student(){};
    Student(int a):studentscore(a){
        sum+=a;
        avg=sum/5;
    };
    void disp(){
        cout<<sum<<endl;
        cout<<avg;
    }
};
int Student::sum=0;
double Student::avg=0;
int main(){
    int score;
    Student *p;
    int count=0;
    for(int i=0;i<5;i++){
        cin>>score;
        p=new Student(score);
    }
    p->disp();
    //system("pause");
    return 0;
}



在 Student 类中,使用了关键字 static 声明了两个静态成员变量 sum 和 avg。


在 Student 类的构造函数中,当每次创建一个新的 Student 对象时,将该对象的分数值累加到 sum 变量中,从而统计所有学生的总分。然后通过更新 avg 变量,计算出平均分数。


在 main() 函数中,创建了指向 Student 对象的指针 p,并在 for 循环中动态地创建了 5 个 Student 对象。由于 sum 和 avg 是静态成员变量,因此它们的值可以被所有 Student 对象共享和访问,所以每次创建一个新对象时,都会更新它们的值。


最后,通过指针 p 调用 disp() 函数,输出所有学生的总分和平均分。


method 2

//未使用静态数据成员,但仍能编译通过
#include <iostream>
using namespace std;
class Student {
private:
    int Score[5];
public:
    Student(int score[]) {
        for (int i = 0; i < 5; i++) {
            Score[i] = score[i];
        }   
    }
    void sum() {
        int Sum = 0;
        for (int i = 0; i < 5; i++) {
            Sum += Score[i];
        }       
        cout << Sum << endl;
    }
    void average() {
        double Average = 0.0;
        int Sum = 0; // 新增一个变量保存成绩总和
        for (int i = 0; i < 5; i++) {
            Sum += Score[i];
        }       
        Average = static_cast<double>(Sum) / 5; // 将 Sum 转换为 double 类型进行除法运算
        //计算平均值之前使用 static_cast<double> 强制将其转换为 double 类型,避免计算结果丢失精度
        cout << Average << endl;
    }
};
int main() {
    int b[5];
    for (int j = 0; j < 5; j++) {
        cin >> b[j];    
    }
    Student S(b);   
    S.sum();
    S.average();
    return 0;
}



定义 Student 类,该类具有两个成员函数 sum() 和 average(),分别用于计算5名学生的总分和平均分。


在 main() 函数中,首先定义一个包含5个元素的整型数组 b,用来存储5门课程的分数数据。然后将 b 数组作为实参传递给 Student 类的构造函数,创建一个名为 S 的 Student 对象。


定义Student 类的构造函数中,将传入的 score 数组赋值到 Score 数组中,从而完成了学生对象的初始化。


sum() 函数使用 for 循环遍历 Score 数组,将其中每个元素累加到 Sum 变量中,最终输出累加结果。average() 函数也通过 for 循环遍历 Score 数组,将其中每个元素累加到 Sum 变量中,然后将 Sum 转换为 double 类型进行除法运算,计算出5位学生的平均分,并输出结果。


总结

本文使用两种方法计算全班学生C++课程的总成绩和平均成绩。

我是秋说,我们下次见。

目录
相关文章
|
3月前
|
C++
C++ 根据程序运行的时间和cpu频率来计算在另外的cpu上运行所花的时间
C++ 根据程序运行的时间和cpu频率来计算在另外的cpu上运行所花的时间
44 0
|
5月前
|
安全 编译器 C++
C++一分钟之-编译时计算:constexpr与模板元编程
【6月更文挑战第28天】在C++中,`constexpr`和模板元编程用于编译时计算,提升性能和类型安全。`constexpr`指示编译器在编译时计算函数或对象,而模板元编程通过模板生成类型依赖代码。常见问题包括误解constexpr函数限制和模板递归深度。解决策略包括理解规则、编写清晰代码、测试验证和适度使用。通过实战示例展示了如何使用`constexpr`计算阶乘和模板元编程计算平方。
92 13
|
3月前
|
存储 C++
【C++】C++ 基于QT实现散列表学生管理系统(源码+数据+课程论文)【独一无二】
【C++】C++ 基于QT实现散列表学生管理系统(源码+数据+课程论文)【独一无二】
【C++】C++ 基于QT实现散列表学生管理系统(源码+数据+课程论文)【独一无二】
|
3月前
|
存储 算法 C++
【C++】C++ QT实现Huffman编码器与解码器(源码+课程论文+文件)【独一无二】
【C++】C++ QT实现Huffman编码器与解码器(源码+课程论文+文件)【独一无二】
|
3月前
|
C++
C++ PCL 计算多个RT矩阵变换后的变换矩阵
C++ PCL 计算多个RT矩阵变换后的变换矩阵
48 0
|
3月前
|
C++
C++代码来计算一个点围绕另一个点旋转45度后的坐标
C++代码来计算一个点围绕另一个点旋转45度后的坐标
80 0
|
4月前
|
机器学习/深度学习 算法 C++
C++多态崩溃问题之为什么在计算梯度下降时需要除以批次大小(batch size)
C++多态崩溃问题之为什么在计算梯度下降时需要除以批次大小(batch size)
|
4月前
|
C++ 开发者
C++一分钟之-编译时计算:constexpr与模板元编程
【7月更文挑战第2天】C++的`constexpr`和模板元编程(TMP)实现了编译时计算,增强代码效率。`constexpr`用于声明编译时常量表达式,适用于数组大小等。模板元编程则利用模板进行复杂计算。常见问题包括编译时间过长、可读性差。避免方法包括限制TMP使用,保持代码清晰。结合两者可以解决复杂问题,但需明确各自适用场景。正确使用能提升代码性能,但需平衡复杂性和编译成本。
130 3
|
5月前
|
算法 C++
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题-2
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题
|
5月前
|
算法 C++
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题-1
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题