燕山大学C++实验报告

赠予燕大学弟学妹:

下面这些只是一种参考方法,并不是一定要这样写的。方法思想万卷不离其宗,只要掌握了知识点就都没问题的,下午答辩时候按照自己的理解回答老师的问题就可以了,不用紧张,只要知识点会无论怎样能表达出来就可以了。

PS:大一代码写的很烂,不喜勿喷 Thanks♪(・ω・)ノ

资源:实验报告.doc

给大家设置 0积分下载了,直接载下来参考就行啦:
https://download.csdn.net/download/weixin_45525272/18736257

另外:其他带积分资源 没积分不知道咋下的 可以参考这一篇文章:

https://yangyongli.blog.csdn.net/article/details/116832457

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

实验1 编程环境的熟悉及简单程序的编制

1.1 实验目的和要求
1.熟悉 VC++2010 编程环境,编制简单 C++程序并运行,熟悉 C++的编辑、 编译、 连接、运行、断点调试等过程。
2.掌握 C++数据类型,熟悉如何定义和使用常量和变量,以及对它们赋值的方法。
3.学会使用 C++的有关算术运算符及表达式,特别是自加(++)和自减(–)运算符 的使用。
4.分支和循环结构的使用
1.2 所占学时数
本实验安排 2 个实验课时。
1.3 实验任务

1.3.1 任务一

(1)题目名称
功能需求:运行时显示"Menu: A(dd) D(elete) S(ort) Q(uit), Select one:“提示
用户输入,A 表示增加,D 表示删除,S 表示排序,Q 表示退出,输入为 A、 D、S 时分别提示”
数据已经增加、删除、排序。"输入为 Q 时程序结束。
按照上述功能需求写两个程序,分别使用if分支语句和switch分支语句实现:
程序1要求:使用 if … else 语句进行判断,用 break、continue 控制程序流程。
程序2要求:使用 Switch 语句实现。

(2)构思过程(可用文字、流程图、UML图等方式表达)
在一个大的循环中可以无限次地输入、输出,将输入的内容去初始化一个新的字符,再对该字符进行对应操作:
程序1.用if进行分类,逐步套用
程序2.用case进行分类,逐步套用

(3)程序源码

程序1#include <iostream>
using namespace std;

int main()
{
   
   cout<<"提示用户输入,A 表示增加,D 表示删除,S 表示排序,Q 表示退出"<<endl;
   char C;
   for( ; ; )
   {
        cin>>C;
      if(C=='A')
	 {
       
		  cout<<"数据已经增加"<<endl;
		  continue;
	  }
	  else if(C=='D')
	 {
     
		 cout<<"数据已经删除"<<endl;
	     continue;
	}
	  else   if(C=='S')
	 {
       
		 cout<<"数据已经排序"<<endl; 
	     continue;
	}
	  else if(C=='Q')
		  break;
	  else
		  cout<<"请按提示输入!"<<endl;
   }
   return 0;
}
程序2#include<iostream>
using namespace std;

int main()
{
   
  cout<<"提示用户输入,A 表示增加,D 表示删除,S 表示排序,Q 表示退出"<<endl;
   char C=' '; 
   for(;;)
 {
      cin>>C;
	 switch(C)
   {
   
   case 'A':
	   cout<<"数据已经增加"<<endl;
	    break;
   case 'D':
	   cout<<"数据已经删除"<<endl;
	    break;
   case 'S':
	   cout<<"数据已经排序"<<endl;
	    break;
   case 'Q':
	    break;
   default:
	   cout<<"请按恪提示输入"<<endl;
   }
 }
   return 0;
}

(4)运行结果(截图)
程序1:

(5)心得体会
在循环语句中,break和continue的作用不同:break表示是终止整个循环体,而continue表示是终止这一次循环,进入下一个循环。

1.3.1 任务二

(1)题目名称
找出2~10000之内的所有完全数。所谓完全数,即其各因子之和正好等于本身的数。如
6=1+2+3,28=1+2+4+7+14,所以6,28都是完全数。

