C++实验01.C++程序设计上机指导-谭成予(5)

2019-04-16 15:45

1. 函数模板编程练习:数组求最大值

(1) 定义一个函数模板,其功能是从一维数组中找出取值最大元素,并返回。

(2) 请编写测试用的主程序,要求分别测试由char、int类型、double组成的一位数组,

找出取值最大元素值。

2. 类模板的编程练习

(1) 以下是一个安全数组的类模板定义,可避免C语言中数组下标越界的错误,请仔细

阅读此段代码。

1. // 定义用于表述安全数组的类模板 2. template 3. class SafeArray 4. {

5. private:

6. T ary[size]; 7. public: 8. //构造函数 9. SafeArray ( ); 10. //重载运算符[ ] 11. T & operator[ ](int i); 12. //输出数组元素 13. void Print(); 14. };

(2) 请补充完整安全数组类的成员函数的实现。

(3) 请编写测试用的主程序,测试你编写的安全数组的正确性。 3. vector向量的使用(目的:理解STL中的向量),输入以下程序并运行、分析结果。 1. // #include \如果使用预编译的头文件就包含这个头文件 2. #include // STL向量的头文件。这里没有\。 3. #include // 包含cout对象的头文件。 4. using namespace std;

5. //保证在程序中可以使用std命名空间中的成员。

6. char* szHW = \ //这是一个字符数组,以”\\0”结束。 7. int main(int argc, char* argv[]) 8. {

9. vector vec; //声明一个字符向量vector (STL中的数组) 10. //为字符数组定义一个游标iterator。 11. vector ::iterator vi; //初始化字符向量,对整个字符串进行循环, 12. //用来把数据填放到字符向量中,直到遇到”\\0”时结束。 13. char* cptr = szHW; // 将一个指针指向“Hello World”字符串 14. while (*cptr != '\\0') 15. { vec.push_back(*cptr); 16. cptr++; } 17. // push_back函数将数据放在向量的尾部。 18. // 将向量中的字符一个个地显示在控制台 19. for (vi=vec.begin(); vi!=vec.end(); vi++)

20. // 这是STL循环的规范化的开始——通常是 \, 而不是 \21. // 因为\在一些容器中没有定义。 22. // begin()返回向量起始元素的游标(iterator), 23. //end()返回向量末尾元素的游标(iterator)。

24. { cout << *vi; } // 使用运算符 “*” 将数据从游标指针中提取出来。 25. cout << endl; // 换行 26. cin.ignore(); 27. return 0; 28. }

4. 容器和游标的使用,输入以下程序,并调试、分析结果

19

1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35.

// #include \如果使用预编译的头文件就包含这个头文件

#pragma warning(disable:4786)

#include

#include

#include

using namespace std;

typedef map > INT2STRING;

