C++实验报告

2024-05-23

C++实验报告(精选8篇)

C++实验报告 第1篇

姓名:XX 学院:XXX 班级:XXX 学号:XXX

i++;

} while(i<=10);cout<<“sum=”<

#include using namespace std;void main(){ int i(1),sum(0);

for(i;i<=10,i++)

{

sum+=i;

}

cout<<“sum=”< using namespace std;const float pi=3.1416;void main(){ int itype;

cout<<“不是合法的输入”< using namespace std;struct riqi { int year;int mon;int day;int hour;int minut;int second;};void main(){ riqi a;cout<<“输入时间日期”<>a.year;cout<<“输入月份”<

实验

三、函数的应用(2学时)

1、实验目的:

掌握函数的定义和调用方法。练习重载函数使用。练习函数模板的使用 练习使用系统函数。

在main()函数中提示输入两个整数x,y,使用cin语句得到x,y的值,调用pow(x,y)函数计算x的y次幂的结果,再显示出来。程序名:lab3_4.cpp。

编写递归函数int fib(int n),在主程序中输入n的值,调用fib函数计算Fibonacci级数。公式为fib(n)=fib(n-1)+fib(n-2),n>2;fib(1)=fib(2)=1。使用if语句判断函数的出口,在程序中用cout语句输出提示信息。程序名:lab3_5.cpp。

7)调试操作步骤如下:

选择菜单命令Build|Start Debug |Step In,系统进入单步执行状态,程序开始运行,并出现一个DOS窗口,此时光标停在main()函数的入口处。

把光标移到语句answer=fib(n)前,从Debug菜单单击Run To Cursor,在程序运行的DOS窗口中按提示输入数字10,这时回到可视界面中,光标停在第11行,观察一下n的值。

从Debug菜单中单击Step Into,程序进入fib函数,观察一下n的值,把光标移到语句return(fib(n-2)+fib(n-1))前,从Debug菜单单击Run to Cursor,再单击Step Into,程序递归调用fib函数,又进入fib函数,观察n的值。

继续执行程序,参照上述的方法,观察程序的执行顺序,加深对函数调用和递归调用的理解。

再试试Debug菜单栏中的别的菜单项,熟悉Debug的各种方法。

4、实验原理

C++中函数的重载使得同样的函数名下,只要参数类型、数目不同时,即可根据输入的数据进行相应的函数调用,使用起来简单方便。

5、思考与体会

C++中,函数的运用与之前学过的C语言既有相同之处,也有着不同的地方。相同的地方在于格式、用法等框架上的不变。但是C语言中对于同样的函数名是只能够申明一种函数的,倘若有相同的函数名出现系统即会报错,所以用起来有时是极为不便

0

//参数为两个双精度浮点形的函数 int max1(double a,double b){ a=a>b?a:b;return a;} //参数为三个双精度浮点形的函数 int max1(double a,double b,double c){ a=a>b?a:b;a=a>c?a:c;return a;} void main(void){ int a;double b;a=max1(1,2);cout<

Lab3_3: #include using namespace std;int max1(int a,int b){ a=a>b?a:b;return a;} int max1(int a,int b,int c){ a=a>b?a:b;a=a>c?a:c;return a;}

int main(){ int i,j,k;cout<<“请输入要比较的3个数:

”<

2131415

public: Rank rank;int frequency;float voltage;CPU(Rank r,int f,float v){

//构造函数

cout<<“构造了一个CPU”<

rank=r;

frequency=f;

voltage=v;} void run(){

cout<<“CPU开始运行”<

} void stop(){

cout<<“CPU停止运行”<

cout<<“RANK=”<

cout<<“frequency=”<

cout<<“voltage=”<

};

int main(){ CPU cpu(p5,500,2000);cpu.run();cpu.show();cpu.stop();return 0;}

Lab4_2 #include using namespace std;enum Rank{p1=1,p2,p3,p4,p5,p6,p7};//CPU类 class CPU{ public:

//析构函数-17

computer(Rank r,int f,float v){

CPU cpu(r,f,v);

//定义CPU对象

RAM ram(1);

//定义RAM对象

CDROM cdrom(1);

//定义CDROM对象

cpu.run();

cpu.show();

cpu.stop();} };int main(){ computer com(p4,300,3000);return 0;}

实验

七、继承与派生(一、二)4学时

1、实验目的:

学习定义和使用类的继承关系,定义派生类。熟悉不同继承方式下对基类成员的访问控制。学习利用虚基类解决二义性问题

2、实验任务 a)定义一个基类Animal,有私有整型成员变量age,构造其派生类dog,在其成员函数SetAge(int n)中直接给age赋值,看看会有什么问题,把age改为公有成员变量,还会有问题吗?编程试试看。b)定义一个基类BaseClass,有整型成员变量Number ,构造其派生类DerivedClass,观察构造函数和析构函数的执行情况。c)定义一个车(vehicle)基类,具有MaxSpeed、Weight等成员变量,Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类。自行车类有高度(height)等属性,汽车类有座位数(SeatNum)等属性。从bicycle和motorcar派生出摩托车(motorcycle)类,在继承过程中,注意把vehicle设置为虚基类。如果不把vehicle设置为虚基类,会有什么问题?编程试试看。

3、实验步骤

编写程序定义基类Animal,成员变量age定义为私有的。构造派生类dog,在其成员函数SetAge(int n)中直接对age赋值时,会出现类似以下的错误提示:

error C2248:’age’:cannot access private member declared in class ‘Animal’

error C2248:’age’:cannot access private member declared in class ‘Animal’

把age改为公有成员变量后重新编译就可以了。程序名为:lab7_1.cpp

0

确方便我们编程。

6、部分参考代码

Lab7_1 #include using namespace std;

class Animal{

public: int age;};

class dog:public Animal{ public: int SetAge(int n){

age=n;

return age;} };