(2)构思过程(可用文字、流程图、UML图等方式表达)
使函数在规定范围内判断该数是否是完全数:在循环中使该数对从2开始到它自身进行取余运算,将整除的因子相加(除自身外)求和。If语句进行判断,若是和与自身相同,则返回值为1;反之,返回值为0.主函数中,输出返回值为1的完全数。

(3)程序源码

#include <iostream>
#include<cmath>
using namespace std;

int yinzi(int x)
{
   
	int sum = 1;
	if (x >= 2)
	{
   
		for (int i = 2; i < x; i++)
		{
   
			if (x%i == 0)
			{
   
				sum += i;
			}
			else
				continue;
		}
		if (sum == x)
			return 1;
		else
			return 0;
	}
}

int main()
{
   
	for (int i = 2; i <= 10000; i++)
	{
   
		int s = yinzi(i);
		if (s == 1)
		{
   
			cout << i << ends;
		}
		else
			continue;
	}
}

(4)运行结果(截图)

(5)心得体会
函数返回值可以借助计算机语言0和1简化操作

实验2 函数的应用

2.1 实验目的和要求
1.掌握函数声明、定义和调用的方法;
2.掌握函数递归调用的方法;
3.掌握重载函数的声明、定义和使用方法;
4.理解函数参数传递中传值与引用的区别
2.2 所占学时数
本实验安排 2 个实验课时。
2.3 实验任务

2.3.1 任务一

(1)题目名称
用递归方法编写函数 Fibonnacci(斐波那契)级数:
Fn=Fn-1 + Fn-2; F1=F2=1;
并求出第 26 项的值。

(2)构思过程(可用文字、流程图、UML图等方式表达)
利用递归思想构建一个函数表示斐波那契数列,在主程序里引用函数体直接得出数列第16项并输出。

(3)程序源码

#include<iostream>
#include<cmath>
using namespace std;

int fbnq(int n)
{
   
	if (n == 1 || n == 2)
		return 1;
	else
		return fbnq(n - 1) + fbnq(n - 2);
}

int main()
{
   
	cout << fbnq(26);
}

(4)运行结果(截图)

(5)心得体会
函数的构建需要确定函数类型及形参的数据类型,引用时同样也注意实参的数据类型是否与形参相同,以及返回值类型。

2.3.2 任务二

(1)题目名称
设计一函数,判断一整数是否为素数。并完成下列程序设计:
①编写求素数的函数,并用这个函数求 3-200 之间的所有素数
②在 4-200 之间,验证歌德巴赫猜想:任何一个充分大的偶数都可以表示为两个素数之和。输出 4=2+2 6=3+3 …… 200=3+197
注:素数又称质数,指在一个大于 1 的自然数中,除了 1 和此整数自身外,不能被其他自然数(不包括 0)整除的数

(2)构思过程(可用文字、流程图、UML图等方式表达)
先构造出一个判断素数的函数,在大循环中让该数依次去除以比它小的数,直至循环可以循环到该数前一个,输出。
验证哥德巴赫猜想时,任意偶数可以分成两素数的和,简化验证过程,我们可以直接验证每个偶数都可以分为3和另一个素数和(除4外)。

(3)程序源码

#include <iostream>
#include <string>
#include <sstream>
using namespace std;

int sushu(int x)
{
   
	if (x > 1)
	{
   
		for (int i = 2; i <= x; i++)
		{
   
			int r = x % i;
			if (r == 0)
			{
   
				break;
			}
			else
			{
   
				continue;
			}
			if (i = x - 1)
			{
   
				return 1;
			}
		}
	}
	else
		return 0;
}

string gdbh(int y)
{
   
	int i = 3;
	if (y == 4)
	{
   
		return "2+2";
	}
	else
	{
   
		int j = y - 3;
		int J = sushu(j);;
		stringstream j0;
		j0 << j;
		string j1 = j0.str();
		if (J = 1)
		{
   
			return j1 + "+3";
		}
		else
			return "错误";
	}
}

