《面向对象程序设计及C++》实验报告

《面向对象程序设计及C++》实验报告

一、实验目的与实验要求

(1)掌握类的定义、类中成员函数的定义和使用、构造函数和析构函数的定义、功能;掌握对象的使用方法。

(2)掌握静态数据成员、静态成员函数的功能和使用方法。

(3)学会定义友元函数、使用友元函数访问私有数据。

二、实验内容

1、为一门课写一个评分程序,评分原则如下:

总评成绩为百分制,其中平时成绩占总评成绩的30%,期中考试成绩占总评成绩的10%,期末考试成绩占总评成绩的60%。

设计一个类,记录学生的姓名、各次成绩、总评成绩,学生信息由键盘录入。计算总评成绩,输出某个同学的全部信息。

源代码:

#include <iostream>
#include <string>

using namespace std;

class Student {
private:
    string name;
    double dailyScore;
    double midtermScore;
    double finalScore;
    double totalScore;

public:
    void inputInfo() {
        cout << "请输入学生姓名:";
        cin >> name;
        cout << "请输入平时成绩:";
        cin >> dailyScore;
        cout << "请输入期中考试成绩:";
        cin >> midtermScore;
        cout << "请输入期末考试成绩:";
        cin >> finalScore;
    }

    void calculateTotalScore() {
        totalScore = dailyScore * 0.3 + midtermScore * 0.1 + finalScore * 0.6;
    }

    void displayInfo() {
        cout << "学生姓名:" << name << endl;
        cout << "平时成绩:" << dailyScore << endl;
        cout << "期中考试成绩:" << midtermScore << endl;
        cout << "期末考试成绩:" << finalScore << endl;
        cout << "总评成绩:" << totalScore << endl;
    }
};

int main() {
    Student student;
    student.inputInfo();
    student.calculateTotalScore();
    student.displayInfo();

    return 0;
}

运行结果

2、定义并实现坐标点类Point,成员如下:

数据成员:double x, y;

成员函数:

构造函数:Point(double a,double b);

拷贝构造函数:Point(const Point &p );

返回数据成员函数:double GetX();  double GetY();

友元函数:

double GetLength( Point &A, Point &B);//计算两点连线长度

普通函数:

bool  Pdsjx(Point A, Point B, Point C);//判断三点能够构成三角形

在main()中,首先定义线段的两个点,输出端点的位置,然后利用友元函数GetLength计算并输出线段的长度。然后定义第三个点,调用函数Pdsjx判断三个点能否构成三角形,并在主函数中输出结果。

源代码

#include <iostream>
#include <cmath>
using namespace std;
class Point {
private:
    double x;
    double y;
public:
    Point(double a, double b) : x(a), y(b) {}
    Point(const Point& p) : x(p.x), y(p.y) {}
    double GetX() {
        return x;
    }

    double GetY() {
        return y;
    }
    friend double GetLength(Point& A, Point& B);
    friend bool Pdsjx(Point A, Point B, Point C);
};
double GetLength(Point& A, Point& B) {
    double length = sqrt(pow(B.x - A.x, 2) + pow(B.y - A.y, 2));
    return length;
}
bool Pdsjx(Point A, Point B, Point C) {
    double a = GetLength(A, B);
    double b = GetLength(B, C);
    double c = GetLength(C, A);
    if (a + b > c && a + c > b && b + c > a)
        return true;
    else
        return false;
}
int main() {
    Point A(1.0, 2.0);
    Point B(3.0, 4.0);
    cout << "点A的位置:(" << A.GetX() << ", " << A.GetY() << ")" << endl;
    cout << "点B的位置:(" << B.GetX() << ", " << B.GetY() << ")" << endl;
    double length = GetLength(A, B);
    cout << "线段AB的长度:" << length << endl;
    Point C(5.0, 6.0);
    bool canFormTriangle = Pdsjx(A, B, C);
    if (canFormTriangle)
        cout << "点A、B、C可以构成三角形" << endl;
    else
        cout << "点A、B、C无法构成三角形" << endl;
    return 0;
}

运行结果

三、实验过程描述

首先,我在C++评分程序中定义了一个数组来存储多个学生的信息。这个数组可以容纳足够的学生对象,以便于处理多个学生的数据。

接下来,我使用循环结构,例如for循环或while循环,来迭代输入每个学生的信息。我通过提示用户输入学生的姓名、分数等相关信息,并将其存储到数组中对应的学生对象中。

在输入每个学生的信息时,我使用适当的输入验证和错误处理机制,以确保输入的数据符合预期并能够正确处理异常情况。

在输入完所有学生的信息后,我使用适当的算法和逻辑来计算每个学生的总评成绩。这可能涉及对学生的不同分数进行加权计算或其他评分规则的应用。

计算完成后,我使用循环结构遍历数组中的每个学生对象,逐个输出每个学生的信息和总评成绩。这可以通过在控制台打印或写入文件等方式来实现。

最后,我进行了实验结果的检查和验证,确保输出的学生信息和评分结果是准确无误的。如果发现任何问题或错误,我会返回到相应的步骤进行调整和修正。

四、遇到的问题和解决方法

问题:如何在C++评分程序中添加多个学生的信息并进行计算和输出?

解决方法:使用数组或者其他数据结构来存储多个学生对象。首先定义一个数组,然后使用循环迭代输入每个学生的信息,并计算每个学生的总评成绩。最后,通过遍历数组,输出每个学生的信息。

五、实验心得体会

在进行这个实验的过程中,我遇到了添加多个学生信息并进行计算和输出的问题。通过使用数组来存储学生对象,我成功地解决了这个问题。通过循环迭代输入每个学生的信息,并计算每个学生的总评成绩,我得到了准确的结果。最后,通过遍历数组,我能够方便地输出每个学生的信息,使整个评分程序更加完善和高效。

总的来说,通过这个实验,我学到了如何处理多个数据对象,并灵活运用数据结构来解决实际问题。这次实验不仅加深了我对C++编程的理解,还提升了我的问题解决能力和编程技巧。我相信这些经验和知识将对我未来的学习和工作产生积极的影响。

  • 12
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

高教百科

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值