《VisualC语言》实验报告课件资料.docx
- 文档编号:28632145
- 上传时间:2023-07-19
- 格式:DOCX
- 页数:28
- 大小:401.65KB
《VisualC语言》实验报告课件资料.docx
《《VisualC语言》实验报告课件资料.docx》由会员分享,可在线阅读,更多相关《《VisualC语言》实验报告课件资料.docx(28页珍藏版)》请在冰豆网上搜索。
《VisualC语言》实验报告课件资料
《VisualC++语言》实验报告
专业班级:
电气工程及其自动化
实验一熟悉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;//个位数字
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: "< } 调试要求: 1、在程序代码的main函数中设置断点,启动程序执行到断点处停止; 2、在函数narcissus调用处进入函数内部,跟踪函数执行的过程; 3、单步执行程序,观察各个变量值的变化情况; 4、单步执行若干步后,跳出函数体,回到main函数。 三、实验要求 (1)观察三种项目类型对应的程序特点,做出简要说明; (2)列出C++程序清单,以及程序的运行结果; (3)记录调试过程中变量值的变化情况; (4)在VisualC++6.0中如何进行程序的跟踪调试; (5)总结实验的心得体会,实验中遇到的困难以及解决的方法等。 四、实验步骤 1、观察三种项目类型对应的程序特点,做出简要说明; 三者都是工作在32位Windows环境下的程序。 (1)Win32ConsoleApplication创建Win32控制台应用程序 Win32ConsoleApplication(win32控制台应用程序)往往是像MS-DOS窗口(XP中叫命令提示符)的样子出现,我们得用键盘输入各种命令来使用它,它与纯dos程序区别是: 它是32位的; 或者叫CUI(CharacterUserInterface字符用户接口)。 console程序以main()为入口,不能使用win32API函数。 (2)Win32Application创建Win32应用程序 Win32Application是普通的常见的窗口应用程序,有的界面做得比较个性化,比如圆形的、不规则形状的……它们都是所谓的GUI(GraphicsUserInterface图形用户接口),我们可以通过鼠标点击来完成控制。 该系统环境是为开发windows应用程序所准备的,程序以WinMain()为入口,能够使用win32API函数。 (3)MFCAppWizard(exe)创建MFC可执行程序 MFC程序向导,微软为了减轻开发人员的工作负担,推出了MFC,MFC其实是一个框架,里面包含了200多个类,MFC比较复杂,MFC框架把基本的功能都实现了,我们只是需要把自己特殊的功能加到MFC里面, 比如你想建一个windows窗口,MFCAPPWIZARD下,MFC中自包含了CWnd串口类,但是win32application,就是要你自己写一个窗口类,才能用。 2、列出C++程序清单,以及程序的运行结果。 程序清单见实验内容; 程序运行结果为: 3、记录调试过程中变量值的变化情况。 程序调试时变量值的变化情况为: 4、在VisualC++6.0中如何进行程序的跟踪调试。 按F5键进入调试模式,通过使用F9来设置断点,然后可以用F10,F11来进行想要的单步调试或快速调试,用shift+F5退出调试模式。 在程序代码的main函数中设置断点,启动程序执行到断点处停止在函数narcissus调用处进入函数内部,跟踪函数执行的过程按F5然后按F11。 F9: 添加/去除断点F5: 进入调试模式F10: 跳步执行当前语句、函数 F11: 单步执行 5、实验中遇到的困难以及解决的方法。 在实验开始时将程序考到工作空间中,运行后一直有错误,错误显示如下: errorLNK2001: unresolvedexternalsymbol_WinMain@16 经检查是工程建错了,应该是建win32consoleapplication(32位控制台应用程序),而我建的是Win32Application,出现错误的原因是WinMain是Windows程序的入口,而我又写了一个main函数,编译的时候就报错了。 而如果工程名为MFCAppWizard(exe)时 错误为: fatalerrorC1010: unexpectedendoffilewhilelookingforprecompiledheaderdirectiveGeneratingCode.. 解决方案1: 右键单击项目工程中的cpp文件,在菜单Project->Settings->C/C++->PrecompileHeader,设置为第一项: Notusingprecompileheaders。 解决方案2: 在.cpp文件开头添加包含文件stdafx.h。 #include"stdafx.h" 5、实验总结 通过本次试验我熟悉了VisualC++6.0开发环境;掌握了在VisualC++6.0开发环境调试程序的方法;了解了Win32ConsoleApplication、Win32Application和MFCAppWizard(exe)三者的不同之处;同时进一步巩固了单步调试的步骤和方法,为以后的编程练习打下了基础。 补充内容: 程序调试 操作类型功能键对应菜单含义 Ctrl+F5Build|Runexe运行当前项目 F7Build|Buildexe建立可执行程序 F5Build|StartDebugging启动调试程序 F5Debug|Go继续运行 F11Debug|Stepinto进入函数体内部 Shift+F11Debug|Stepout从函数体内部运行出来 F10Debug|StepOver执行一行语句 F9设置/清除断点 Ctrl+F10Debug|Runtocursor运行到光标所在位置 Shift+Debug|QuickWatch快速查看变量或表达式的值 Shift+Debug|StopDebugging停止调试 实验二熟悉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;//窗口处理函数为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);//调用PostQuitMessage发出WM_QUIT消息 break; default: //默认时采用系统消息默认处理函数 returnDefWindowProc(hwnd,messgae,wParam,lParam); } return0; } 三、实验报告 (1)列出源程序清单,以及程序的运行结果; 程序清单见实验内容; 运行结果为: (2)总结Windows源程序的结构特点,说明各个主要程序段的作用; Windows源程序主要结构由WinMain和WinProc两个函数构成,其中WinMain是入口函数,函数名称和参数都是固定的,WndProc是窗口函数,其函数名称可由用户自行定义,但是参数是固定的。 WinMain函数的主要功能如下: (1)注册窗口类,建立窗口及执行其他必要的初始化工作。 (2)建立窗口及执行必要的初始化,包括窗口类的定义、注册、创建窗口实例、显示窗口四部分。 (3)消息循环,Windows应用程序的运行以消息为核心。 进入消息循环,根据接收的消息调用相应的处理过程,当消息循环检索到WM_QUIT时终止程序运行。 Windows的消息循环(I)Windows系统为应用程序保持一个消息队列。 (II)当有事件发生后,Windows先将激发事件翻译成一个Windows消息,然后再把这个消息加入到这个应用程序的消息队列中去。 (III)应用程序需要通过消息循环来接收这些消息。 常见的消息循环代码如下: MSGmsg;//定义MSG变量 while(GetMessage(&msg,NULL,0,0)) { TranslateMessage(&msg);//翻译消息 DispatchMessage(&msg);//分发消息 窗口函数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"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) { HDChdc;//设备句柄 HBRUSHhbrush;//定义画刷句柄 HPENhPen;//定义画笔句柄 HPENhPenOld;//定义画笔句柄 PAINTSTRUCTPtStr;//定义包含绘图信息的结构体变量 POINTpts[5]; pts[0].x=300;pts[0].y=20; pts[1].x=400;pts[1].y=20; pts[2].x=350;pts[2].y=120; pts[3].x=250;pts[3].y=120; pts[4].x=340;pts[4].y=50; POINTpts1[6]; pts1[0].x=760;pts1[0].y=200; pts1[1].x=900;pts1[1].y=200; pts1[2].x=970;pts1[2].y=321; pts1[3].x=900;pts1[3].y=442; pts1[4].x=760;pts1[4].y=442; pts1[5].x=690;pts1[5].y=321; switch(messgae) { caseWM_PAINT: hdc=BeginPaint(hWnd,&PtStr); SetMapMode(hdc,MM_ANISOTROPIC); hPenOld=(HPEN)GetStockObject(BLACK_PEN);//直线 hPen=CreatePen( PS_SOLID,3,RGB(255,255,0) ); hPenOld=(HPEN)SelectObject(hdc,hPen); MoveToEx(hdc,100,50,NULL); LineTo(hdc,250,300);//折线 hPen=CreatePen( PS_SOLID,3,RGB(255,0,255) ); hPenOld=(HPEN)SelectObject(hdc,hPen); Polyline(hdc,pts,4);//填充正方形 hPen=CreatePen( PS_SOLID,3,RGB(255,0,0) ); hPenOld=(HPEN)SelectObject(hdc,hPen); hbrush=(HBRUSH)GetStockObject(BLACK_BRUSH); SelectObject(hdc,hbrush); Rectangle(hdc,300,300,400,400);//填充圆 hPen=CreatePen( PS_SOLID,3,RGB(0,255,0) ); hPenOld=(HPEN)SelectObject(hdc,hPen); hbrush=(HBRUSH)GetStockObject(DKGRAY_BRUSH); SelectObject(hdc,hbrush); Ellipse(hdc,500,50,700,250);//填充正六边形 hPen=CreatePen( PS_SOLID,3,RGB(0,0,255) ); hPenOld=(HPEN)SelectObject(hdc,hPen); //hbrush=CreateSolidBrush(RGB(212,110,111)); hbrush=(HBRUSH)GetStockObject(LTGRAY_BRUSH); SelectObject(hdc,hbrush); Polygon(hdc,pts1,6); SelectObject(hdc,hPenOld); DeleteObject(hPen); DeleteObject(hbrush); EndPaint(hWnd,&PtStr); break; caseWM_DESTROY: PostQuitMessage(0); break; default: returnDefWindowProc(hWnd,messgae,wParam,lParam); } return0; } 显示结果为: (2)总结在Windows程序中绘制图形的基本操作步骤; 首先写好窗口的整体框架,类似于实验二,创建好窗口后,编写消息循环部分,处理刷新消息WM_PAINT和关闭窗口消息WM_DESTROY,WM_DESTROY消息按实验二。 在WM_PAINT消息中完成设计内容,画出各种波形。 HDChdc;//设备句柄 HBRUSHhbrush;//定义画刷句柄 HPENhPen;//定义画笔句柄 HPENhPenOld;//定义画笔句柄 PAINTSTRUCTPtStr;//定义包含绘图信息的结构体变量 然后设置点的位置,调用各种绘图函数,完成实验中所要求的内容。 具体的调用函数如下所示: 注意: 当用函数Polyline绘制折线、用函数Polygon绘制多边形两个函数需要先定义POINT数组存放点的坐标。 绘图函数表 函数 作用 BeginPaint 获取设备环境 SetMapMode 设置映像模式 GetStockObject 获取系统object CreatePen 创建画笔 CreateSolidBrush和CreateHatchBrush 创建画刷 SelectObject 选择object(画笔画刷) DeleteObject 删除object MoveToExLineTo 绘制线段 Polyline 绘制折线 Ellipse 绘制椭圆(圆) Rectangle 绘制正方形 Polygon 绘制多边形 Pie 绘制饼形 EndPaint 释放设备环境 (3)总结实验的心得体会,实验中遇到的困难以及解决的方法等。 1)编写的程序一般都是在消息循环中,所以可以在一个word文档中编写好窗口函数,然后平时编写程序时直接调用即可。 2)创建画笔后,必须调用SelectObject函数将其选入设备环境,当不再使用画笔时,需删除画笔,以避免占用内存。 调用函数GetStockObject获取Windows系统提供的画刷,选入输入设备环境。 创建画刷后,通过SelectObject将其选入设备环境。 删除画刷时,可用DelectObject删除画刷,释放内存。 遇
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VisualC 语言 VisualC 语言实验报告课件资料 VisualC 语言 实验 报告 课件 资料