中国石油大学华东VC++实验报告.docx
- 文档编号:3292901
- 上传时间:2022-11-21
- 格式:DOCX
- 页数:69
- 大小:794.19KB
中国石油大学华东VC++实验报告.docx
《中国石油大学华东VC++实验报告.docx》由会员分享,可在线阅读,更多相关《中国石油大学华东VC++实验报告.docx(69页珍藏版)》请在冰豆网上搜索。
中国石油大学华东VC++实验报告
实验一熟悉VisualC++程序调试方法
一、实验目的
(1)熟悉VisualC++6.0开发环境;
(2)掌握在VisualC++6.0开发环境调试程序的方法。
二、实验内容
(1)创建三个项目,项目类型分别为:
Win32ConsoleApplication、Win32
Application和MFCAppWizard(exe),分别编译运行各个程序,观察各种项目类型
程序的特点。
(2)创建一个Win32ConsoleApplication类型的项目,输入下面的代码,按
照要求对代码进行调试。
说明:
下面的程序求100~1000以内的水仙花数,所谓水仙花数就是一个三位
的整数,其个位数字、十位数字和百位数字的立方和等于该数本身的值,则这个数
称为水仙花数。
#include"iostream.h"
#include"math.h"
voidnarcissus();//求水仙花数
voidmain()
{
narcissus();
}
voidnarcissus()
{
intx1;//百位数字
intx20;//十位数字+个位数字
intx2;//十位数字
intx3;//个位数字
2
intcount=0;//找到的水仙花数的总数
for(intx=100;x<1000;x++)
{
x1=x/100;
x20=x%100;
x2=x20/10;
x3=x20%10;
if(x1*x1*x1+x2*x2*x2+x3*x3*x3==x)
{
count++;
cout<<"Onenarcissusnumberfound:
"< } } cout<<"Thetotalnumberofnarcissusnumbersis: "< } 调试要求: 在程序代码的main函数中设置断点,启动程序执行到断点处停止; 在函数narcissus调用处进入函数内部,跟踪函数执行的过程; 单步执行程序,观察各个变量值的变化情况; 单步执行若干步后,跳出函数体,回到main函数。 3、实验结果 1观察三种项目类型对应的程序特点,做出简要说明; Win32Application和Win32ConsoleApplication、MFCAPPWIZARD都是工作在32位Windows环境的程序。 Win32Application是普通的常见的窗口应用程序,是为你开发windows应用程序所准备的,程序以WinMain()为入口,#include 程序很复杂。 Win32ConsoleApplication(win32控制台应用程序)往往是像MS-DOS窗口(XP中叫命令提示符)的样子出现,我们得用键盘输入各种命令来使用它,它与纯dos程序区别是: 它是32位的;或者叫CUI(CharacterUserInterface字符用户接口)。 console程序以main()为入口,不能使用win32API函数。 程序很简单。 MFCAPPWIZARD: MFC程序向导,是为了减轻开发人员的工作负担,MFC其实是一个框架,里面包含了200多个类,MFC比较复杂,MFC框架把基本的功能都实现了,我们只是需要把特殊的功能加到MFC里面,比如想建一个windows窗口,MFCAPPWIZARD下,MFC中自包含了CWnd串口类,但是win32application,就是我们自己要写一个窗口类,才能用。 这个程序可以用来绘制窗口。 2列出C++程序清单,以及程序的运行结果; #include"iostream.h" #include"math.h" voidnarcissus();//求水仙花数 voidmain() { narcissus(); } voidnarcissus() { intx1;//百位数字 intx20;//十位数字+个位数字 intx2;//十位数字 intx3;//个位数字 2 intcount=0;//找到的水仙花数的总数 for(intx=100;x<1000;x++) { x1=x/100; x20=x%100; x2=x20/10; x3=x20%10; if(x1*x1*x1+x2*x2*x2+x3*x3*x3==x) { count++; cout<<"Onenarcissusnumberfound: "< } } cout<<"Thetotalnumberofnarcissusnumbersis: "< } 程序运行的结果如下: 3记录调试过程中变量值的变化情况; main函数中设置断点: main函数中设置断点后执行到断点处: 在内部函数的执行过程如下: 执行到countf赋值: 执行到For循环: 执行到X1: 执行到x20: 执行到X2: 执行到X3: 执行到if语句: For语句执行完: 再次执行For语句: 再次执行到X1: 以后将重复执行For循环。 最后到达main函数里面: 4在VisualC++6.0中如何进行程序的跟踪调试; 在VisualC++6.0中利用上述调试工具里的按钮以及设置断点,F11按钮进行程序的跟踪调试。 5总结实验的心得体会,实验中遇到的困难以及解决的方法等 通过这次的实验,我熟悉VisualC++6.0的开发环境,捡起了先前遗忘的关于VC++的相关知识。 知道了Win32ConsoleApplication、Win32Application和MFCAppWizard(exe)这三种项目类型对应的程序特点。 知道了如何利用VisualC++6.0进行程序的编写,错误的改正,掌握在VisualC++6.0开发环境调试程序的方法。 通过这次试验,我对程序的调试步骤有了更清楚的,更系统的认识。 VC编程对于我这个专业,很重要,上次学C++是没有很认真的去学习和掌握。 这次,我一定会好好的学习的,把上次没有学到的知识学回来,为以后的学习打下比较好的基础。 实验二熟悉Windows源程序基本结构 一、实验目的 (1)熟悉VisualC++6.0开发环境; (2)熟悉Windows系统事件驱动的运行机制; (3)熟悉Windows应用程序源程序基本结构; 二、实验内容 创建一个空白的Win32Application应用程序,建立相关文件,手工输入下列 代码,实现一个Windows窗口程序。 #include"windows.h" LRESULTCALLBACKWndProc(HWNDhwnd,UINTmessgae, WPARAMwParam,LPARAMlParam); intWINAPIWinMain(HINSTANCEhThisInst,HINSTANCEhPrevInst, LPSTRlpszCmdLine,intnCmdShow) { WNDCLASSws; HWNDhWnd; MSGmsg; ws.style=0; ws.lpfnWndProc=WndProc; ws.cbClsExtra=0; ws.cbWndExtra=0; ws.hInstance=hThisInst; ws.hIcon=LoadIcon(NULL,IDI_HAND); ws.hCursor=LoadCursor(NULL,IDC_CROSS); ws.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); ws.lpszMenuName=NULL; ws.lpszClassName="DemoClass"; if(! RegisterClass(&ws)) { return-1; } hWnd=CreateWindow("DemoClass","MyFirstWindowsProgram", WS_OVERLAPPEDWINDOW,100,200,640,480, NULL,NULL,hThisInst,NULL); ShowWindow(hWnd,nCmdShow); UpdateWindow(hWnd); while(GetMessage(&msg,NULL,0,0)) { TranslateMessage(&msg); DispatchMessage(&msg); } returnmsg.wParam; } LRESULTCALLBACKWndProc(HWNDhwnd,UINTmessgae, WPARAMwParam,LPARAMlParam) { switch(messgae) { caseWM_DESTROY: PostQuitMessage(0); break; default: returnDefWindowProc(hwnd,messgae,wParam,lParam); } return0; } 三、实验报告 (1)列出源程序清单,以及程序的运行结果; #include"windows.h" LRESULTCALLBACKWndProc(HWNDhwnd,UINTmessgae,WPARAMwParam,LPARAMlParam); //LRESULT处理消息产生的一个有符号值 //WndProc窗口过程扩充窗口函数 //UINT无符号整型 //WPARAM消息类型 //LPARAM传递参数 intWINAPIWinMain(HINSTANCEhThisInst,HINSTANCEhPrevInst,LPSTRlpszCmdLine,intnCmdShow) //WINAPI函数 //HINSTANCE标示当前实例句柄 //LPSTR字符串 { WNDCLASSws;//WNDCLASS窗口类 HWNDhWnd; MSGmsg; ws.style=0; ws.lpfnWndProc=WndProc; //WNDCLASSEX中最重要的成员莫过于lpfnWndProc了。 前缀lpfn表示该成员是一个指向函数的长指针 ws.cbClsExtra=0; //cbClsExtraSpecifiestheamountofextramemory,inbytes,thatWindowsshouldreservefortheclass. ws.cbWndExtra=0; //cbWndExtraSpecifiestheamountofextramemory,inbytes, //thatWindowsshouldreserveforeachwindowintheclass.懒得翻译了,自己看吧 ws.hInstance=hThisInst; ws.hIcon=LoadIcon(NULL,IDI_HAND); //LoadIcon图标//hIcon图标句柄//NULL空操作语句//IDI_HAND手形图标 ws.hCursor=LoadCursor(NULL,IDC_CROSS); //hCursor光标句柄 //LoadCursor该函数从一个与应用事例相关的可执行文件(EXE文件)中载入指定的光标资源 //IDC_CROSS十字光标 ws.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); //hbrBackground是主窗口背景色,调用CreateWindow时创建的客户区默认使用的就是窗口背景色 //HBRUSH画刷句柄//GetStockObject取得一个图形对象//WHITE_BRUSH白色背景 //通过函数来设置一个一个白色的背景,这里大家设置为NULL看看,会很有趣的 ws.lpszMenuName=NULL;//wndclass里的lpszMenuName的类型问题 ws.lpszClassName="DemoClass";//DemoClass试讲 if(! RegisterClass(&ws))//RegisterClass注册窗口类 { return-1; } hWnd=CreateWindow("DemoClass","MyFirstWindowsProgram",WS_OVERLAPPEDWINDOW,100,200,640,480,NULL,NULL,hThisInst,NULL); //WS_OVERLAPPEDWINDOW可以创建一个拥有各种窗口风格的窗体,包括标题,系统菜单,边框,最小化和最大化按钮等。 ShowWindow(hWnd,nCmdShow); //参数nCmdShow指定程序的窗口应该如何显示,例如最大化、最小化、隐藏等。 UpdateWindow(hWnd); while(GetMessage(&msg,NULL,0,0)) { TranslateMessage(&msg);//该函数将虚拟键消息转换为字符消息 DispatchMessage(&msg);//函数功能: 该函数分发一个消息给窗口程序。 } returnmsg.wParam; } LRESULTCALLBACKWndProc(HWNDhwnd,UINTmessgae,WPARAMwParam,LPARAMlParam) //自定义消息处理函数都要求返回LRESULT,如果返回值不需要处理,可直接返回0即可。 如果改消息需要返回特殊值, //就看程序的需要进行返回相应的值。 { switch(messgae) { caseWM_DESTROY: //在发送WM_QUIT消息时,要使用PostMessage发送,否则,窗口已经关闭,但任务管理器中进程还存在。 PostQuitMessage(0); //PostQuitMessage仅仅让消息循环退出,多数情况下消息循环退出后进程也该退出了。 //使用这种方式能让系统处理完所有的消息,并有机会释放各种资源。 break; default: returnDefWindowProc(hwnd,messgae,wParam,lParam); //函数功能: 该函数调用缺省的窗口过程来为应用程序没有处理的任何窗口消息提供缺省的处理。 //该函数确保每一个消息得到处理。 调用DefWindowProc函数时使用窗口过程接收的相同参数。 //函数原型: LRESULTDefWindowProc(HWNDhWnd,UINTMsg,WPARAMwParam,LPARAMIParam); } return0; } 程序运行结果如下: 下图为鼠标没有在框内的情况。 下图为鼠标指向框内的结果。 (2)总结Windows源程序的结构特点,说明各个主要程序段的作用; Windows源程序的结构特点: 图形界面,面向对象程序设计,事件驱动,高效的内存管理,设备独立性动态连接。 WINDOWS程序设计的特点: 传统的MS-DOS程序主要采用顺序的、关联的、过程驱动的程序设计方法。 一个程序是一系列预先定义好的操作序列的组合,它具有一定的开头、中间过程和结束。 程序直接控制程序事件和过程的顺序。 这样的程序设计方法是面向程序而不是面向用户的,交互性差,用户界面不够友好,因为它强迫用户按照某种不可更改的模式进行工作。 事件驱动程序设计是一种全新的程序设计方法,它不是由事件的顺序来控制,而是由事件的发生来控制,而这种事件的发生是随机的、不确定的,并没有预定的顺序,这样就允许程序的的用户用各种合理的顺序来安排程序的流程。 对于需要用户交互的应用程序来说,事件驱动的程序设计有着过程驱动方法无法替代的优点。 它是一种面向用户的程序设计方法,它在程序设计过程中除了完成所需功能之外,更多的考虑了用户可能的各种输入,并针对性的设计相应的处理程序。 它是一种“被动”式程序设计方法,程序开始运行时,处于等待用户输入事件。 各个主要程序段的作用: 主要程序的作用已在程序清单的注释中写出。 (3)总结实验的心得体会,实验中遇到的困难以及解决的方法等。 这次试验,程序跟第一次的试验程序相差很大。 第一次的程序是水鲜花的程序,用C语言编写的,能看明白。 而这一次的就不行了,真正的用到了老师上课讲的知识了。 很多固有的函数名,很多程序段,都看不明白,还得看看书,问问XX,自己理解。 老师上课讲了,自己也不太明白,上实验课,正好是自己理解和吸收课堂知识的时候。 这个时间我要好好利用,争取理解好老师讲的知识。 其实,还是有很多的程序不太明白,还得自己问老师,问同学。 VC++说实话,跟C++完全不一样,这是我的感觉,因为,很多的函数名,符号,都跟C++不一样,上课,听的头有些大。 但是,我会好好理解的,因为这门课对我以后的编程序很重要。 实验三Windows图形绘制编程实验 一、实验目的 (1)熟悉VisualC++6.0开发环境; (2)掌握Windows图形输出的方法; (3)理解设备环境、画笔、画刷的概念,掌握常用的绘图函数。 二、实验内容 请编写程序,要求如下: (1)定义一支黄色画笔,绘制一条线段; (1)定义一支紫色画笔,绘制一条多段线; (3)定义一支红色画笔,绘制一个正方形,并用适当的画刷填充图形内部; (4)定义一支绿色画笔,绘制一个圆,并用适当的画刷填充图形内部; (5)定义一支蓝色画笔,绘制一个正六边形,并用适当的画刷填充图形内部。 三、实验报告 (1)列出图形绘制程序代码清单; #include"windows.h" #include"stdio.h" #include"string.h" #include"stdlib.h" #include"math.h" LRESULTCALLBACKWndProc(HWNDhwnd,UINTmessgae,WPARAMwParam,LPARAMlParam); //LRESULT处理消息产生的一个有符号值WndProc窗口函数 intWINAPIWinMain(HINSTANCEhThisInst,HINSTANCEhPrevInst,LPSTRlpszCmdLine,intnCmdShow) //WinMain程序进入点 { WNDCLASSws; HWNDhWnd; MSGmsg; ws.style=0; ws.lpfnWndProc=WndProc; ws.cbClsExtra=0; ws.cbWndExtra=0; ws.hInstance=hThisInst; ws.hIcon=LoadIcon(NULL,IDI_HAND); ws.hCursor=LoadCursor(NULL,IDC_CROSS); ws.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); ws.lpszMenuName=NULL; ws.lpszClassName="DemoClass"; if(! RegisterClass(&ws))//RegisterClass注册窗口类 { return-1; } hWnd=CreateWindow("DemoClass","Windows图形绘制编程实验",WS_OVERLAPPEDWINDOW,100,200,640,480,NULL,NULL,hThisInst,NULL); ShowWindow(hWnd,nCmdShow); UpdateWindow(hWnd); while(GetMessage(&msg,NULL,0,0)) { TranslateMessage(&msg); //从消息队列收到消息后,消息被传递给TanslateMessage,在那里进行一些处理,使消息更易于处理。 DispatchMessage(&msg); //先向应用程序发消息,当应用程序接到消息后,然后它会把消息通过DispatchMessage(&msg) //传递给窗口函数wndproc,窗口函数就会对照事先由程序编写好的消息对照表调用对应的方法来处理消息。 } returnmsg.wParam; } LRESULTCALLBACKWndProc(HWNDhwnd,UINTmessgae,WPARAMwParam,LPARAMlParam) { HDChdc; PAINTSTRUCTps; HPENhPen; HBRUSHhbrush; POINTpt[]={{500,300},{600,180},{500,100}}; POINTpm[]={{100,400},{200,400},{250,313.4},{200,226.8},{100,226.8},{50,313.4}}; switch(messgae) { caseWM_PAINT: hdc=BeginPaint(hwnd,&ps); //直线 SetMapMode(hdc,MM_ANISOTROPIC);//SetMapMode指定设备环境的映射方式 hPen=CreatePen(PS_SOLID,4,RGB(255,255,0));//黄色画笔 SelectObject(hdc,hPen);//调用SelectObject函数将其选入设备环境 MoveToEx(hdc,15,15,NULL); LineTo(hdc,200,15); //多线段 hPen=CreatePen(PS_SOLID,4,RGB(255,0,255));//紫色画笔 SelectObject(hdc,hPen); Polyline(hdc,pt,3); DeleteObject(hPen);//不再使用当前画笔时,需删除画笔,以免占内存DeleteObject(hP); //正方形 hPen=CreatePen(PS_SOLID,4,RGB(255,0,0));//红色画笔 SelectObject(hdc,hPen); hbrush=(HBRUSH)GetStockObject(LTGRAY_BRUSH);//画刷 Sel
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 中国 石油大学 华东 VC 实验 报告