《面向对象程序设计及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;elsereturn 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;elsecout << "点A、B、C无法构成三角形" << endl;return 0;
}
运行结果
三、实验过程描述
首先,我在C++评分程序中定义了一个数组来存储多个学生的信息。这个数组可以容纳足够的学生对象,以便于处理多个学生的数据。
接下来,我使用循环结构,例如for循环或while循环,来迭代输入每个学生的信息。我通过提示用户输入学生的姓名、分数等相关信息,并将其存储到数组中对应的学生对象中。
在输入每个学生的信息时,我使用适当的输入验证和错误处理机制,以确保输入的数据符合预期并能够正确处理异常情况。
在输入完所有学生的信息后,我使用适当的算法和逻辑来计算每个学生的总评成绩。这可能涉及对学生的不同分数进行加权计算或其他评分规则的应用。
计算完成后,我使用循环结构遍历数组中的每个学生对象,逐个输出每个学生的信息和总评成绩。这可以通过在控制台打印或写入文件等方式来实现。
最后,我进行了实验结果的检查和验证,确保输出的学生信息和评分结果是准确无误的。如果发现任何问题或错误,我会返回到相应的步骤进行调整和修正。
四、遇到的问题和解决方法
问题:如何在C++评分程序中添加多个学生的信息并进行计算和输出?
解决方法:使用数组或者其他数据结构来存储多个学生对象。首先定义一个数组,然后使用循环迭代输入每个学生的信息,并计算每个学生的总评成绩。最后,通过遍历数组,输出每个学生的信息。
五、实验心得体会
在进行这个实验的过程中,我遇到了添加多个学生信息并进行计算和输出的问题。通过使用数组来存储学生对象,我成功地解决了这个问题。通过循环迭代输入每个学生的信息,并计算每个学生的总评成绩,我得到了准确的结果。最后,通过遍历数组,我能够方便地输出每个学生的信息,使整个评分程序更加完善和高效。
总的来说,通过这个实验,我学到了如何处理多个数据对象,并灵活运用数据结构来解决实际问题。这次实验不仅加深了我对C++编程的理解,还提升了我的问题解决能力和编程技巧。我相信这些经验和知识将对我未来的学习和工作产生积极的影响。