《面向对象程序设计及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;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++编程的理解,还提升了我的问题解决能力和编程技巧。我相信这些经验和知识将对我未来的学习和工作产生积极的影响。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/6922.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux —— 信号初识

Linux —— 信号初识 什么是信号测试几个信号signal函数函数原型参数说明返回值注意事项示例 后台程序前台转后台检测输入中断向量表 我们今天来继续学习Linux的内容&#xff0c;今天我们要了解的是Linux操作系统中的信号&#xff1a; 什么是信号 信号是操作系统内核与进程之…

判断dll/lib是32/64位、查看lib是导入库/静态库的方法 、查看dll包含的符合、lib包含的函数

一、判断dll/lib是32/64位 原文链接&#xff1a;https://www.cnblogs.com/bandaoyu/p/16752602.html 1. 简便方法&#xff1a; 直接用记事本或者notepad(或txt文本)打开exe文件&#xff08;dll文件&#xff09;&#xff0c;会有很多乱码&#xff0c;不要头疼&#xff0c;接下…

Vitis HLS 学习笔记--Schedule Viewer 调度查看器

目录 1. 简介 2. Schedule Viewer详解 2.1 视图说明 2.1.1 Operation\Control Step 2.1.2 周期关系图 2.1.3 Schedule Viewer 菜单栏 2.1.4 属性视图 2.2 内容说明 2.2.1 实参&#xff08;b&#xff09;解释 2.2.2 实参&#xff08;a&#xff09;解释 2.2.3 变量&am…

Windows如何安装hadoop

Hadoop是一个开源的分布式计算平台&#xff0c;旨在处理大规模数据的存储和处理。它提供了分布式文件系统&#xff08;HDFS&#xff09;和分布式计算框架&#xff08;MapReduce&#xff09;&#xff0c;使得用户能够在大规模集群上存储和处理数据。Hadoop最初由Apache软件基金会…

cmake进阶:定义函数的使用方法

一. 简介 前面已经将 cmake 中常用的命令 command、变量 variable 都给大家进行了详细介绍&#xff0c;通过前面的学习&#xff0c;相信大家已经掌握了 cmake 工具的基本使用方法&#xff1b; 接下来我们再进一步学习 cmake&#xff0c;本文开始学习 cmake中定义函数。 二. …

TypeScript学习日志-第十九天(namespace命名空间)

namespace命名空间 一、基本用法 namespace 所有的变量以及方法必须要导出才能访问&#xff0c;如图&#xff1a; 二、 嵌套 namespace 可以进行嵌套使用&#xff0c;如图&#xff1a; 它也必须需要导出才能访问 三、合并 当我们出现两个同名的 namespace 它就会合并这两…

EFDC模型安装及建模方法;在排污口论证、水质模拟、地表水环评、地表水水源地划分、水环境容量计算等领域中的应用

目录 专题一 EFDC软件安装 专题二 EFDC模型讲解 专题三 一维河流模拟实操 专题四 建模前处理 专题五 EFDC网格剖分介绍 专题六 EFDC二维湖库水动力模拟/非保守染色剂模拟 专题七 EFDC水质模型参数及原理介绍 专题八 EFDC一、二、三维湖库水质模拟 专题九 基于EFDC的地…

nodejs的ws+vue3编写聊天室的demo

nodejs编写ws服务是非常简单高效的&#xff0c;nodejs有众多的实现ws的库&#xff0c;如ws,SocketIO等&#xff0c;nodejs的事件线程是单线程的&#xff0c;所以不要在事件线程内做阻塞性的操作&#xff0c;耗时的操作交给工作线程或者子进程操作。 我使用nodejsvue3实现了写了…

408数据结构-二叉树的遍历 自学知识点整理

前置知识&#xff1a;二叉树的概念、性质与存储结构 二叉树的遍历 二叉树的遍历是指按某条搜索路径访问树中每个结点&#xff0c;使得每个结点均被访问一次&#xff0c;而且仅被访问一次。 二叉树的递归特性: ①要么是棵空二叉树&#xff1b; ②要么就是由“根节点左子树右子树…

【NOI】C++程序结构入门之分支结构二