void main(void){ int age;dog d;age=d.SetAge(3);cout<<“age=”<

Lab7_2 #include using namespace std;class BaseClass{ public: int Number;BaseClass(){

cout<<“这是父类的构造函数”<

cout<<“这是父类的析构函数”<

//Motorcycle继承bicycle和motorcar类

class motorcycle:public bicycle,public motorcar{ public: motorcycle(int seat,double H,double MS,double W){

SeatNum=seat;

height=H;

MaxSpeed=MS;

Weight=W;} void show(){

cout<<“seatnum=”<

cout<<“height=”<

cout<<“MaxSpeed=”<

cout<<“weight=”<

int main(){ motorcycle che(3,30.33,90.84,500);che.show();return 0;} 实验

八、多态性2学时

1、实验目的:

掌握运算符重载的方法

习使用虚函数实现动态多态性。

2、实验任务

a)定义Point类,有坐标x,y两个成员变量;对Point类重载“++”、“--”运算符,实现对坐标值的改变。

定义一个车(vehicle)基类,有Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类,从bicycle和motorcar派生出摩托车(motorcycle)类,它们都有Run、Stop等成员函数。观察虚函的作用。

3、实验步骤

编写程序定义Point类,在类中定义整型的私有成员变量x,y,定义成员函数Point& operator++();Point operator++(int);以实现对Point类重载“++”运算符,定义成函数Point& operator –();Point operator

也就是函数的重载。

6、部分参考代码

Lab8_1 #include using namespace std;

class Point{ public: Point(double x=0.0,double y=0.0):xray(x),yray(y){} Point operator++(int);Point operator--(int);void show();private: double xray;double yray;};

Point Point::operator++(int){ return Point(xray++,yray++);}

Point Point::operator--(int){ return Point(xray--,yray--);}

void Point::show(){ cout<<“x坐标为”<

int main(){ Point p(4.5,6.5);cout<<“进行运算前的情况:”<

show(&v);return 0;}

C++实验报告 第2篇

研究课题:图形编辑器

一、实验目的

1.熟悉C++的一些重要性质,利用封装、继承、虚函数和多态性等特性,通过实验学习如何对各类图元的属性和方法进行合理的封装 2.学习Microsoft的Visual C++编程工具 3.掌握MFC的相关知识

4.掌握基本的文件保存、读取以及操作封装技术

二、实验目的

设计一个简单的图形编辑器

三、实验所用仪器、设备

计算机:PentiumIII 800 以上

256M内存 操作系统:Windows 2000/XP 开发集成环境:Visual C++ 6.0

四、软件功能简介

(注:此软件是从网上下载得来)

该软件具有汉化的菜单界面(仿Windows自带画图软件),具有文件打开、编辑、保存等功能。编辑部分包括可以在编辑区域画直线、圆、矩形、曲线等矢量图形,可插入文字,可以修改线条的线型、颜色等基本属性。

五、部分代码分析

1.类的初始分析:

class CDrawApp : public CWinApp { public: CDrawApp();

// Overrides virtual BOOL InitInstance();

// Implementation protected: //{{AFX_MSG(CDrawApp)afx_msg void OnAppAbout();// NOTE-the ClassWizard will add and remove member functions here.//

DO NOT EDIT what you see in these blocks of generated code!//}}AFX_MSG DECLARE_MESSAGE_MAP()};学习C++我们最需要理解的就是它面向对象的设计思想。这种思想可以在类和对象上得到充分的体现。

类是面向对象程序设计的核心,它实际上是由用户定义的一种新的复杂数据类型。它是通过抽象数据类型ADT方法来实现的一种数据类型,将不同类型的数据和与这些数据相关的操作封装在一起形成一个集合体。因此,它具有更高的抽象性,实现了信息的隐藏和封装。

对象是某种类的一个实例,是类的具体体现。一个类可以有多个对象。

分析这一段代码,编程者将CDrawApp();设置为公有函数,这样做就是在整个函数的外面开了一个口,使用户可以利用这一函数处理具体问题而不必详解函数内部,是面向对象中封装特性的一个具体体现;另外,此函数中还包含了构造函数与析构函数,构造函数完成对新对象的初始化工作,析构函数是构造函数的配对物,它实现与构造函数相反的功能。另外,这段代码中还包括布尔型虚函数InitInstance(),这是函数重载,也是多态性的具体体现。

由这段代码我们可以了解关于类和对象的一些知识,为我们进一步了解面向对象程序设计的思想精髓奠定了基础。

2.对构造函数和析构函数的分析

构造函数

CCreateLine::CCreateLine(): m_begin(0,0), m_end(0,0){

m_nStep = 0;// 初始化操作步为 0 }

构造函数:C++中“类”只定义了一组对象的类型。要使用这个类还必须用“类”说明它的对象,每个对象中的数据成员还必须赋初值,这些功能都是由构造函数完成的。此造函数用初始化列表的方式对直线类的私有成员进行初始化,同时记下操作步m_nStep是直线类从指令类中继承来的成员,它在指令类中属于保护成员,在直线类中则成为私有成员。这是数据共享与数据保护两者兼顾时的一种处理方法。

析构函数

CCreateLine::~CCreateLine(){ } 它是构造函数的配对物,与构造函数一样是与类同名的成员函数,并在函数名前加上一个’~’以便与构造函数相区别。此析构函数中没有任何操作语句,但它并非没有任何操作。在任何一个对象消失时都要调用本类的析构函数进行扫尾工作。在构造对象时,构造函数分配资源给程序,在对象作用结束后,这些资源的释放就要靠析构函数。当然析构函数中也是可以有语句的,当需要在对象消失之前执行某种操作时,可以把语句写在里边。

3.继承和虚函数分析

class CDrawRect : public CDrawObj { protected: DECLARE_SERIAL(CDrawRect);CDrawRect();

public: CDrawRect(const CRect& position);//添加了对新数据成员的初始化

// Implementation public: virtual void Serialize(CArchive& ar);//添加了对新数据成员操作 virtual void Draw(CDC* pDC);//根据要求画出每个图形

virtual int GetHandleCount();//line和roundRectangle特殊处理 virtual CPoint GetHandle(int nHandle);//line和roundRectangle特殊处理

virtual HCURSOR GetHandleCursor(int nHandle);//line和roundRectangle特殊处理

virtual void MoveHandleTo(int nHandle, CPoint point, CDrawView* pView = NULL);//通过特征点来修改大小

virtual BOOL Intersects(const CRect& rect);//判断与图形是否存在相交

virtual CDrawObj* Clone(CDrawDoc* pDoc);//Clone一个新对象加入到pDoc中

protected: enum Shape { rectangle, roundRectangle, ellipse, line };Shape m_nShape;//通过枚举变量来标示属于上述四种的哪一种形状 CPoint m_roundness;// for roundRect corners

friend class CRectTool;};在阅读此函数的源代码过程中,我感觉到对基类中虚函数的使用对整个程序具有着十分重要的意义。正如上段代码,它的前提是派生类CDrawRect对基类CDrawObj进行了继承,只有在对基类中的虚函数进行设置后,我们才能更加高效地处理和使用基类和派生类中的方法。所以,我感觉到在学习面向对象程序设计时,应当尤为注意基类中虚方法的创建和后期调用。

六、个人学习体会

在学习C++以前,我认为C++只是在C语言的基础上的一种延伸,认为只要学过C语言,就可以用C语言的那种设计思想来学习C++、设计C++程序。正是由于抱了这种错误的思想,使我在一开始学习C++的时候遇到了很大的困难,我没有办法体会面向对象的设计思想,我在学习这门课的时候老是想着实现这个函数功能的具体过程,而没太注意对象分类的重要性。

随着课程学习的深入,我感觉到了利用类和对象、继承、封装等一系列知识可以把我们程序中很多繁杂、重复的部分省略掉,还可以解决一些利用面向过程的设计思想无法解决的问题,我自己也试着编写一些小的C++程序,当然在这个过程中遇到了很多困难,其中调试带来的困难让我无法忘记,在调试程序的同时,我也总结出来了一些调试的小技巧,让我在C语言课程设计中也受用匪浅。

在学习这门课的过程中,我感受到了自己亲自动手编程序、调程序的重要性,我们要熟悉C++的语法、体会调试的思想,最好的一个手段就是自己动手编程、调试,这会比我们一味的看书效果好得多。

另外,我还感觉到一个好的程序编出来需要很多人的团结合作。我在检查自己编写的程序是否有BUG未被找出的时候,我会让我的同学作为一个程序使用者来找出未发现的BUG并提出改进意见,这让我们的工作更加高效。

C++实验报告 第3篇

《C++程序设计》是计算机类课程中非常重要的一门学科基础课, 是许多计算机专业课程的先修课, 学习好这门课程对于学习其他计算机课程, 比如数据结构、软件工程等有非常大的帮助。教师在讲授这门课程时往往采用的是课堂讲授理论知识和在机房上机实验相结合的教学方式。其中实验教学在《C++程序设计》课程学习过程中起了非常重要的作用。

2 实验教学存在的问题及采取的相关措施

《C++程序设计》实验教学过程并不是没有遇到任何阻碍, 一帆风顺的, 相反教师在实验教学过程中发现了一些问题, 学生在上机实验过程中也遇到了不少问题, 如何消除这些问题对实验教学效果的影响是我们当前需要重点研究的内容。

2.1 提高学生认识, 提高学生实验完成效率。

不少学生认为实验课只是《C++程序设计》这门课程的补充部分, 学生去机房上机实验的目的就是为了完成任课教师布置的实验任务, 而这些实验任务只是理论知识点的验证。所以不少学生在实验课上把实验作业完成后, 如果还有时间, 也不再进一步巩固实验知识, 而是开始消磨时间, 有的甚至偷偷看手机或者上网玩游戏。另外, 还有学生认为上机实验其实就是在编译环境下验证源程序的过程。学生把实验题目对应的源程序编写好, 输入到编译系统中, 直接编译、连接、运行看结果就可以了。如果程序编译不成功或者是运行时出现问题, 不少学生往往不是根据编译系统提示的错误信息, 认真查看源程序, 仔细分析, 积极思考, 寻求解决问题的方案, 把程序调试正确, 而是马上举手请实验指导教师帮忙改正错误, 学生只是把最后运行结果记录下来。针对这些情况, 任课教师要在上机实验前明确实验目的及要求, 布置实验内容, 合理安排学生实验任务, 适当增加设计类和综合类题目, 让学习好、水平高的学生也不得闲, 避免学生上机实验课的随意性。学生完成实验后要提交实验报告, 实验报告的内容包括实验各个题目的源程序, 验证的实验结果和对实验结果的分析。对于实验报告教师要鼓励学生独立完成, 杜绝抄袭现象。同时, 教师要让学生认识到调试程序是实验学习中非常重要的一个环节, 学生只有不断地调试程序才能巩固所学相关知识, 产生新的思路, 提高动手能力, 培养创新能力。为了提高学生程序调试效率, 教师实验课前要把实验任务提前布置给学生, 学生在上机实验课前要做好充分准备, 用流程图或伪代码等方法描述出算法, 写出源程序。上机时学生不再现编源程序, 从而节省了时间, 使调试程序的时间更充裕。教师也不是只要学生举手问题, 就帮忙直接改错, 而是给出调试的方法, 鼓励学生理清程序设计思路, 根据系统错误提示, 自己找出问题所在, 并改正错误。那么在以后实验过程中学生再遇到相似的问题, 就不会出现同样的错误了。

2.2 激发学生兴趣, 提高学生实验学习主动性。

伟大的科学家爱因斯坦说过:“兴趣是最好的老师”。如何有效激发学生实验兴趣是任课教师需要认真对待的问题。《C++程序设计》课程知识点众多且不易理解, 对应的实验任务往往要求学生要有较强的逻辑思维能力, 这就导致许多学生在进行这门课程实验之初就产生了恐惧心理, 认为程序设计是非常难的事情, 失去了学习的主观愿望, 自然失去了对实验的兴趣。为了激发学生对编程的兴趣, 任课教师可以在《C++程序设计》实验课程开始阶段, 先将一些经典的有趣的实验问题示范给学生, 让学生直接感受到实验的魅力, 培养学生实验学习的兴趣。学生有了兴趣, 乐意学了, 实验学习的主动性自然能够提高。教师也可以采用比赛的方式, 在课程要求必须完成的实验任务之外还要求学生做一些附加的实验任务, 促使学生进一步利用课余时间进行实验学习。学生为了完成这些额外的实验任务, 会积极竞争、探索实验知识, 努力完成。对实验任务完成好完成快的学生教师给予表扬和实验平时成绩加分的奖励。教师把实验效果好的学生作品展示出来并进行点评, 让学生获得成就感, 学生自然更有信心更有兴趣进行实验了。学生就会由被动接受实验任务变成主动完成实验。

2.3 创造良好条件, 提高学生实验学习能力。

学校和教师要给学生提供实验学习的便利条件和优良环境, 使学生在课外也能进行实验学习, 从而进一步增强学生实践编程能力。学校解决了学生课外上机实验受到时间和空间限制的后顾之忧。学校有专门进行实验的教学场所, 里面有数百台配置优良的计算机, 同时开通安全畅通的网络, 方便学生通过因特网查询实验相关学习资料。学生访问学校网站, 可以登录《C++程序设计》实验教学平台进行实验相关活动。学生登录实验教学平台查看《C++程序设计》实验教学大纲、实验考试大纲, 有针对性的学习C++实验知识。学生查看实验课程通知, 及时得知教师和实验室发布的有关信息。学生利用教学邮箱给任课教师发送电子邮件和任课教师建立一对一的联系。学生在答疑讨论区中发帖, 把在实验课上遇到的自己不能解决的问题或在课余时间进一步学习过程中遇到的新的实验问题提问出来, 任课教师和本班学生都能看到帖子, 都可以回复帖子, 发表自己对问题的看法或解决问题的答案。对于发帖积极的学生, 教师按照发帖数量和质量在实验成绩平时部分中给予加分奖励。学生通过实验作业部分提交实验报告, 任课教师能够及时批阅, 对学生上机实验整体情况也能及时掌握, 以便适时调整自己实验教学。学生登录实验教学平台在线测试, 实验期末考试以程序改错题、程序填空题和程序编程题三种题型为主, 教师在实验教学平台上给出模拟考试题目, 学生平时可以做模拟训练, 有效促进实验成绩的提高。教师指导学生成立软件兴趣小组, 教师带领学生做实验项目, 从而进一步提高学生实验水平。学生分成若干个兴趣小组, 每个小组成员一般为3人到4人, 学生以小组为单位进行实验活动, 在平时实验课中讨论实验相关问题或是协作完成实验项目。教师除了布置实验课任务外, 还要提出几个和实验相关的启发式问题, 对学生加以引导, 让学生自己去思考, 去弄明白, 学生通过去图书馆查阅书籍或通过因特网搜索知识完成任务。学生在实验任务完成过程中学会知识, 提高实验能力。

结束语

实验是促进学生掌握《C++程序设计》课程重要的环节, 学生只有把理论知识点应用到实际问题的解决中才能真正掌握这些知识点。实验教学形式多样, 实验过程达到优化, 才能更大限度的发挥实验在课程中的作用, 才能更好的提高学生的编程能力, 从而取得良好的实验效果。

摘要:本文主要对《C++程序设计》课程实验教学现状进行了研究和分析, 并提出了解决问题的有关建议。

关键词:C++程序设计,实验教学,学生

参考文献

[1]郭小荟.“面向对象程序设计”实验教学模式改革实践[J].煤炭高等教育, 2011 (5) 122-123.

[2]黄柳红.C++面向对象程序设计的实验教学研究[J].广东技术师范学院学报, 2012 (3) 70-72.

[3]詹秀菊, 刘梢.《面向对象程序设计》课程实验教学改革的研究与探索[J].现代计算机 (专业版) , 2013 (24) 40-42, 46.

[4]刘应成.编程初学者程序调试能力的现象描述法研究[J].现代计算机 (专业版) , 2010 (8) 28-31.

[5]张林, 付卫卫.构建实验教学平台优化实验教学过程[J].实验室研究与探索, 2007 (1) 8-10, 15.

[6]刘群, 李坚.“C++语言程序设计”实验教学的改革与实践[J].实验室科学, 2012 (2) 22-24, 28.

C++实验报告 第4篇

关键词:C++实验课;现代高校;重要地位

中图分类号:G632.0文献标识码:A文章编号:1007-9599 (2010) 13-0000-01

The Important Position of C++ Experimental Course in the Modern University

Hu Bin,Fu Hui,Zhao Chunyu

(Information Engineering College of Huanghe S&T College,Zhengzhou450063,China)

Abstract:C++ experimental course is C++ Tutorial important part,to develop students creative thinking ability to develop independent learning interests and abilities,in the process of teaching can play a main body of students,and improve classroom teaching and learning efficiency,and therefore plays an important modern university teaching position.

Keywords:C++ experimental course;Modern university;Important role

社会发展对高校教育人才的要求发生了重大的改变,现代社会需要动手能力强、实践能力强的人才,复合应用型人才才能适应社会的发展。C++课程作为高校重要的课程,不仅要求学生要具备较强的理论知识,更要求学生具有更强的实际动手设计能力,而实踐能力的培养更多的需要实验课,因此C++实验课在现代高校教学中具有极其重要的地位。

一、C++实验课能培养学生的创造性思维能力

教育不仅仅是知识的传授,更重要的是学生全面素质的培养。现代社会的发展日新月异,知识的新陈代谢越来越快,因此我们教育学生的目的不能仅仅局限在教他们学会知识,更重要的是培养学生的创造性思维能力,让他们毕业以后在社会中能够更好的学习,适应社会的发展。教育学家裴斯泰洛齐曾指出:“思维能力是学生进行学习活动和科技创造性活动的最重要、最基本的心理素质,而创造性思维应该是这些活动的核心。”

C++实验课不仅能让学生掌握课堂学习的基本理论知识,更重要的是学生在实验课的过程中能够以所学习的理论知识为依据创造性的学习,能够培养学生的创造性思维能力。在实验课教学中,教师应当利用各种教学手段加强学生的C++实验课的实验技能训练,加强学生创造性思维能力的形成。第一,加强C++实验课操作技能的训练。操作技能是C++实验课的基本技巧,是基础。目前高校大学生操作技能基础较差,因此必须在大学生中有针对性的进行操作技能的训练。第二,加强C++实验课综合实验技能的训练。“分析”和“综合”是思维的过程最基本的元素,人们认识活动水平的提高,就是在不断地分析、综合等过程中螺旋上升。在C++实验课中,我们应当培养学生“分析”和“综合”的能力,使学生对知识的理解尽快从感性认识上升到理性认识,不断提高学生的创造性思维能力。

二、C++实验课能发挥学生的主体性作用

目前我国高校教学依然受传统的观念和思维方式的束缚,老师依然是教学的主导,学生依然是教学的配角,老师主动教学生被动的学依然是教学的主要特征。C++实验课作为上机操作课程,更强调学生的自主学习,能发挥学生的主体性作用。第一,创新C++实验课教学,注重发挥学生主体性作用。原先需要教师做的演示实验,可以尝试让学生分组进行对比实验,为学生创造更多的动手机会。在实验过程中如何利用常规的实验考试来发挥学生的主体性作用也是教师需要探讨的问题。在实验课程开放过程中我们应当增加探索性实验,减少验证性实验,现在学生作的实验大多数是验证性实验,不利于学生创造性思维的培养,增加一部分探索性实验,有利于提高学生在学习上的积极性和主动性,有助于培养学生学习兴趣,而且还可以培养学生的上机操作能力和研究探索能力,体现“以教师为主导,以学生为主体”的教学原则。第二,在C++实验课教学中坚持学生主体性的观念,创造民主的气氛,让学生成为自己学习的主人。

三、C++实验课能培养学生的自主学习的兴趣和能力

C++实验课的特征就是学生是实验的自主设计者和自主学习者,培养了学生的学习兴趣和能力。高校教学模式的改革强调以学生的自主学习为主导,因此在C++实验课教学中更应重视学生的主体性、主导性,更要关注学生自主学习的兴趣及创新能力的培养。C++实验课中学生自主学习的兴趣和能力的培养策略:第一,C++实验课中应加强学生信息能力的培养。所谓信息能力是指能够敏感地捕捉信息并进行有效地分析、判断、整理、归纳、评估、加工、传递和创新的能力。第二,C++实验课中应注重学生研究能力的培养。所谓研究能力是指学生综合分析事物的能力和自主解决实际问题的能力。第三,C++实验课中应注重学生合作能力的培养。“学会合作”是国际21世纪教育委员会提出的“学会认知、学会做事、学会合作、学会生存”的教育四大支柱之一。

四、小结

尽管C++实验课教学在高校教学中占有重要的地位,但传统的教学束缚了其重要性的发挥,因此必须对传统的教学模式进行改革,建立创新的教学模式。第一,教学理念的创新。传统观念认为实验课程仅是课堂理论教学的辅助环节,处于一个可有可无的境地。因此必须首先改变实验教学为副的陈旧观念,承认理论教学与实验教学是一个有机整体,重视实验教学;为实验教学配备高素质、高水平的实验教学人才。第二,重视教学方法的改革。传统的教学方法束缚了学生的学习的积极性和实验课的兴趣,在新的教学形式下,教师应当树立实验课的重要性,让学生在实验教学中充分发挥主体性,培养学生自主性学习的能力和兴趣。

参考文献:

[1]郑顺今,南福松.教学中激发学生学习兴趣的艺术[J].辽宁教育学院学报,2001,6:18-20

[2]封昌权.远程教育环境下学生自主学习能力的培养[J].中国电化教育,2003,3:64-65

[3]修明月,张宝歌.新世纪高等院校人才培养模式研究与实践[J].黑龙江高教研究,2003,4:138-142

[4]唐一科.高校人才培养模式的改革与实践创新[J].中国高教研究,2003,1:39-41

作者简介:

胡彬(1979-),男,河南郑州人,单位:黄河科技学院,研究方向:计算机应用技术,职称:助教。

信息系C++实验报告(实验8) 第5篇

实验学时 2 实验时间 2017 年 12 月 1 日

实验地点

指导教师

课程名称 C++程序设计 专

业班

成绩

实验项目 类和对象(构造函数、析构函数、组合类、友元)

实 验 目 的 1、理解类的概念;2、掌握声明类的方法; 3、掌握对象的定义和初始化 4、掌握通过类编写程序 5、构造函数、析构函数 6、对象数组、对象引用、对象指针 7、组合类 8、静态成员 9、友元 实 验 内 容 和 要 求 1、阅读“程序 1.txt”,然后回答以下问题:

1)行 A 定义了一个类 Test 的对象,它将调用哪个构造函数?

2)行 A 能否写成 Test t1();?

为什么不可以或者可以?

3)行 B 定义了另一个对象,它将调用哪个构造函数?

4)解释第二个构造函数的函数体中用到 this 指针的原因:?

5)解释行 C 数组 p 的含义?