int main()
{
   
	for (int i = 3; i <= 200; i++)
	{
   
		int a = sushu(i);
		if (a == 1)
			cout << i << ends;
	}
	cout << endl;

	for (int i = 4; i <= 200; i = i + 2)
	{
   
		cout << i << "=" << gdbh(i) << ends;
	}
}

(4)运行结果(截图)

(5)心得体会
判断素数时可以借用break和continue来简化函数循环语句
预处理文件#include 中的stringstream和str()可以将int型转化为string型

2.3.3 任务三

(1)题目名称
①比较值传递和引用传递的相同点和不同点。
②调用被重载的函数时,通过什么来区分被调用的是哪一个函数?

(2)答:
① 1、相同点:都是用来初始化对象的
2、不同点:
传值是单向的,形参的改变不会影响到实参;
传址是双向的,形参可以改变实参,数据不安全。
② 重载函数名是相同的,但是函数的参数类型或者个数会不同,可以通过观察参数的类型和个数进行判断调用的函数。

实验3 类与对象、构造与析构函数

3.1 实验目的和要求
1.掌握类的定义和使用。
2.掌握类的定义和对象的声明。
3.掌握具有不同访问属性的成员的访问方式。
4.深入体会构造函数、复制构造函数、析构函数的执行机制。
5.使用的 VC++的 debug 调试功能观察程序流程,跟踪观察类的构造函数、析构函数、 成员函数的执行顺序。
3.2 所占学时数
本实验安排 4 个实验课时。
3.3 实验任务

3.3.1 任务一

(1)题目名称
设计一个用于人事管理的 People(人员)类。考虑到通用性,这里只抽象出所有类型人员都具有的属性:number(编号)、sex(性别)、birthday(出生日期)、id(身份 证号)等。
其中"出生日期"定义为一个"日期"类内嵌子对象。
用成员函数实现对人员信息 的录入和显示。
要求包括:构造函数和析构函数、拷贝构造函数、内联成员函数、带缺省形参值的成员函数 、聚集。

(2)构思过程(可用文字、流程图、UML图等方式表达)
定义Date类,利用类的构造函数声明输入和输出的两个操作函数对内嵌子对象birthday进行操作。
定义People类,初始化基础成员函数,利用公有成员函数进行People对象的输入。
在主函数中声明People类的对象进行输入,利用People类的复制构造函数进行输出。

(3)程序源码

