中国石油大学华东Vc++实验程序.docx
- 文档编号:9977801
- 上传时间:2023-02-07
- 格式:DOCX
- 页数:54
- 大小:252.96KB
中国石油大学华东Vc++实验程序.docx
《中国石油大学华东Vc++实验程序.docx》由会员分享,可在线阅读,更多相关《中国石油大学华东Vc++实验程序.docx(54页珍藏版)》请在冰豆网上搜索。
中国石油大学华东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函数。 三、实验报告 (1)观察三种项目类型对应的程序特点,做出简要说明; API是Windows系统与Windows应用程序之间的标准程序接口,Windows应用程序可以利用大量的标准API函数调用系统功能。 MFC库中包含用来开发C++应用程序和Windows应用程序的一组类。 这些类封装了大部分的WindowsAPI,用来表示窗口、对话框、设备上下文。 公共GDI对象如画笔、调色板、控制框和其他标Win部件。 (2)列出C++程序清单,以及程序的运行结果; (2)记录调试过程中变量值的变化情况; 变量 1 2 3 4 …… 154 Count 0 0 0 0 …… 1 x 100 101 102 103 …… 153 X1 1 1 1 1 …… 1 X2 0 0 0 0 …… 5 X20 0 1 2 3 …… 53 X3 0 1 2 3 …… 3 (4)在VisualC++6.0中如何进行程序的跟踪调试; 在程序代码的main函数中按F9设置断点,按F5启动程序执行到断点处停止; 在函数narcissus调用处按F11进入函数内部,按F10单步执行函数,跟踪函数执行的过程,观察各个变量值的变化情况; 单步执行若干步后,按Shift+F11跳出函数体,回到main函数,再次按F9可消除断点。 (5)总结实验的心得体会,实验中遇到的困难以及解决的方法等。 此次为Visual C++的首次实验,我熟悉了vc++6.0的开发环境。 对Win32ConsoleApplication、Win32Application和MFCAppWizard(exe)项目类型程序的特点有了初步了解。 同时,掌握了程序的跟踪,调试,设置断点等基本的程序调试方法。 实验二熟悉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"; 5 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。 列出源程序清单及运行结果 2.Windows源程序的结果特点,说明各个主要程序段的作用; 结构特点: Windows源程序主要结构由WinMain和WinProc两个函数构成,其中WinMain是入口函数,函数名称和参数都是固定的,WndProc是窗口函数,其函数名称可由用户自行定义,但是参数是固定的。 WinMain函数是所有Windows应用程序的入口,类似C语言中的Main函数,其功能是完成一系列的定义和初始化工作,并产生消息循环。 消息循环是整个程序运行的核心。 窗口函数WndProc定义了应用程序对接收到的不同消息的响应,包含了对各种可能接收到的消息的处理过程。 WndProc函数由一个或多个switch语句组成,每一条case语句对应一种消息,当应用程序接收到一个消息时,相应的case语句被激活并执行相应的响应程序模块。 3.总结实验的心得体会,实验中遇到的困难以及解决的方法等。 通过本次实验,我更加熟悉了VisualC++6.0开发环境,对Windows系统事件驱动的运行机制以及Windows应用程序源程序基本结构有了基本了解。 将课堂学到的东西与实际的实验结合起来,巩固了自己的知识。 实验三Windows图形绘制编程实验 一、实验目的 (1)熟悉VisualC++6.0开发环境; (2)掌握Windows图形输出的方法; (3)理解设备环境、画笔、画刷的概念,掌握常用的绘图函数。 二、实验内容 请编写程序,要求如下: (1)定义一支黄色画笔,绘制一条线段; (1)定义一支紫色画笔,绘制一条多段线; (3)定义一支红色画笔,绘制一个正方形,并用适当的画刷填充图形内部; (4)定义一支绿色画笔,绘制一个圆,并用适当的画刷填充图形内部; (5)定义一支蓝色画笔,绘制一个正六边形,并用适当的画刷填充图形内部。 三、实验报告 (1)列出图形绘制程序代码清单; #include #include LRESULTCALLBACKWndProc(HWND,UINT,WPARAM,LPARAM);//窗口函数说明 //---------------以下初始化窗口类---------------------- intWINAPIWinMain(HINSTANCEhInstance, HINSTANCEhPrevInst,LPSTRlpszCmdLine,intnCmdShow) { HWNDhwnd; MSGMsg; WNDCLASSwndclass; //LPCWSTRlpszClassName=_T("窗口");//窗口类名 //LPCWSTRlpszTitle=L"My_Windows";//窗口标题名 charlpszClassName[]="窗口";//窗口类名 charlpszTitle[]="基本绘图练习";//窗口标题名 //窗口类的定义 wndclass.style=0;//窗口类型为缺省类型 wndclass.lpfnWndProc=WndProc;//定义窗口处理函数 wndclass.cbClsExtra=0;//窗口类无扩展 wndclass.cbWndExtra=0;//窗口实例无扩展 wndclass.hInstance=hInstance;//当前实例句柄 wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION); //窗口的最小化图标为缺省图标 wndclass.hCursor=LoadCursor(NULL,IDC_ARROW); //窗口采用箭头光标 wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); //窗口背景为白色 wndclass.lpszMenuName=NULL;//窗口中无菜单 wndclass.lpszClassName=lpszClassName; //窗口类名为"窗口" //---------------以下进行窗口类的注册------- if(! RegisterClass(&wndclass))//如果注册失败则发出警告 {MessageBeep(0);returnFALSE;} //----------------创建窗口------------------- hwnd=CreateWindow ( //_T("Title"), lpszClassName,//窗口类名 lpszTitle,//窗口实例的标题名 WS_OVERLAPPEDWINDOW,//窗口的风格 CW_USEDEFAULT, CW_USEDEFAULT,//窗口左上角坐标为缺省值 CW_USEDEFAULT, CW_USEDEFAULT,//窗口的高和宽为缺省值 NULL,//此窗口无父窗口 NULL,//此窗口无主菜单 hInstance,//创建此窗口的应用程序的当前句柄 NULL//不使用该值 ); //---------------显示窗口---------------------- ShowWindow(hwnd,nCmdShow); //--------------绘制用户区--------------------- UpdateWindow(hwnd); //---------------消息循环---------------------- while(GetMessage(&Msg,NULL,0,0)) { TranslateMessage(&Msg); DispatchMessage(&Msg); } returnMsg.wParam;//消息循环结束即程序终止时将信息返回系统 } //窗口函数 LRESULTCALLBACKWndProc (HWNDhwnd, UINTmessage, WPARAMwParam, LPARAMlParam ) { HDChDC;//定义指向设备的句柄 HBRUSHhBrush;//定义指向画刷的句柄 HPENhPen;//定义指向画笔的句柄 PAINTSTRUCTPtStr;//定义指向包含绘图信息的结构变量 POINTpoints[6]; points[0].x=160; points[0].y=50; points[1].x=180; points[1].y=15; points[2].x=220; points[2].y=15; points[3].x=240; points[3].y=50; points[4].x=220; points[4].y=85; points[5].x=180; points[5].y=85; switch(message) { caseWM_PAINT: //处理绘图消息 hDC=BeginPaint(hwnd,&PtStr); SetMapMode(hDC,MM_ISOTROPIC);//设置映像模式 SetWindowExtEx(hDC,50,50,NULL); SetViewportExtEx(hDC,100,500,NULL); hPen=CreatePen(PS_SOLID,1,RGB(255,255,0)); SelectObject(hDC,hPen); MoveToEx(hDC,15,20,NULL); LineTo(hDC,110,20);//绘制直线 hPen=CreatePen(PS_SOLID,2,RGB(155,0,255)); SelectObject(hDC,hPen); MoveToEx(hDC,25,30,NULL); LineTo(hDC,120,30); LineTo(hDC,110,60); LineTo(hDC,150,40);//绘制多段线 hBrush=(HBRUSH)GetStockObject(DKGRAY_BRUSH);//深灰色刷 SelectObject(hDC,hBrush); hPen=CreatePen(PS_SOLID,2,RGB(255,0,0)); SelectObject(hDC,hPen); Rectangle(hDC,50,100,100,50);//绘制正方形 hPen=CreatePen(PS_SOLID,2,RGB(0,255,0)); SelectObject(hDC,hPen); hBrush=(HBRUSH)GetStockObject(LTGRAY_BRUSH);//亮灰色刷 SelectObject(hDC,hBrush);//选择画刷 Ellipse(hDC,100,100,160,160);//绘制圆 hPen=CreatePen(PS_SOLID,2,RGB(0,0,255)); SelectObject(hDC,hPen); hBrush=(HBRUSH)CreateSolidBrush(RGB(0,255,255)); SelectObject(hDC,hBrush); Polygon(hDC,points,6);//绘制正六边形 DeleteObject(hBrush); DeleteObject(hPen); EndPaint(hwnd,&PtStr);//结束绘图 return0; caseWM_DESTROY: PostQuitMessage(0); default: //缺省时采用系统消息缺省处理函数 returnDefWindowProc(hwnd,message,wParam,lParam); } return(0); } (2)总结在Windows程序中绘制图形的基本操作步骤; 1..获取设备环境: 获取设备环境是应用程序输出图形的先决条件,常用的两种方法是调用函数 BeginPaint或GetDC a、调用BeginPaint函数 应用程序响应WM_PAINT消息进行图形刷新时,主要通过调用BeginPaint函 数获取设备环境 PAINTSTRUCTps; hdc=BeginPaint(hwnd,&ps);//ps为PAINTSTRUCT类型结构 由BeginPaint函数获取的设备环境要用EndPaint函数释放 voidEndPaint(HWNDhwnd,PAINTSTRUCT&ps) b、调用GetDC函数 如果绘图工作并非由WM_PAINT消息驱动,则调用GetDC函数获取设备环境。 hdc=GetDC(hwnd); 由GetDC函数获取的设备环境必须用ReleaseDC函数释放 voidReleaseDC(HWNDhwnd); 2...选择绘图工具与颜色: (a)画笔的操作: 创建画笔;将画笔选入设备环境;删除画笔。 (b)画刷的创建与应用与画笔很相似,操作画刷也包括创建、选入设备环境和删除。 3..选择绘图函数进行绘图: 常见的绘图函数有: 绘制椭圆弧线的函数;绘制饼图,并用当前画刷进行填充的函数;绘制矩形,并用当前画刷进行填充的函数;绘制椭圆,并用当前画刷填充的函数;绘制多边形,并用当前画刷填充的函数等。 (3)总结实验的心得体会,实验中遇到的困难以及解决的方法等。 图形绘制需要我们熟悉函数作用及调用格式,刚开始时,我对于多段线及多边形绘制的参数选择遇到了困难,通过仔细的上网查询和搜寻资料,我终于得到了正确的坐标。 实验四鼠标和键盘编程实验 一、实验目的 (1)掌握键盘和鼠标的消息传递机制; (2)掌握在Windows程序中处理键盘和鼠标消息的方法; (3)掌握在VisualC++的程序调试方法。 二、实验内容 请编写程序,要求如下: (1)在屏幕上绘制一个矩形,并将举行内部划分成4个矩形区域; (2)在矩形内移动鼠标时,在上面划分的4个区域中显示不同的光标,并在屏 幕左上角显示光标坐标; (3)当用户按下SHIFT和CTRL键并移动鼠标时,显示一个消息框,提示用户 按下的是哪个键。 三、实验报告 (1)列出消息处理程序代码清单; #include"windows.h"//包含应用程序中所需的数据类型和数据结构的定义 #include LRESULTCALLBACKWndProc(HWNDhwnd,UINTmessgae,WPARAMwParam,LPARAMlParam);//窗口函数说明 //---------------以下初始化窗口类---------------------- intWINAPIWinMain(HINSTANCEhThisInst,HINSTANCEhPrevInst,LPSTRlpszCdLine,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";//窗口类名为"DemoClass" //---------------以下进行窗口类的注册------- if(! RegisterClass(&ws))//如果注册失败则发出警告 { return-1; } //----------------创建窗口------------------- hWnd=CreateWindow( "DemoClass",//窗口类名 "鼠标消息编程",//窗口实例的标题名 WS_OVERLAPPEDWINDOW,//窗口的风格 100,200,640,480, NULL,//此窗口无父窗口 NULL,//此窗口无主菜单 hThisInst,//创建此窗口的应用程序的当前句柄 NULL//不使用该值 ); //---------------显示窗口---------------------- ShowWindow(hWnd,nCmdShow); /--------------绘制用户区--------------------- UpdateWindow(hWnd); //---------------消息循环---------------------- w
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 中国 石油大学 华东 Vc 实验 程序