文章目录 前言一、逻辑运算符1.导入2.逻辑与&#xff08;&&&#xff09;3.逻辑或&#xff08;||&#xff09;4.逻辑非&#xff08;!&#xff09; 二、例题讲解问题&#xff1a;1656. 是两位的偶数吗问题&#xff1a;1658. 游乐设施问题&#xff1a;1659. 是否含有数字5…

AI绘画:Stable Diffusion 拒绝一眼塑料味的AI质感,超写实人物图片如何制作?简单几步教会你!

今天给大家介绍一款能够对生成的人像进行皮肤调节的 lora。 上面两幅图片的生成参数一样&#xff0c;尺寸也一样&#xff0c;但右边一幅图片相较于左面图片的画面质感&#xff0c;特别是人像皮肤的质感上有很大的提升&#xff0c;看上去更加细腻有层感。 这就是我们今天要介绍…

linux下的调试工具gdb的详细使用介绍

在之前学习中我们使用的通常是集各种功能于一体的编译器&#xff0c;例如VS stdio&#xff0c;但是一个程序在编辑后还要进行编译&#xff0c;然后才能产生一个二进制的可执行文件&#xff0c;编辑和翻译工作都可以使用不同的软件进行&#xff0c;例如记事本就是一款编辑软件&a…

03.配置监控一台服务器主机

配置监控一台服务器主机 安装zabbix-agent rpm -ivh https://mirror.tuna.tsinghua.edu.cn/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-agent-4.0.11-1.el7.x86_64.rpm配置zabbix-agent,配置的IP地址是zabbix-server的地址&#xff0c;因为要监控这台主机 vim /etc/zabbix/zab…

免费开源线上线下交友社交圈子系统 小程序+APP+H5 可支持二开!

为什么要玩社交软件&#xff1a;互联网社交软件的独特优势 首先&#xff0c;社交软件为我们提供了一个便捷的沟通方式。在传统的交往方式中&#xff0c;人们需要面对面交流&#xff0c;这种方式在时间和空间上都受到限制。而社交软件打破了这些限制&#xff0c;无论我们身处何地…

既能自动仿写公众号爆文,还能批量帮你上架闲鱼商品,打造自己的数字员工,简直yyds

「想象一下&#xff0c;如果有一个机器人在你的计算机上24小时不间断地工作&#xff0c;会不会做梦都笑着」 一、RPA机器人是什么&#xff1f; RPA——机器人流程自动化&#xff0c;它可以帮助人们完成重复性的、繁琐的工作&#xff0c;比如数据输入、网页爬取、自动化流程等…

llama3 史上最强开源大模型,赶超GTP-4,逼宫OpenAI

2024年4月18日&#xff0c;Meta公司推出了开源大语言模型Llama系列的最新产品—Llama 3&#xff0c;包含了80亿参数的Llama 3 8B和700亿参数的Llama 3 70B两个版本。Meta称其为“迄今为止最强的开源大模型”。 怪兽级性能 LLaMA3 提供了不同参数规模的版本&#xff0c;以适应…

你真的知道Show Master Status吗?

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 你真的知道Show Master Status吗&#xff1f; 前言输出字段展示file详解Position详解Binlog_Do_DBBinlog_Ignore_DBExecuted_Gtid_Set 前言 在数据库的世界里&#xff0c;每一个字段都像是一个谜团&a…

微服务---gateway网关

目录 gateway作用 gateway使用 添加依赖 配置yml文件 自定义过滤器 nacos上的gateway的配置文件 我们现在知道了通过nacos注册服务&#xff0c;通过feign实现服务间接口的调用&#xff0c;那对于不同权限的用户访问同一个接口&#xff0c;我们怎么知道他是否具有访问的权…

Verilog中求两个数的差值

根据输入信号a,b的大小关系&#xff0c;求解两个数的差值&#xff1a;输入信号a,b为8bit位宽的无符号数。如果a>b&#xff0c;则输出a-b&#xff0c;如果a≤b&#xff0c;则输出b-a。 接口信号图如下&#xff1a; 代码如下&#xff1a; &#xff08;CSDN代码块不支持Veril…

WPF之绑定属性值转换

1&#xff0c;使用Binding.Format属性简易设置绑定的属性数据显示格式。 <TextBox Grid.Row"2" Grid.Column"1"><TextBox.Text><Binding Path"UnitCost" StringFormat"{}{0:C3}" > …