int main() {

INT2STRING theMap;

INT2STRING::iterator theIterator;

string theString = \

int index;

theMap.insert(INT2STRING::value_type(0, \

theMap.insert(INT2STRING::value_type(1, \

theMap.insert(INT2STRING::value_type(2, \

theMap.insert(INT2STRING::value_type(3, \

theMap.insert(INT2STRING::value_type(4, \

theMap.insert(INT2STRING::value_type(5, \

theMap.insert(INT2STRING::value_type(6, \

theMap.insert(INT2STRING::value_type(7, \

theMap.insert(INT2STRING::value_type(8, \

theMap.insert(INT2STRING::value_type(9, \

for (;;) {

cout << \

cin >> theString;

if(theString == \ for(index = 0; index < theString.length(); index++)

{ theIterator = theMap.find(theString[index] - '0');

if(theIterator != theMap.end() ) cout << (*theIterator).second << \

else cout << \

} cout << endl; }

cin.ignore();

return 0; }

上机指导6 windows编程之一,可视化编程:MFC的编

程练习

目的和要求:

1. 熟练掌握AppWizard的使用方法。 2. 了解消息映射的概念和操作方法。 3. 学会查看和编辑代码。

4. 开始掌握窗体、控件、事件、视图和文档的使用方法。 内容和步骤:

1. 对话框程序编程练习:简易计算器程序

请用对话框模式编程实现两个数据的加减乘运算。

(1) 请参照“03-C++程序设计课内上机参考资料\\03-简易计算器程序-一个简单的对话框

应用程序-MFC使用入门-上机范例参考.ppt”里面介绍的步骤,完成简易计算器程序的可视化编程的以下步骤:

20

a) 创建简易计算器的对话框MFC应用程序;

b) 修改项目界面——添加输入操作数、运算符、计算按钮、结果显示等相关控件; c) 为上述控件关联变量; d) 为消息事件编程;

(2) 调试你编写的简易计算器程序;

(3) 范例程序代码参见“00-C++课内实验范例程序\\[C++范例-VC2005]范例002 加减运

算-简单的基于对话框的MFC范例程序.rar”(仅供参考)。

2. SDI编程练习之一:文本编辑器 (1) 请参照“03-C++程序设计课内上机参考资料\\04-SDI模式下的文本编辑程序+MFC入

门-创建MFC应用程序.ppt”里面的介绍,不写一行代码,采用SDI模式实现文本编辑器。

(2) 调试运行编辑好的文本编辑器程序。

(3) 请仔细阅读此文档后半部分的说明,为接下来的练习做以下准备:

a) 理解消息机制的基本概念;

b) 开始尝试使用“Windows消息监测工具Spy++”调试你的程序,。 3. 鼠标绘图程序练习

(1) 练习之一,MFC创建:创建鼠标绘图MFC程序

a) 请参考“03-C++程序设计课内上机参考资料\\05-鼠标绘图程序练习之一——SDI模式下的鼠标绘图程序-开始MFC编程之旅.ppt”介绍的步骤,创建SDI模式下的鼠标绘图程序框架。

b) 修改项目界面——修改标题和菜单。 c) 为程序编写源代码。 d) 编译Release版本。

(2) 练习之二,菜单和工具栏:为鼠标绘图程序添加菜单和工具栏

a) 请参考“03-C++程序设计课内上机参考资料\\06-鼠标绘图程序练习之二——处理菜单和工具栏-为鼠标绘图程序添加菜单和工具栏.ppt”介绍的步骤,为刚才创建的鼠标绘图程序添加菜单和工具栏。 b) 为菜单消息添加处理程序。 c) 添加工具栏按钮。

(3) 练习之三,消息事件编程:扩充鼠标绘图程序的功能,为鼠标消息编程

a) 请参考“03-C++程序设计课内上机参考资料\\07-鼠标绘图程序练习之三——在窗口中绘图—对鼠标消息编程-扩充Sketche功能.ppt”介绍的步骤,为鼠标绘图程序的鼠标消息进行绘图编程。

b) 请在上机前预习此讲义内容,以初步理解Windows绘图的基本知识。

(4) 练习之四,文档和视图:扩充鼠标绘图程序的功能,完成图形绘制和数据存储编程

a) 请参考“03-C++程序设计课内上机参考资料\\08-鼠标绘图程序练习之四——创建文档和改进视图-完成绘图编程和数据存储编程.ppt”里面介绍的步骤,完成图形绘制和数据存储的编程。

b) 请在上机前预习此讲义内容,以初步了解集合类等基本概念。

(5) 练习之五,对话框和控件:为鼠标绘图程序添加线宽等图形参数设置对话框,并添

加第五种元素——文本

a) 请参考“03-C++程序设计课内上机参考资料\\09-鼠标绘图程序练习之五——对话框和控件——线宽等图形参数设置,绘图上添加文本等相关编程.ppt”介绍的步骤,实现以下的编程:

21

i. 设置线宽 ii. 设置显示比例 iii. 添加第五种元素:文本 b) 调试你的程序

(6) 练习之六,文档编程:为鼠标绘图程序增加“文档保存和打开、打印及预览、文本

移动”等功能。

a) 请参考“03-C++程序设计课内上机参考资料\\10-鼠标绘图程序练习之六——存储和打印文档——文档保存和打开、打印及预览、文本移动.ppt”介绍的步骤,为鼠标绘图程序添加以下功能: i. 文档保存和打开 ii. 打印及预览 iii. 文本移动 b) 调试你的程序

