1、东北大学软件学院实验报告第 1 页 共 17 页C+程序设计实验报告课程名称: C+程序实践 姓名: 李思怡实验名称: C+程序设计实验一 三 学号: 20112350实验编号: 专业: 信息安全任课教师: 陈东明 班级: 软信 1101指导教师: 组号:实验日期: 2012 年 4 月 14 日实验时间: 8 时 00 分11 时 30 分实验成绩:批阅教师签字:东北大学软件学院实验报告第 2 页 共 17 页一、实验目的1.实验一:C+程序设计基础(1)学习编写简单的 C+程序,并掌握 C+程序的基本格式与规范。(2)理解 C程序结构的特点。(3)掌握函数的定义和调用方法。(4)练习重载函
2、数的使用。(5)练习函数模板的使用。(6)练习使用系统函数。(7)学习使用 VC +的 debug 调试功能,使用 step into 追踪到函数内部。2.实验二:类与对象(1)学习类与对象的定义。(2)掌握类与对象的使用方法。(3)学习类和对象的声明。(4)学习具有不同属性的数据成员与成员函数的访问方式。(5)理解构造函数和析构函数的定义与执行过程。(6)学会类的聚集使用方法。3.实验三:数组、指针与字符串(1)学习使用数组。(2)学习字符串数据的组织和处理。(3)学习标准 C+库的使用。(4)掌握指针的使用方法。(5)练习通过动态内存分配实现动态数组,并体会指针在其中的作用。(6)分别使用
3、字符数组和标准 C+库练习处理字符串的方法。二、实验内容与实验步骤lab1_1:float Convert(float TempFer)float C;float F=TempFer;C=(F-32)*5/9;return C;lab1_2:int maxl(int a);long maxl(long a);float maxl(float a);double maxl(double a);lab1_3template T maxl(T a,T b)return ab?a:b;东北大学软件学院实验报告第 3 页 共 17 页template T maxl(T a,T b,T c)return
4、(ab?a:b)c?(ab?a:b):c;lab1_5int fib(int n);lab2_1enum CPU_RankP1=1,P2,P3,P4,P5,P6,P7;class CPUprivate:CPU_Rank rank;int frequency;float voltage;public:void run(CPU_Rank p,int f,float v) rank=p;frequency=f;voltage=v;cout改写为#include 就可以正常运行了。(2)在实验 lab1_3 中,利用函数模板求最大值时总是出错,请教同学之后了解到,原来在每一次使用函数模板之前,都要声明
5、一下 template 。(3)在实验 lab3_3 中,编译时没有出现错误,但在运行时,出现以下状况:经过检查之后,发现在定义数组的时候应该初始化。如:char a20=0;就不会出现乱码的问题了。(4)在实验 lab3_5 中,用.h 头文件时出现错误:经过尝试和上网搜索后,发现由于是自定义的.h 文件,应把“#include ”改为“#include “employee.h“”。五、实验结果总结lab1_1温度转换lab1_2东北大学软件学院实验报告第 6 页 共 17 页重载函数计算绝对值lab1_3重载函数找最大值lab1_4计算 A 的 B 次幂lab1_5求 Fibbnacci
6、第 N 个数lab2_1lab2_2lab2_3东北大学软件学院实验报告第 7 页 共 17 页lab3_1矩阵转置lab3_2矩阵转置lab3_3连接两个字符串lab3_4连接两个字符串lab3_5东北大学软件学院实验报告第 8 页 共 17 页存储信息并修改姓名lab3_6输出信息六、思考题实验一:C+程序设计基础1. Visual C+ 6.0 环境下是如何管理项目和文件的?首先要有一工作空间。(果你不建的话,直接建工程,工作空间名默认就是项目名)工作空间里可以有多个工程。但只有有一个是活动的(可以通过右击项目名,选择 set active project,将其设为活动的) 工程里有几个
7、文件夹:source files 源文件header files 头文件resource file资源文件可以新建自己想要的文件,后将其选进对应的文件夹中(右键对应的文件夹,单击“ 选择文件到目录”)可以单独编译一个源文件,或者 build 整个工程(直接单击 build 的话是 build 活动的那个工程)2. C+提供的输入输出操作与 C 语言的输入输出操作的异同点?C+用 cin 和 cout,而 C 语言用 scanf 和 printf 表示输入输出操作。3. C+引入的内联函数与其它函数有何不同?内联函数的编译是一个调用的过程。 内联函数好,可以避免不必要的错误,比如由于运算符优先级
8、引起的错误。内联函数有错误检查功能。如:参数类型等。东北大学软件学院实验报告第 9 页 共 17 页4. 重载函数时通过什么来区分?所谓方法重载就是一组重名方法具有不同的方法特征的机制。所以使用方法重载,是因为这组方法的功能相同,但在形参上有所差异,如果编写一大堆方法,完成相同的功能,会导致程序员使用这些方法比较困难,因为记住这么多方法名是一件比较头疼的事。根据方法重载的定义,区分重载方法的依据在于这些方法具有不同的方法特征。所谓方法特征是指方法的参数的数量、顺序和类型。不同的方法特征指参数的数量、顺序和类型至少有一个不相同实验二:类与对象1. 类和结构体的区别是什么?在 C+来说区别甚微,s
9、tructure 默认访问权限为 public,class 默认访问权限为 private。2. 类的成员函数与普通的函数有何区别?调用成员函数,实际上是隐式的把类的“this 指针”当作第一个参数传递给成员函数,而调用普通函数和友元函数则不会。 这就是调用本质上的区别。3. 构造函数和析构函数的作用是什么?构造函数是一种特殊的方法,主要用来在创建对象时初始化对象,即为对象成员变量赋初始值,总与 new运算符一起使用在创建对象的语句中,特别的一个类可以有多个构造函数,可根据其参数个数的不同或参数类型的不同来区分它们,即构造函数的重载。析构函数(destructor) 与构造函数相反,当对象脱离
10、其作用域时(例如对象所在的函数已调用完毕),系统自动执行析构函数。析构函数往往用来做“清理善后” 的工作(例如在建立对象时用 new 开辟了一片内存空间,应在退出前在析构函数中用 delete 释放)。4. 类的访问控制权限有何意义?如果以上信息有一样不正确,那么域控制器就会拒绝这个用户从这台电脑登录。不能登录,用户就不能访问服务器上有权限保护的资源,他只能以对等网用户的方式。5. 什么是封装?类是如何进行封装的?封装就是将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。封装的目的是增强安全性和简化
11、编程,使用者不必了解具体的实现细节,而只是要通过 外部接口,一特定的访问权限来使用类的成员。实验三:数组、指针与字符串1. new 和 delete 操作符与 C 语言中的 malloc()和 free()函数有何异同点?同:它们都可用于申请动态内存和释放内存。异:首先,malloc,free 是 C 的函数,new,delete 是 C+的运算符;此外,new 是强制类型的,malloc 不是,需要类型转换;new 可以调用构造函数在声明的时候初始化,malloc 只是分配空间,需要在其他地方初始化;而且 malloc 需要指定分配空间大小, 而 new 是自动计算的;delete 不仅会释
12、放空间,在释放前会调用析构函数。2. 对象数组和其它类型的数据数组有何异同点?对象数组的定义、使用与一般类型的数组相同,只是数组元素类型不同,对象数组的每一个对象都是同类的对象。3. 对象数组的析构顺序是什么?析构顺序与构造函数调用的顺序相反。4. 字符串和指针有何关系?字符指针可以指向字符串,并可以用字符串常量对字符进行初始化。七、参考文献+程序设计教程 钱能 著 清华大学出版社出版东北大学软件学院实验报告第 10 页 共 17 页八、附录关键代码:lab1_1float Convert(float TempFer)float C;float F=TempFer;C=(F-32)*5/9;r
13、eturn C;lab1_2template /*重载函数求绝对值*/int maxl(int);long maxl(long);float maxl(float);double maxl(double);int maxl(int a)int b;if(aT maxl(T a,T b)return ab?a:b;template T maxl(T a,T b,T c)return (ab?a:b)c?(ab?a:b):c;lab1_5int fib(int n)int a;if(nnum;coutsex;coutid;coutyear1month1day1;birthday.set(year1
14、,month1,day1);void PEOPLE:print()cout /不是 string.husing namespace std;东北大学软件学院实验报告第 16 页 共 17 页int main()string a,b;coutab;coutcn;strcpy(name,cn);#include “employee.h“lab3_6void Employee:set(char n20,char a80,char c20,char m10)coutn;strcpy(name,n);couta;strcpy(address,a);东北大学软件学院实验报告第 17 页 共 17 页coutc;strcpy(city,c);coutm;strcpy(mail,m);void main()Employee emp5;int i;char n20=0,a80=0,c20=0,m10=0;for(i=0;i5;i+) /循环输入cout“Please input the information of “i+1“ person:“endl;empi.set(n,a,c,m);for(i=0;i5;i+) /循环输出cout“The “i+1“ person:“endl;empi.display();