2、阅读“程序 2.txt”,然后回答以下问题:

1)行 A 中动态申请的数组为何还要将数组大小加 1?

2)String 类中是否还存在默认的构造函数“String();“?

3)行 B 开始的构造函数称之为

构造函数。解释其功能

4)执行行 C 时会调用哪个构造函数?

5)上机验证该程序。

3、阅读“程序 3.txt”,然后回答以下问题:

1)执行行 A 后,a1.c=

a2.c=

A::c=

2)执行行 B 后,a1.c=

a2.c=

A::c=

3)行 B 可否改为”A::c=400;”

为什么

4)c 为类 A 的私有成员,但行 D 中为何通过 t 能直接访问成员 c?

5)执行行 E 后,a1.c=

a2.c=

A::c=

第 1 题、第 2 题和第 3 题不用抄题目,只需写答案在报告纸上。

4、定义一个点类 Point,包括数据成员点的 x 坐标和 y 坐标(int)、构造函数以及设置点 x,y 坐标的成员函数。定义一个 CRect 类,代表一个矩形,要求

CRect 类中有代表矩形的左上角坐标(x1,y1)和右下角坐标(x2,y2)点类的对象(组合类),要求 CRect 类中有三个成员函数 RectHeight()、RectWidth()以及area(),通过这三个函数能得到矩形的高和宽和面积。

要求 CRect 类中有构造函数,要求 CRect 类中有成员函数 SetR(),通过这函数能设置矩形的左上角坐标和右下角坐标。

5、建立一个类 primenum,求指定数据范围内的所有质数。具体要求如下:

1)私有数据成员 int data[25]

依次存放指定范围内求出的所有质数 int low,high

存放指定的数据范围的下限和上限 int num

存放 low 与 high 之间的质数的个数

2)公有成员函数 primenum(int low,int high)

构造函数,初始化 low 和 high,同时在函数体内初始化 num 为 0 int isprime(int x)

判断 x 是否为质数。若是质数,返回 1;否则,返回 0.void process()

求指定范围内的所有质数,把它们依次存放在数组 data,并将求出的质数个数存放在 num 中 void print()

输出求出的质数个数以及所有质数,要求每行输出 5 个质数。

3)在主函数中对该类进行测试。例如:定义一个 primenum 类的对象 test,指定查找范围为 100~200,求出 100~200 之间的所有质数。

实 验 过 程(算法、源代码以及注释)

实 验 结 果(记录程序执行的结果,分析结果)

C++上机实验报告5(定稿) 第6篇

实验五继承与派生 实验目的

1.学习定义和使用类的继承关系,定义派生类 2.熟悉不同继承方式下对基类成员的访问控制 3.学习利用虚基类解决二义性问题 实验要求

1.定义一个基类Animal,有私有整型成员变量age,构造其派生类dog,在其成员函数SetAge(int n)中直接给age赋值,看看会有什么问题,把age改为公有成员变量,还会有问题吗?编程尝试。

2.定义一个基类BaseClass,有整型变量Number,构造其派生类DerivedClass,观察构造函数和析构函数的执行情况。

3.定义一个车(vehicle)基类,具有Maxspeed、Weight等成员,Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类。自行车(bicycle)类有高度(Height)等属性,汽车(motorcar)类有座位数(SeatNun)等属性。从bicycle和motorcar派生出摩托车(motorbicycle)类,在继承过程中,注意把vehicle设置为虚基类。如果不把vehicle设置为虚基类,会有什么问题?编程尝试。实验内容及实验步骤

1.编写程序定义基类Animal,成员变量age定义为私有的。构造派生类dog,在其成员函数SetAge(int n)中直接对age赋值时,会出现类似以下的错误提示:

error C2248 : ‘age’ : cannot access private member declared in class ‘Animal’

error C2248 : ‘age’ : cannot access private member declared in class ‘Animal’ 把age改为公有成员变量后重新编译就可以了。程序名:lab7_1.cpp。错误代码:

#include using namespace std;

class Animal { private: int age;public: Animal(){};};

class dog:public Animal { public: void SetAge(int n){

age=n;};};

int main(){ dog one;one.SetAge(23);return 0;}

运行结果:

正确代码:

#include using namespace std;

class Animal { public: int age;public: Animal(){};};

class dog:public Animal { public: void SetAge(int n){

age=n;};};

int main(){ dog one;one.SetAge(23);return 0;}

运行结果:

2.编写程序定义一个基类BaseClass,构造其派生类DerivedClass,在构造函数和析构函数中用cout输出提示信息,观察构造函数和析构函数的执行情况。程序名:lab7_2.cpp。

源代码:

#include using namespace std;class BaseClass { private: int a;public: BaseClass(){

cout<<“基类构造函数调用”<

cout<<“基类析构函数调用”<

class DerivedClass:public BaseClass { private: int b;public: DerivedClass(){

};cout<<“派生类构造函数调用”<

cout<<“派生类析构函数调用”<

int main(){ DerivedClass one;

return 0;}

运行结果:

3.用debug功能跟踪程序lab7_2的执行过程,观察基类和派生类的构造函数和析构函数的执行情况。

DEBUG:

4.编写程序定义一个车(vehicle)基类,由此派生出自行车(bicycle)类、汽车(motorcar)类,注意把vehicle派生为虚基类。再从bicycle和motorcar派生出摩托车(motorcycle)类,在main()函数中测试这个类。程序名:lab7_3.cpp。

编译成功后,把vehicle设置为非虚基类,再编译一次,此时系统报错,无法编译成功。这是因为若不把vehicle设置为虚基类,会出现二义性错误,程序不能成功编译。源代码:

#include using namespace std;

class Vehicle { public: Vehicle(){};int a;void set(){

cout<<“Vehicle调用”<

class Mortorcar:virtual public Vehicle { public: Mortorcar(){};int b;void set(){

cout<<“Mortorcar调用”<

class Bicycle:virtual public Vehicle { public: Bicycle(){};int c;void set(){

cout<<“Bicycle调用”<

class Mortorcycle:public Mortorcar,public Bicycle { public: Mortorcycle(){};int d;void set(){

cout<<“Mortorcycle调用”<

int main(){ Mortorcycle one;one.a =1;one.b=2;one.set();return 0;} 运行结果:

错误情况:

思考题

1.如何在已有的类的基础上设计新的类?

派生一个新的类。

2.基类和派生类对象的构造顺序是怎样的?

C++实验报告 第7篇

设计文档

惠州学院

HUIZHOU UNIVERSITY

课程名称: 程序设计综合实验

姓名:实验名称: 俄罗斯方块 学号:任课教师:

专业:班级: 计算机科学与技术1班

实验时间:

计算机科学与技术

综合实验项目:俄罗斯方块游戏

1、问题需求

(1)游戏等级:游戏分为1-10十个等级,等级越高,方块下落速度越快;(2)由方向键控制游戏:上键控制方块变形、下键控制方块下移并判断是否有消行、左键控制方块左移、右键控制方块右移;

(3)游戏积分:一次性消的行数越多加的分数越多,当消行每超过30行自动提高一个游戏等级。

2、总体设计:

(1)用数组存放方块(2)输出地图

(3)在地图里面输出方块(4)开始游戏(5)方块的旋转(6)方块是否能下落(7)判断方块是否能下落(8)提示下一个即将下落的方块(9)控制方块的下落速度

(10)分成10等级,等级越高方块下落得更快(11)消行处理(12)游戏结束

3、详细设计设计说明:本程序运行代码如下:

#include #include #include #include “colorConsole.h”

#define SQUARE_COLOR FOREGROUND_RED| FOREGROUND_GREEN|FOREGROUND_INTENSITY //方块的颜色 #define up

#define down

#define left

#define right

#define esc #define MAPW

//地图的宽度

#define MAPH

//地图的高度

BOOL isavailable(int a[],int x,int y,int w,int h);//判定是否能放下 void turn(int a[][4],int w,int h,int *x,int y);

//转动 int * create();

//创建方块 void init();

//初始化工作

void drawblocks(int a[],int w,int h,int x,int y,WORD wColors[],int nColors);void clearcache();

//清除键盘缓冲区 void end();void clearsquare(int *a,int w,int h,int x,int y);void gameover();void deletemap(int m[][MAPW],int row,int w,int h);//消除一行

int dx=30,dy=5;

//屏幕上的偏移量 int score=0,level=0;

int map[MAPH][MAPW];int a1[4][4]={{1},{1,1,1}};int a2[4][4]={{0,1},{1,1,1}};int a3[4][4]={{1,1},{0,1,1}};int a4[4][4]={{0,0,1},{1,1,1}};int a5[4][4]={{0,1,1},{1,1}};int a6[4][4]={{1,1,1,1}};int a7[4][4]={{1,1},{1,1}};int a[4][4];

int main(){

init();int *b=NULL;b=create();

//预创建方块 int q=0;int sign,blank,x,y;while(1){

for(int i=0;i<4;i++)

//复制方块

for(int j=0;j<4;j++)

if(a[i][j]=*(b+i*4+j))blank=i;

y=1-blank;x=4;clearsquare(&a[0][0],4,4,13,13);b=create();HANDLE handle;handle=initiate();WORD wColors[1]={FOREGROUND_RED| drawblocks(b,4,4,13,13,wColors,1);wColors[0]=SQUARE_COLOR;drawblocks(&a[0][0],4,4,x,y,wColors,1);clearcache();char string[5];wColors[0]=FOREGROUND_RED| textout(handle,26+dx,5+dy,wColors,1,itoa(score,string,10));textout(handle,26+dx,9+dy,wColors,1,itoa(level,string,10));sign=1;while(sign){

int delay=0,max_delay=100-10*level;//延迟量 while(delay

if(_kbhit())//用if避免按住键使方块卡住 {

switch(key){ case up:

clearsquare(&a[0][0],4,4,x,y);turn(a,4,4,&x,y);draw=1;break;

int draw=0;int key=_getch();FOREGROUND_GREEN|FOREGROUND_INTENSITY };FOREGROUND_GREEN|FOREGROUND_INTENSITY;

case down:

}

}

}

delay=max_delay;break;

if(isavailable(&a[0][0],x-1,y,4,4)){

}

clearsquare(&a[0][0],4,4,x,y);x--;draw=1;

case left:

break;

if(isavailable(&a[0][0],x+1,y,4,4)){

} break;end();break;

clearsquare(&a[0][0],4,4,x,y);x++;draw=1;

case right:

case esc:

if(draw){

}

HANDLE handle;handle=initiate();

WORD wColors[1]={SQUARE_COLOR};drawblocks(&a[0][0],4,4,x,y,wColors,1);draw=0;

_sleep(8);delay++;if(isavailable(&a[0][0],x,y+1,4,4))//判断是否能下移 {

clearsquare(&a[0][0],4,4,x,y);y++;

HANDLE handle;

}

}

}

} else {

}

handle=initiate();

WORD wColors[1]={SQUARE_COLOR};drawblocks(&a[0][0],4,4,x,y,wColors,1);

sign=0;

//标记,使跳出 while(sign)循环,产生新方块 if(y<=1)gameover();

//是否结束 for(int i=0;i<4;i++)

//放下方块

for(int j=0;j<4;j++)

if(a[i][j]&&((i+y)

map[i+y][j+x]=a[i][j];

int full,k=0;

for(i=y;i

}

full=1;

for(int j=1;j<11;j++){

}

deletemap(map,i,MAPW,MAPH);k++;

q++;

score=score+k;level=min(q/30,9);if(!map[i][j])full=0;

if(full)

//消掉一行

return EXIT_SUCCESS;BOOL isavailable(int a[],int x,int y,int w,int h){

for(int i=max(y,1);i

}

return 0;return 1;int * create(){

} void init(){

for(int i=0;i<20;i++){

} for(i=0;i<12;i++){

} map[0][i]=-1;map[19][i]=-1;map[i][0]=-2;map[i][11]=-2;

//初始化工作

int * a=NULL;int c=rand()%7;switch(c){ case 0:

} return a;a=&a1[0][0];break;a=&a2[0][0];break;a=&a3[0][0];break;a=&a4[0][0];break;a=&a5[0][0];break;a=&a6[0][0];break;a=&a7[0][0];break;case 1: case 2: case 3: case 4: case 5: case 6:

} map[0][0]=-3;map[0][11]=-3;map[19][0]=-3;map[19][11]=-3;HANDLE handle;handle=initiate();WORD wColors[1]={ FOREGROUND_GREEN|FOREGROUND_INTENSITY};textout(handle,26+dx,3+dy,wColors,1,“分数”);textout(handle,26+dx,7+dy,wColors,1,“等级”);textout(handle,26+dx,11+dy,wColors,1,“下一个方块提示”);wColors[1]=FOREGROUND_RED|FOREGROUND_INTENSITY;drawblocks(&map[0][0],12,20,0,0,wColors,1);textout(handle,dx,dy,wColors,1,“◇══════════◇”);wColors[0]= FOREGROUND_GREEN|FOREGROUND_INTENSITY;textout(handle,dx-16,dy,wColors,1,“按任意键开始”);wColors[0]=FOREGROUND_RED|FOREGROUND_INTENSITY;textout(handle,dx-15,dy+3,wColors,1,“制作者”);wColors[0]=FOREGROUND_BLUE| FOREGROUND_GREEN|FOREGROUND_INTENSITY;textout(handle,dx-15,dy+5,wColors,1,“赵强”);int x=_getch();srand(x);textout(handle,dx-16,dy,wColors,1,“

”);void drawblocks(int a[],int w,int h,int x,int y,WORD wColors[],int nColors){

HANDLE handle;handle = initiate();int temp;

for(int i=0;i

for(int j=0;j

if((temp=a[i*w+j])&&y+i>0){

if(temp==-3)

textout(handle,2*(x+j)+dx,y+i+dy,wColors,nColors,“◆”);

}

}

else if(temp==-2)

textout(handle,2*(x+j)+dx,y+i+dy,wColors,nColors,“║”);textout(handle,2*(x+j)+dx,y+i+dy,wColors,nColors,“═”);textout(handle,2*(x+j)+dx,y+i+dy,wColors,nColors,“■”);

else if(temp==-1)else if(temp==1)void clearcache(){

} void end(){ } void turn(int a[][4],int w,int h,int *x,int y){

int b[4][4]={{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}};int sign=0,line=0;for(int i=h-1;i>=0;i--){

} for(int j=0;j

{

} line++;sign=0;if(a[i][j]){

}

b[j][line]=a[i][j];sign=1;exit(EXIT_SUCCESS);while(_kbhit()){ } _getch();if(sign)

for(i=0;i<4;i++)

if(isavailable(&b[0][0],*x-i,y,w,h))

{

*x-=i;

for(int k=0;k

for(int j=0;j

a[k][j]=b[k][j];

break;} } void clearsquare(int *a,int w,int h,int x,int y){ HANDLE handle;handle=initiate();WORD wColors[1]={SQUARE_COLOR};for(int i=0;i

for(int j=0;j

if(a[i*w+j]&&i+y>0)

textout(handle,2*(x+j)+dx,y+i+dy,wColors,1,“ }

void gameover(){ HANDLE handle;handle=initiate();WORD wColors[1]={FOREGROUND_RED| FOREGROUND_GREEN};textout(handle,7+dx,10+dy,wColors,1,”游戏结束“);clearcache();_getch();exit(EXIT_SUCCESS);}

void deletemap(int m[][MAPW],int row,int w,int h){ HANDLE handle;handle=initiate();WORD wColors[1]={SQUARE_COLOR};textout(handle,2+dx,row+dy,wColors,1,”﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌“);

”);

} _sleep(100);for(int i=row;i>1;i--){

} for(i=1;i

} BOOL textout(HANDLE hOutput,int x,int y,WORD wColors[],int nColors,LPTSTR lpszString){

DWORD cWritten;

BOOL fSuccess;

COORD coord;

coord.X = x;

// start at first cell

coord.Y = y;

//

of first row

fSuccess = WriteConsoleOutputCharacter(hOutput,// screen buffer handle

lpszString,// pointer to source string

lstrlen(lpszString), // length of string

coord,// first cell to write to

&cWritten);

// actual number written

if(!fSuccess)

cout<<“error:WriteConsoleOutputCharacter”<

for(;fSuccess && coord.X < lstrlen(lpszString)+x;coord.X += nColors)HANDLE hOutput;

hOutput = GetStdHandle(STD_OUTPUT_HANDLE);return hOutput;

{

fSuccess = WriteConsoleOutputAttribute(hOutput,// 屏幕缓存处理

wColors,// pointer to source string

nColors,// length of string

coord,// first cell to write to

&cWritten);

// actual number written

}

if(!fSuccess)

return 0;}

4、程序运行结果截图: cout<<“error:WriteConsoleOutputAttribute”<

方块左移

方块右移

下一个方块开始下落

方块变形

消一行,增加1分

成功消多行

消多行后分数增加更多

消完30行后,提升一个等级

方块叠到顶端后游戏结束

5、程序使用说明:

(1)按任意键开始游戏

(2)控制方块下落位置进行消行处理

(3)成功消行后加分,当消30行之后等级升一级,最高达到10等级

(4)当产生的新方块不能再下落时,游戏结束。(5)过程中可以按ESC直接退出游戏

6、本实验的心得体会

C++实验报告 第8篇

信息与计算科学专业希望培养的部分毕业生能从事计算机应用软件的开发和管理工作, 为了达到该专业的培养目标, 信息与计算科学专业必须开设相关的高级语言程序设计课程, 我校开设的是C++程序设计。C++语言程序设计是理论教学与实验教学相结合的课程, 实验教学是培养学生钻研与创新精神的重要途径和手段。实践证明, 保证计算机课程教学质量的关键在于课堂教学和实验教学两手都要抓, 两手都要牢[1]。如果想要学生更好地掌握C++的语法规则以及在应用程序开发能力上有所提高, C++程序设计的教学重点应该放在实验教学上。同时, 信息与计算科学专业既不同于计算机专业, 也不同于其他的非计算机专业, 因而该专业的C++语言实验教学也应该有它自身的特点, 本文主要探讨信息与计算科学专业如何进行C++语言程序设计实验教学, 更好地培养和提高学生的动手能力和自主学习的能力。

二、信息与计算科学专业C++程序设计实验教学现状

通过对当前信息与计算科学专业C++程序设计实验教学现状的分析, 实验教学还是存在一些问题。

1. 学生学习积极性不高。

我校信计专业学生普遍对c++程序设计课程不够重视, 主要是学生对该专业的学科因果关系不是很了解, 没有深刻感到C++语言课程对他们专业与学习与工作的重要性;其次是有部分学生本身对与计算机相关的专业不感兴趣, 没有认真学习的动力;同时, 当程序出现错误时, 又不能根据习惯思维很快找出错误原因修改程序。因此, 学生学习C++语言的积极性不高。

2. 实验内容没有关注学生个性化的需求。

高校学生的个性差异有不断扩大趋势, 但是整齐划一的教学要求与目标不能适应学生的个性差异。特别是像我校这类特点比较鲜明的普通院校, 这个问题更加突出。不同学生的基础知识和能力存在较大差异, 那么同样的教学内容、实验任务往往只照顾到中等及以上的学生, 从而导致尖子生因在实验课上都得不到满足的现象而缺乏兴趣, 后进生因跟不上教学进度而失去学习信心。

3. 只注重个人表现, 忽略团队合作。

在现有教学环境下, C++实验教学中学生之间、师生之间关于编程经验与心得交流比较少, 学生能学会自己解决编程的相关问题, 但是没有学会怎样与他人沟通与合作, 给学生就业和工作带来严重不利。在科技高速发展的今天, 大部分科技成果都是团队合作完成。

4. 实验教学与理论教学脱节。

我院信计专业C++程序设计理论教学的进度相对比较慢, 而且实验内容是以一个相对比较完整的体系为主, 因此, 实验教学时就会存在该实验内容需要掌握的理论知识点还没有讲授的情况, 或者实验教学需掌握的知识点, 理论教学早在几周前已经讲授完毕。这两种情况都不利于学生掌握C++语言程序设计。

5. 实验成绩评价制度评价单一。

我院在对C++程序设计进行考试时, 按照“6+2+2”的模式, 即期末笔试考试成绩60%, 实验成绩20%, 平时成绩20%, 导致大多数同学只注重最终考试的卷面成绩[2]。

三、改进C++语言实验教学的方法与措施

1. 激发学生主动学习C++程序设计的积极性。

要使学生主动学好C++程序设计, 关键是要激发学生学习的兴趣与动力。首先是加强对学生的专业教育, 使学生了解C++程序设计这门课程对于信息与计算科学专业的重要性, 并利用师兄师姐在IT行业的就业实例让学生感受到学好C++程序设计有好的就业前景, 因而让学生明白掌握一门编程语言对于信计专业的学生是非常有必要的, 同时编程语言是人类智慧的结晶, 通过对编程语言的学习和应用, 可以建立良好的逻辑思维和培养好的计算能力[3]。其次, 可以在实验教学中设置一些与实际相联系的趣味性题目, 如在讲解分支与循环结构时, 可以将有趣的"百鸡问题"、"水仙花数"等问题作为实验内容, 当讲解数组的时, 可以将“猴子选大王问题”作为实验内容, 这样不仅激发学生编程的兴趣, 同时让学生体会编程的快乐。最后就是可以结合信息与计算科学专业的特点, 要求学生在实验教学课程中通过编程解决本专业已学课程中的相关问题, 让学生知道C++这门课程不是孤立的与无用的。

2. 分层设置实验内容, 合理分配实验任务。

(1) 根据学生的能力水平分层设置实验内容。实验教学应该根据每一次实验课时需要掌握的知识点, 有侧重、有计划、由浅入深地准备实验内容。但是由于每个学生学习C++语言的能力和应用C++语言编程的能力是不同的, 有的学生在高中时期就已经开始学习利用C语言编程, 有一定的编程能力, 但大部分学生才开始接触编程语言, 有的学生善于学习理论知识, 有的学生又强于实践, 因而在实验教学的过程中要根据学生的实际情况分配适宜的实验任务。对于基础较差、应用能力弱的学生, 分配较容易的基础题, 可以稍低于实验大纲要求的实验任务, 以后才去完成较难内容;对于大多数中间层次的学生, 他们基础较好、应用能力较强, 可以分配难度适中的实验内容, 可以与实验大纲要求相当或稍高于实验大纲的要求;对于理论知识掌握扎实, 且实际编程能力强的学生, 可以在实验教学要求的基础上, 增强实验内容的难度和广度。这样既有利于学生再有限的课时内完成相应的实验任务, 让每个学生在应用C++语言的过程中体会成功的乐趣, 因而促进了全体学生C++语言编程能力的提高, 又能挖掘出小部分编程能力强的学生。 (2) 根据学生的就业意向设置实验内容。根据毕业生就业后是否应用计算机高级语言编程进行分类, 我校信息与计算科学专业的毕业去向主要分为三类:IT、读计算数学相关专业研究生与工作、其他。对于第三类学生, 只要他们能够完成相当于实验大纲要求的实验任务就可以。对于有志于计算数学的学生来说, 数值计算的算法设计与实现是他们需要培养的能力, 因而可以适当地在实验内容中加入与数值计算相关的实验内容, 如在学习运用选择与循环结构进行编程时, 可以将线性代数中矩阵的运算、逆矩阵的计算、一组向量的正交单位化过程等作为实验内容, 这样既能培养学生运用C++编程解决数值计算方面问题的能力, 又能让学生体会用C++解决比较困难问题的喜悦。对于有志于从事IT行业的学生, 要求更高, 不但要有数值计算算法设计与实现的能力, 更需要有非数值计算算法设计与实现的能力, 因而在实验内容中既要有数值计算的相关内容, 还应当有更多的非为数值计算算法实现的内容, 可以设置一些难度相对比较大的实验任务, 完成此类实验也就要多个学生相互协作完成, 这样既能培养学生用C++语言解决实际生活问题的能力, 又能使学生学会如何在一个团队中分工协作完成任务。 (3) 强化C++实验教学过程中的指导与管理。实验前的准备。要每次实验结束前, 将下次实验需要掌握的知识点列出, 要求学生课后认真查找相关资料进行学习, 并可以给出一些参考案例, 督促学生自学这些案例。通过学生实验前的充分准备, 既能提高实验的效率与效能, 又能提高学生完成实验的信心。

实验中的交流。在实验进行过程中, 对实验现场进行张弛有度的控制, 对不认真做实验的学生进行督促, 学生相互讨论实验中问题与解决的方案要予以鼓励并积极参与。对学生在实验中遇到问题, 要与学生一起分析出现问题的原因以及这类问题的解决方法, 对于普遍出现的问题要及时记录并统一讲解, 在实验中出现的不一样的算法思想、编程方法也要及时记录, 并作为学生最终实验成绩的一部分。

实验结束前的总结。根据在实验过程中记录的实验情况, 对普遍出现的问题要与好的算法与编程思维做统一讲解, 并对实验能力有提高的学生给予鼓励和表扬。要求每位学生将本次实验过程的相关材料保存与记录, 为课后撰写实验报告做好充分准备。

4. 建立多方位实验成绩的评价体系。

按照C++程序设计的教学大纲要求, 该门课程是必须考试 (笔试) , 实验可以进行上机考试也可以根据学生上实验课的情况与实验报告给出实验分数。如何科学地考核学生实验成绩, 是一项非常重要的工作, 实验考核不是目的, 而是为了更好地促进学生学, 是为检验学生学习的效果, 可以采取多样化手段考核学生实验成绩。 (1) 将整个实验过程纳入实验考核过程。 (2) 期末上机考试题型可以根据学生的实际能力等设置基础题与发挥题两部分, 其中基础试题要求所有学生都要完成, 发挥题学生根据自己的兴趣和水平选做。成绩评定标准为做完基础题的实验考核分数70分左右, 老师再根据发挥部分的完成情况给予学生在70分的基础上加分。 (3) 分组实验课程设计考核办法。学生3人一组自由组合, 根据老师给出的实验课程设计题目进行课程设计, 根据课程设计情况给出实验成绩分数。

四、结论

C++实验教学在培养信息与计算科学专业学生程序设计思维能力的过程中起着至关重要的作用, 实际上在C++语言实验教学过程中要注意的问题还有很多, 只有在教学中不断探索更符合实际的教学方法, 以具体的实际应用为教学导向[3,4], 才能取得良好的教学效果。

参考文献

[1]包贵鑫, 向红波.C语言教学研究和实践[J].大众科技, 2006, (6) :117.

[2]莫春俊, 韩素娥.C语言实验教学探讨——实例教学[J].福建电脑, 2004, (7) :45.

上一篇:白酒营销规划方案下一篇:护士资格证考试资格