#include<
为了方便,把代码放在Word里面了,每次上机实验的题目代码都在。 第一次: 对如下多项式编写类定义: + + +…+ 其中,n为多项式的次数。完成如下功能: (1) 可存储任意大的多项式(提示:可用动态数组实现)。 (2) 定义构造函数、析构函数、拷贝构造函数。 (3) 包含一个static成员存储定义的多项式的数量。 (4) 定义一个成员函数输出多项式。(可参照-x^4-6x^3+5格式输出) (5) 定义一个成员函数计算多项式的值。 (6) 写main函数测试类的功能。 (7) 采用多文件实现。 考虑:哪些成员函数可以声明为const. 第二次: (8) 重载“+”运算符,实现两个多项式相加。 (9) 重载“-”运算符,实现两个多项式相减。 (10) 重载“*”运算符,实现两个多项式相乘。 (11) 重载“=”运算符,实现两个多项式的赋值运算。 考虑:把其中某个运算符重载为友元函数。 第三次: C++的一般编译器都定义和封装了字符串功能,请模仿定义string类的实现,可以实现并支持如下功能: (1)string s = “吉林大学”; (2)string t = s; (3)string m; m = t; (4)m.legnth() 函数测量字符串的长度 (5)m.cat(string const &)连接字符串 第四次: 我公司为仪器生产企业,目前生产摄像机和行车记录仪两种产品,分别销售给用户。 摄像机包含摄像、图像质量设定、编码算法等属性。 将摄像机增加相应芯片(具有操作菜单、自动拍摄、车速传感器、源代码等功能)后,形成一个行车记录仪。 要求: 设计摄像机类,并请根据下列不同的功能要求,采用不同的继承方式,设计行车记录仪类,并添加测试代码,体验不同继承方式下的成员访问属性。(类设计时可根据需要自行添加数据成员和其他成员函数。) (1) 行车记录仪的芯片可以使用摄像机的摄像、图像质量设定功能。 行车记录仪用户可以操作行车记录仪的操作菜单和摄像机的摄像功能。 (2)行车记录仪的芯片可以使用摄像机的拍摄、图像质量设定功能。 行车记录仪用户仅仅可以操作行车记录仪的操作菜单。 (3) 行车记录仪的芯片可以使用摄像机的拍摄、图像质量设定功能。 行车记录仪用户仅仅可以操作行车记录仪的操作菜单 同时其他公司购买行车记录仪,因该公司也用于销售,不得泄露其全部内容 课后: (1)采用组合方式设计行车记录仪类,增加相应测试代码,体验继承和组合的关系。 (2)分别为继承和组合方式下为各类添加构造函数、析构函数,增加相应测试代码,体验对象的初始化和构造顺序。 (3)将摄像机类和行车记录仪类功能相近的函数(如拍摄、编码等功能函数)设为同名函数,增加相应测试代码,体验同名函数覆盖。 (4)为我公司建立一个多态的产品类层次结构,使用抽象类,测试时,创建一个基类指针的容器,通过基类指针调用虚函数,体验多态。
题目: 为某高校的学籍和成绩管理设计一系统。要求建立的数据有: (1)学生类,包含班级号、学号、姓名、专业等成员; (2)学生成绩类,包含班级号、学号,课程名,成绩等成员。 完成下列功能:首先输入学生数据及成绩数据,再根据提示分别实现查找功能。其中:  函数 Xslr 负责学生数据录入;  函数 Cjlr 负责成绩数据录入;  函数 Look1 负责根据姓名查找学生的基本信息和成绩信息;  函数 Look2 负责根据班级列出学生的基本信息;  函数 Dayin1 负责依据班级输出满足条件的学生的基本情况;  函数 Dayin2 负责输出某一同学的成绩单。   题目: 设计一个电子通信录。其中包括如下类: (1)通信地址类 addr。包含公有数据:  成员 char post[10]; //邮编  成员 char ad[40]; //家庭地址  构造函数 addr(char p[10]="",char a[40]="");  成员函数 void setadd(addr a); //用 a 为当前对象赋值 (2)出生年月类 birth。包含公有数据:  成员 int year; //年份  成员 int month; //月份  成员 int day; //日期  构造函数 birth(int y=0,int m=0,int d=0);  成员函数 void setbir(birth b); //用 b 为当前对象赋值 (3)类 friends。包含数据:  私有成员 int number; //序号  私有成员 char name[20]; //姓名  私有成员 char sex; //性别  私有成员 char telephone[13]; //联系电话  公有成员 birth bir; //出生年月  公有成员 addr add; //通信地址  公有构造函数 friends(int nu=0,char n[20]=" ",char s=' ',int y=0,int m=0,int d=0,char p[10]=" ",char a[40]=" ",char t[13]=" ");  公有成员函数 void setfri(int nu,char n[20],char s,birth b,addr a,char t[13]); //为 当前对象赋值  公有成员函数 friends input(friends &bb); //为对象 bb 输出数据  公有成员函数 int search(friends aa[100],char n[20]); //在 aa 中查找姓名为 n 的对象  公有成员函数 void show(friends aa); //输出对象 aa  公有成员函数 void delet(friends aa[100],int k); //在 aa 中删除下标为 k 的元素 (4)在主函数中完成主菜单的设计,并根据输入值完成所需操作。  
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

呆萌宝儿姐

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

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

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

打赏作者

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

抵扣说明:

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

余额充值