(7) 以下是鼠标绘图程序的范例代码(仅供参考)

a) 00-C++课内实验范例程序\\[C++范例-VC2005]范例006 最简单的鼠标绘图程序-SDI范例程序.rar

b) 01-范例程序\\[C++范例-VC2005]范例007 鼠标涂鸦-SDI范例带文档保存功能.rar c) 00-C++课内实验范例程序\\[C++范例-VC2005]范例008 绘图程序——MDI版本.rar

4. 编程与程序调试与测试练习:

(1) 请参考“01-范例程序\\[C++范例-VC2005]范例008 绘图程序——MDI版本.rar

,将上面完成的鼠标绘图程序修改为MDI版本。

(2) 请修改文本编辑器项目,为其设置中英文双语菜单。

a) 在其“视图”菜单中添加一个菜单项“英文”;单击此菜单项将显示英文菜单 b) 创建新的菜单资源,该菜单为系统自动创建的IDR_MAINFRAME的英文版本,然

后在其“View”中增加“Chinese”菜单项,单击此菜单项将显示用来的中文菜单 c) 提示1:菜单项ID号相同表示需要处理的事件处理函数相同 d) 提示2:英文菜单中的内容可以从中文菜单中复制过去

e) 提示3:1和2步骤中添加的两个菜单项对应ID号应该相同 f) 提示4:菜单属于主窗口,即CMainFrame类 g) 提示5,需要修改的内容:

h) CMainFrame类定义与中英文两个菜单对应的变量成员(菜单类CMenu),以及目

前正在使用的菜单标志变量

i) 修改CMainFrame类的OnCreate函数,初始化并保存菜单资源

j) 为1和2步骤中添加的两个菜单项(中英文菜单切换)添加事件处理函数:响应不

同的菜单设置要求

k) 在工具栏中为1和2步骤中添加的两个菜单项增加相应工具按钮

(3) 运行上述修改的两个应用程序,并用Spy++程序监测其消息处理情况。

上机指导7 windows编程之二,组件编程:DLL编写

目的和要求:

1. 掌握Win32DLL的编写和调用方法。 2. 掌握MFC常规DLL的编写和调用方法。

22

3. 掌握MFC扩展DLL的编写和调用方法。 4. 掌握COM组件的编写和调用方法。 内容和步骤:

1. Win32DLL编写练习:读取系统时间

(1) 创建Wn32DLL项目,其功能是获取系统时间。创建步骤如下:

a) 新建Win32项目,项目名称“SysTime”; b) 在下图中,选择应用程序类别“DLL”;

选择附加选项“导出符号” ,将产生一个详细的项目,其中包含DllMain()、导出符号和实例代码,通常情况下,选择此选项。

c) 此时,你可以在项目中看到以下的文件: i. SysTime.cpp,这是主DLL 源文件 ii. StdAfx.h,、StdAfx.cpp,这些文件用于生成名为SysTime.pch 的预编译头(PCH)

文件和名为StdAfx.obj 的预编译类型文件。

iii. SysTime.h

d) 在SysTime.h中添加以下的声明(获取系统时间的函数声明):

SYSTIME_API void GetTime(SYSTEMTIME* lpSystemTime); e) 在 SysTime.cpp 源文件中添加GetTime函数的定义代码:

SYSTIME_API void GetTime(SYSTEMTIME* lpSystemTime) { GetLocalTime( lpSystemTime ); }

f) 编译和链接程序,你会在项目的debug文件夹中发现SysTime.dll和SysTime.lib这

两个文件。

(2) 创建使用Win32 DLL的测试项目,创建步骤如下:

a) 创建如下图所示的对话框应用程序SysTimeApplication;

23


C++实验01.C++程序设计上机指导-谭成予(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:资本预算

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: