当前位置:文档之家› VC++实验报告1

VC++实验报告1

VC++实验报告1
VC++实验报告1

实验一、HelloWorld在VC上的实现

姓名:郭殷蓉学号:E10700102 班级:10数媒1班

1.1实验目的

●掌握Windows程序基本的运行原理。

●学会编写简单的Windows程序。

1.2实验平台

●Windows XP professional操作系统。

●VC6.0集成开发环境。

1.3实验内容

●用Windows API(SDK)实现图形化HellowWorld程序。

●用MFC类库实现图形化HellowWorld程序。

1.4实验原理

●Windows操作介绍

Windows是一种基于图形界面的多任务操作系统。对于普通用户来说,Windows图形化界面友好、操作简单,用户不需要花费长时间学习如何使用计算机和新程序,因为所有的Windows应用程序都具相近的外观和感觉;对于程序员来说,标准化的图形用户界面来自于Windows构造菜单和对话框的内置程序,这些工作由Windows处理,与应用程序无关,使程序员可以编写出易于用户操作的程序。

●Windows编程模型

Windows程序采用如下图所示的事件驱动编程模型,应用程序通过处理操作系统发送出来的消息来响应事件。消息处理是所有Windows应用程序的的核心。Windows程序的进入点是WinMain函数,但大多时候操作是在成为窗口过程的函数中进行的。窗口过程函数处理发送给窗口的消息。WinMain创建该窗口并进入消息循环,即获取消息或将其调度给窗口过程。消息被检索之前处于消息队列中等待。

Windows定义了成百上千个不同的消息类型。大多数消息的开始字符为“WM”并带有下划线;

操作系统是通过消息机制(Message)来实现将事件传递给应用程序的。操作系统将每个事件都包装成一个称为消息的结构体MSG来传递给应用程序(详见MSDN)。

操作系统把它所能够完成的功能以函数的形式提供给应用程序使用,应用程序对这些函数的调用就叫做系统调用,这些函数的集合就是Windows操作系统提供给应

用程序编程的接口(Application Programming Interface),简称Windows API(C函数)。

MFC简介

MFC(Microsoft Foundation Class)是微软公司提供的专门用于Windows编程的基础类库,它大约包含了200个C++类,这些类库实际上是对Windows API的一次C++的封装。这些类可以处理许多标准的Windows编程任务。MFC框架结构如下图所示:

1.CObject类

CObject类是MFC类库的根类,它几乎描述了MFC类的一些公共特性。

https://www.doczj.com/doc/0312904817.html,mdTarget类

CCmdTarget类是MFC的消息映射基础类,MFC为该类设计了许多的成员变量及函数以解决消息映射的问题。派生于CCmdTarget的类可用于处理当用户选择菜单或单击按钮等操作时所产生的Command消息。

3.CWinThread类

CWinThread类是MFC中用于封装线程的类,它的成员函数可以使MFC应用程序创建和管理包括UI及工作者在内的线程。每个MFC应用程序都至少应该使用一个从CWinThread派生的类,应用程序类CWinApp就是一个代表。

4.CWinApp类

CWinApp类通常代表应用程序自己,它封装了应用程序的初始化、运行及终止的过程。基于框架的应用程序必须有且仅有一个派生于CWinApp的类的对象,并在完成窗口的创建工作之前执行对该对象的构造。

应用程序类的对象需要完成以下工作:

初始化应用程序。

建立文档模板结构。

循环检索消息队列中的消息并将这些消息发送到指定的地方。

执行应用程序退出时的清理工作。

5.CDocument类

CDocument类是在使用文档/视图结构的应用程序中文档对象的基类,它为应用程序的文档对象提供了基本的功能,包括新建、串行化数据等。

6.CWnd类

CWnd类是所有MFC 窗口的基类,它封装了窗口的基本操作,包括窗口的创建、销毁、设置窗口风格等,以及窗口对大部分消息的默认响应。开发人员可以直接从CWnd派生其他类,但通常情况下我们并不这么做,而是通过继承CWnd的派生类生成新类。7.CView类

CView类是在使用文档/视图结构的应用程序中视图对象的基类,它是用户的主要操作界面。在应用程序中,一个视图对象通常只对应一个文档对象,但一个文档对象却可以关联多个视图对象,并且每个视图对象都以不同的形式来显示文档中的数据。

8.CFrameWnd类

CFrameWnd类往往用于创建应用程序的主窗口,并定义了大量管理视图和文档对象的成员函数及变量。在编写文档/视图结构的应用程序时,视图对象等将作为CFrameWnd 的子窗口实现对客户区的共享,并被CFrameWnd有序排列。

9.CDocTemplate类

CDocTemplate类是AppWizard生成的文档模板类。

MFC 应用程序执行过程:

MFC 应用程序启动时,首先创建应用程序对象theApp。这时将自动调用应用程序类

的构造函数初始化对象theApp,然后由应用程序框架调用MFC 提供的AfxWinMain( )

主函数。在AfxWinMain( )主函数中,首先通过调用全局函数AfxGetApp( )来获取theApp 的指针pApp,然后通过该指针调用theApp 的成员函数InitInstance( )来初始化应用程序。在应用程序的初始化过程中,同时还构造了文档模板,产生最初的文档、视图和主框架窗口,并生成工具栏和状态栏。当InitInstance( )函数执行完毕后,WinMain( )函数将调

用成员函数Run( ),进入消息处理循环,直到函数Run( )收到WM_QUIT 消息。MFC 首先调用CWinApp 类的成员函数ExitInstance( ),然后调用静态对象的析构函数,包括CWinApp 对象,最后退出应用程序,将控制权交给操作系统。任何—个对象都可以通过调用全局函数AfxGetApp( )或AfxGetInstanceHandle( )来获取应用程序对象;通过调用全局函数AfxGetMainWnd( )来获得程序主窗口。

消息映射与消息处理

消息映射是将消息处理函数与它要处理的特定消息连接起来的一种机制。消息映射是应用MFC 方法进行Windows 编程的主要组成部分。

Windows 消息主要有3 种类型,即标准Windows 消息、控件消息和命令消息。

1.标准Windows 消息

除WM_COMMAND 以外,所有以“WM_”为前缀的消息都是标准Windows 消息。标准的Windows 消息由窗口类或视图类处理。标准Windows 消息都有默认的处理函数,这些函数在CWnd 类中进行了预定义。MFC 类库以消息名为基础形成这些处理函数的名称,这些函数的名称都以前缀“On”开始。有的处理函数不带参数,有的带几个参数。这些消息处理函数的说明一般都有“afx_msg”的前缀,用于把处理函数与其他的窗口成员函数区分开来,这些函数都是通过消息映射实现的。

标准的Windows 消息又分为3 类:键盘消息、鼠标消息和窗口消息:

a)键盘消息

键盘消息与键盘某个键的动作相关联。常见的键盘消息有以下几种。

WM_KEYDOWN、WM_KEYUP:按下、释放非系统键产生的消息。

WM_CHAR:输入非系统字符时产生的消息。

所有键盘消息处理函数的原型都很相似。我们以WM_CHAR 消息的处理函数OnChar( )为例来进行说明。此函数的原型如下:

afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags);

其中,参数nChar 是所按键的字符代码值;nRepCnt 表示用户重复击键的次数;nFlags表示扫描码、先前键状态和键转换状态等,其具体含义见下表:

b)鼠标消息

常用的鼠标消息有以下几种。

WM_MOUSEMOVE:鼠标移动时产生的消息。

WM_RBUTTONDOWN:鼠标右键按下时产生的消息。

WM_LBUTTONDOWN:鼠标左键按下时产生的消息。

WM_LBUTTONDBLCLICK:鼠标双击时产生的消息。

所有鼠标操作的处理函数都有很相似的原型,它们都有两个参数。我们以处理鼠标左键按下消息的函数OnLButtonDown( )为例来进行说明。此函数的原型如下:

afx_msg void OnLButtonDown(UINT nFlags,CPoint point);

其中参数point 是鼠标事件发生时鼠标光标所在的位置。它是相对于窗口左上角的水平X 坐标和垂直的Y 坐标而言的。参数nFlags 指明鼠标按键的状态以及鼠标事件发生时键盘上某些键的状态,每一状态都可以用nFlags 的一位来表示,具体含义见下表:

c)窗口消息

窗口消息一般与创建窗口、绘制窗口、移动窗口和销毁窗口等动作有关。

在MFC 应用程序中,窗口消息是由视图类、窗口类及它们的派生类处理的。常见的窗口消息如下。

WM_PAINT:当客户区产生移动或者显示事件,当用户窗口产生改变大小事件,当产生下拉菜单关闭并需要恢复被覆盖部分事件,当产生

Windows 清除对话框或者消息框并需要恢复被覆盖部分事件时,会产生WM_PAINT 消息。

它的消息处理函数原型为:

afx_msg void OnPaint();

WM_TIMER:每当计时器被触发时,系统就发送WM_TIMER 消息。

它的消息处理函数原型为:

afx_msg void OnTimer(UNIT nIDEvent);

其中,参数nIDEvent 是计时器的标识符。

2.控件消息

控件消息是指控件或其他子窗口向父窗口发送的WM_COMMAND 消息。发送控件消息的控件使用唯一的ID 号来识别,使用控件类来操纵。从控件传给系统的消息,它的前缀的最后一个字符为N;由系统发送给控件的消息,其前缀的最后一个字符为M。

3.命令消息

命令消息是由菜单项、工具栏按钮、快捷键等用户界面对象发出的

WM_COMMAND消息。命令消息与其他消息不同,它可被更广泛的对象如文档、文档模板、应用程序对象、窗口和视图等处理。

MFC消息映射机制

MFC 采用消息映射来处理消息。这种消息映射机制包括一组消息映射宏,

用于把一个Windows 消息和其消息处理函数联系起来。MFC 应用程序框架提供了消息映射功能,所有从CCmdTarget 类派生出来的类都能够拥有自己的消息映射。与MFC 消息映射机制有关的宏有以下3 个:

DECLARE_MESSAGE_MAP( )宏、BEGIN_MESSAGE_MAP(MyClass,

MybaseClass)宏和END_MESSAGE_MAP( )宏。为了使用消息映射宏,首先在类定义的结尾用DECLARE_MESSAGE_MAP( )宏来声明使用消息映射,该宏表示在为各个处理函数所写的类声明之后存在消息映射条目,这些函数是该类的成员函数。然后在类的实现源文件中用BEGIN_MESSAGE_MAP( )和END_MESSAGE_MAP( )宏来定义消息映射。MFC 应用程序

MESSAG_MAP 消息映射的形式如下所示:

BEGIN_MESSAGE_MAP(the class, the base class)

//{ { AFX_MSG_MAP (MyClass) //ClassWizard 维护消息映射宏的标记

ON_... //MFC 预定义消息映射宏

ON_MESSAGE(message, memberFun) //用户自定义消息映射宏

//} } AFX_MSG_MAP

END_MESSAGE_MAP()

其中,MyClass 是拥有消息映射的派生类名,MybaseClass 是其基类名。对于不同类型的消息,消息映射宏的格式及参数是不同的,见下表:

●Windows 编程帮助文档

MSDN 的全称是Microsoft Developer Network,这是微软公司面向软件开发者的一种信息服务,涵盖了微软全套可开发产品线的技术开发文档和科技文献(部分包括源代码)。在编写Windows应用程序时候可以借助MSDN查阅相关Windows API(Platform SDK)和MFC基础类(Microsoft Foundation Class Library)的详细用法。

1.5实验步骤

●用Windows API(SDK)实现HellowWorld程序

打开VC6.0,从File菜单中选择New,单击Project标签,选择Win32 Application,输入项目名称和工程存放目录,点击确定后出现3中选择,在此选择创建一个空的

工程,点击工程的File View,向Source Files中添加源文件,然后编写代码。

Windows程序的入口函数:

我们编写过Win32控制台程序,这种程序的唯一入口为main()函数,那么对于Windows 应用程序,它的入口函数为WinMain(),由操作系统调用。它的函数原型如下:int WINAPI WinMain(

HINSTANCE hInstance, // handle to current instance

HINSTANCE hPrevInstance, // handle to previous instance

LPSTR lpCmdLine, // command line

int nCmdShow// show state

);

窗口的创建

创建一个完整的窗口需要经过下面四个操作步骤:

●设计一个窗口类:Windows已经为程序员定义了一个窗口应该具有的基本属

性,即WNDCLASS类(结构体),定义如下:

typedef struct _WNDCLASS {

UINT style; //窗口风格

WNDPROC lpfnWndProc; //窗口过程

int cbClsExtra; //扩展空间

int cbWndExtra; //扩展空间

HINSTANCE hInstance; //实例句柄

HICON hIcon; //图标设置

HCURSOR hCursor; //光标设置

HBRUSH hbrBackground; //窗口背景颜色

LPCTSTR lpszMenuName; //窗口类菜单

LPCTSTR lpszClassName; //窗口类文本名称

} WNDCLASS, *PWNDCLASS;

用WNDCLASS定义一个窗口变量,然后依次初始化起它的每一个成员,注意:

第二个成员变量lpfnWndProc指定了这一类型窗口的过程函数(函数名可以作为该函数的首地址),也称回调函数。每一种不同类型的窗口都有自己专用的回调函数。

●注册窗口类:调用RegisterClass()函数注册窗口,函数原型如下:

ATOM RegisterClass( CONST WNDCLASS*lpWndClass );

●创建窗口:调用CreateWindow()函数创建窗口,函数原型如下:

HWND CreateWindow(

LPCTSTR lpClassName, // registered class name

LPCTSTR lpWindowName, // window name

DWORD dwStyle, // window style

int x, // horizontal position of window

int y, // vertical position of window

int nWidth, // window width

int nHeight, // window height

HWND hWndParent, // handle to parent or owner window HMENU hMenu, // menu handle or child identifier

HINSTANCE hInstance, // handle to application instance

LPVOID lpParam // window-creation data

);

●显示及更新窗口:

在CreateWindow()调用返回后,Windows已经分配了一块内存,用于保

存创建窗口的全部信息,然而窗口并未在显示器上显示,所以需要调用

ShowWindow()函数显示窗口和UpdateWindow()更新窗口,两个函数原型

分别为:

BOOL ShowWindow(

HWND hWnd, // handle to window

int nCmdShow // show state

);

更新窗口函数原型:

BOOL UpdateWindow(

HWND hWnd // handle to window

);

消息循环

当窗口显示在显示器上后,程序必须准备读入用户用键盘和鼠标输入的数据。Windows 为每一个应用程序维护一个“消息队列”,当发生输入事件后,Windows将事件转化成一个消息,并将消息放入程序的消息队列中。

程序通过执行以下一段代码从消息队列中取出消息:

while(GetMessage(&msg,NULL,0,0)) //获取消息

{

TranslateMessage(&msg);//消息翻译

DispatchMessage(&msg); //发送消息给窗口过程

}

Msg变量为MSG结构体类型,类型定义如下:

typedef struct tagMSG {

HWND hwnd;

UINT message;

WPARAM wParam;

LPARAM lParam;

DWORD time;

POINT pt;

} MSG, *PMSG;

头文件包含

在每一个Windows程序C语言编写的Windows程序都可以看到#include

Windows.h是主要的包含文件,它包含的windows的其它头文件,这些头文件中最重要和最基本的是:

1.WINDEF.H 基本类型定义

2.WINNT.H 支持Unicode类型定义

3.WINBASE.H 内核函数

4.WINUSER.H 用户接口函数

5.WINGDI.H 图形设备接口函数

上面程序使用到得Windows系统调用函数均在MSDN中平台SDK文档中说明,并在不同的头文件中声明,其中绝大多数是在WINUSER.H中声明的。

●用MFC类库实现HellowWorld程序

打开VC6.0,从File菜单中选择New,单击Project标签,选择Win32 Application,

输入项目名称和工程存放目录,选择创建一个空的工程,点击工程的File View,

在Head Files中添加Hello.h文件,将类的定义均放在头文件里,需要定义两个类:应用程序类CMyApp类从CWinApp类继承;窗口类CMainWindow类从

CFrameWnd类继承;向Source Files中加入Hello.cpp文件,输入类的成员函数定

义。

选择菜单Project/settings(或Alt+F7),在Project Settings对话框中的General页中的Microsoft Foundation Classes:选择Use MFC in a Static Library或Use MFC in a Shared DLL,然后编译运行。

1.6实验程序实现

SDK实现代码:

#include

#include

//窗口过程函数声明:

LRESULT CALLBACK WinLiuProc(

HWND hwnd, // handle to window

UINT uMsg, // message identifier

WPARAM wParam, // first message parameter

LPARAM lParam // second message parameter

);

int WINAPI WinMain(

HINSTANCE hInstance, // handle to current instance

HINSTANCE hPrevInstance, // handle to previous instance

LPSTR lpCmdLine, // pointer to command line

int nCmdShow // show state of window

)

{

HWND hwnd; //窗口句柄

MSG msg; //消息

//声明一个窗口类

WNDCLASS wndcls;

//设置窗口类的属性:

wndcls.cbClsExtra = 0;

wndcls.cbWndExtra = 0;

wndcls.hbrBackground = ( HBRUSH)GetStockObject( WHITE_BRUSH );

wndcls.hCursor = LoadCursor( hInstance, IDC_ARROW );

wndcls.hIcon = LoadIcon( hInstance, IDI_APPLICA TION );

wndcls.hInstance = hInstance;

wndcls.lpfnWndProc = WinLiuProc;

wndcls.lpszClassName = "Windows prog test";

wndcls.lpszMenuName = NULL;

wndcls.style = CS_HREDRA W | CS_VREDRA W;

//注册窗口类

RegisterClass(&wndcls);

//创建窗口

hwnd = CreateWindow( "Windows prog test", TEXT ("The Hello Program,SDK style"), WS_OVERLAPPEDWINDOW | WS_VISIBLE,

CW_USEDEFAULT, CW_USEDEFAULT,CW_USEDEFAULT, CW_USEDEFAULT,

NULL, NULL, hInstance, NULL );

//显示窗口

ShowWindow( hwnd, SW_SHOWNORMAL );

//更新窗口

UpdateWindow(hwnd);

/*消息循环*/

//从消息队列中循环读取有效消息,如果是有效消息,则复制到msg中,然后从队列中删除该消息

while (GetMessage( &msg, NULL, 0, 0)) //当接收到一个WM_QUIT消息后,退出消息循环

{

//将一个指示字符键的键盘消息转化为容易使用的WM_CHAR消息

TranslateMessage(&msg);

//将消息发送给窗口过程

DispatchMessage(&msg);

}

return 0;

}

LRESULT CALLBACK WinLiuProc(

HWND hwnd, // handle to window

UINT uMsg, // message identifier

WPARAM wParam, // first message parameter

LPARAM lParam // second message parameter

)

{

switch(uMsg)

{

//字符输入消息

case WM_CHAR:

char szChar[20];

sprintf(szChar,"键盘按键按下");

MessageBox(hwnd,szChar,"Title",0);

break;

//鼠标左键按下消息

case WM_LBUTTONDOWN:

MessageBox(hwnd,"左键按下","Title",0);

HDC hdc;

/* retrieves a handle to a display device context (DC) for

the client area of a specified window or for the entire screen

*/

hdc=GetDC(hwnd);

//TextOut(hdc,0,50,"after mouse left button down,show this",

// strlen("after mouse left button down,show this") );

//releases a device context (DC),

ReleaseDC(hwnd,hdc);

break;

//鼠标右键按下消息

case WM_RBUTTONDOWN:

MessageBox(hwnd,"鼠标右键按下","Title",0);

break;

//输出消息

case WM_PAINT:

// HDC hdc;

RECT rect;

PAINTSTRUCT ps;

hdc=BeginPaint(hwnd, &ps) ;

GetClientRect(hwnd, &rect) ;

DrawText(hdc,TEXT("HelloWorld"),strlen("HelloWorld"),

&rect,DT_SINGLELINE | DT_CENTER | DT_VCENTER);

EndPaint(hwnd, &ps) ;

break;

//窗口关闭消息

case WM_CLOSE:

//如果接收的消息为IDYES

if(IDYES==MessageBox(hwnd,"是否真的结束?","lhhsoft",MB_YESNO)) {

//销毁窗口

DestroyWindow(hwnd);//系统发出一个WM_DESTROY消息。

}

break;

//销毁消息

case WM_DESTROY:

//退出消息循环

PostQuitMessage(0); //发送一个WM_QUIT消息

break;

//其它消息使用默认的窗口过程处理函数执行

default:

return DefWindowProc(hwnd,uMsg,wParam,lParam);

}

return 0;

}

1.7实验结果

1.8实验作业

1.练习捕获Win32程序消息的方法,捕获键盘和鼠标的消息。

//字符输入消息

case WM_CHAR:

char szChar[20];

sprintf(szChar,"键盘按键按下");

MessageBox(hwnd,szChar,"Title",0);

break;

//鼠标左键按下消息

case WM_LBUTTONDOWN:

MessageBox(hwnd,"左键按下","Title",0);

HDC hdc;

hdc=GetDC(hwnd);

ReleaseDC(hwnd,hdc);

break;

//鼠标右键按下消息

case WM_RBUTTONDOWN:

MessageBox(hwnd,"鼠标右键按下","Title",0);

break;

2.在窗口的其他位置显示“我是程序员”,并将窗口的标题栏改为:MyProg。

#include

#include

LRESULT CALLBACK WinLiuProc(

HWND hwnd, // handle to window

UINT uMsg, // message identifier

WPARAM wParam, // first message parameter

LPARAM lParam // second message parameter

);

int WINAPI WinMain(

HINSTANCE hInstance, // handle to current instance

HINSTANCE hPrevInstance, // handle to previous instance

LPSTR lpCmdLine, // pointer to command line

int nCmdShow // show state of window

)

{

HWND hwnd;

MSG msg;

WNDCLASS wndcls;

wndcls.cbClsExtra = 0;

wndcls.cbWndExtra = 0;

wndcls.hbrBackground = ( HBRUSH)GetStockObject( WHITE_BRUSH );

wndcls.hCursor = LoadCursor( hInstance, IDC_ARROW );

wndcls.hIcon = LoadIcon( hInstance, IDI_APPLICA TION );

wndcls.hInstance = hInstance;

wndcls.lpfnWndProc = WinLiuProc;

wndcls.lpszClassName = "Windows prog test";

wndcls.lpszMenuName = NULL;

wndcls.style = CS_HREDRA W | CS_VREDRA W;

RegisterClass(&wndcls);

hwnd=CreateWindow("Windows prog

test",TEXT("MyProg"),WS_OVERLAPPEDWINDOW|WS_VISIBLE,CW_USEDEFAULT,CW_

USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL, NULL, hInstance, NULL );

ShowWindow( hwnd, SW_SHOWNORMAL );

UpdateWindow(hwnd);

while (GetMessage( &msg, NULL, 0, 0))

{

TranslateMessage(&msg);

DispatchMessage(&msg);

}

return 0;

}

LRESULT CALLBACK WinLiuProc(

HWND hwnd, // handle to window

UINT uMsg, // message identifier

WPARAM wParam, // first message parameter

LPARAM lParam // second message parameter

)

{

switch(uMsg)

{

case WM_CHAR:

char szChar[20];

sprintf(szChar,"键盘按键按下");

MessageBox(hwnd,szChar,"Title",0);

break;

case WM_LBUTTONDOWN:

MessageBox(hwnd,"左键按下","Title",0);

HDC hdc;

ReleaseDC(hwnd,hdc);

break;

case WM_RBUTTONDOWN:

MessageBox(hwnd,"鼠标右键按下","Title",0);

break;

case WM_PAINT:

RECT rect;

PAINTSTRUCT ps;

hdc=BeginPaint(hwnd, &ps) ;

GetClientRect(hwnd, &rect) ;

DrawText(hdc,TEXT("HelloWorld 我是程序员"),strlen("HelloWorld 我是程序员"),

&rect,DT_SINGLELINE | DT_CENTER | DT_BOTTOM);

EndPaint(hwnd, &ps) ;

break;

case WM_CLOSE:

if(IDYES==MessageBox(hwnd,"是否真的结束?","lhhsoft",MB_YESNO))

{

DestroyWindow(hwnd);

}

break;

case WM_DESTROY:

PostQuitMessage(0);

break;

default:

return DefWindowProc(hwnd,uMsg,wParam,lParam);

}

return 0;

}

1.9实验心得

第一次实验,能比较容易的看懂代码,并且在适当的地方进行修改,完成修改任务。运行的时候,由于在不同的编写软件里编译的结果有些差异,会运行出给的参考代码有错误的现象,那时候也没想到是软件的问题,还一直修改。后来使用了学习C语言的时候使用的C-Free,发现可能是软件要求的不同所产生的问题。

标准实验报告模板

实验报告 实验名称 课程名称___电子技术基础实验 院系部: 专业班级:学生姓名:学号:同组人:实验台号:指导教师:成绩:实验日期: 华北电力大学

实验报告要求: 一、实验目的及要求 二、仪器用具 三、实验原理 四、实验步骤(包括原理图、实验结果与数据处理) 五、讨论与结论(对实验现象、实验故障及处理方法、实验中存在的问题等进行分析和讨论,对实验的进一步想法或改进意见。) 六、实验原始数据

一、实验目的及要求: 1. 学会放大器静态工作点的调试方法,分析静态工作点对放大器性能的影响。 2. 掌握放大器电压放大倍数和最大不失真输出电压的测试方法。 3. 悉常用电子仪器及模拟电路实验设备的使用。 二、仪器用具:略 三、实验原理 图1.2.1为电阻分压式工作点稳定单管放大器实验电路图。 图1.2.1 共射极单管放大器实验电路 在图1.2.1电路中,当流过偏置电阻1B R 和2B R 的电流远大于晶体管VT 的基极电流B I 时(一般5~10倍),则它的静态工作点可用下式估算: CC B2B1B1B U R R R U +≈ U CE =U CC -I C (R C +R F1 + R E ) 电压放大倍数: 1)1( // F R β++-=be L C V r R R β A 其中r be =200+26 (1+β)/I E 输入电阻:R i =R B1 // R B2 // [r be +(1+β)R F1] 输出电阻:R O ≈R C 四、实验方法与步骤: 1. 调试静态工作点 接通+12V 电源、调节R W ,使U E =2.0V ,测量U B 、U E 、U C 、R B2值。记入表1.2.1。 E U BE = U B - U E =0.665V ,U CE = U C - U E =5.8V,I C ≈I E = U E /R E =2/(1.1)=1.82mA 实验数据显示,Q 点的值满足放大电路的静态工作点要求,BJT 处于放大区。 2. 测量不同负载下的电压放大倍数 C E BE B E I R U U I ≈+-≈1 F R

VC++实验报告书

一、设计方案及功能描述 图像平滑往往使图像中的边界、轮廓变的模糊,为了减少这类不利效果的影响,这就需要利用图像鋭化技术,使图像的边缘变的清晰。图像銳化处理的目的是为了使图像的边缘、轮廓线以及图像的细节变的清晰,经过平滑的图像变得模糊的根本原因是因为图像受到了平均或积分运算,因此可以对其进行逆运算(如微分运算)就可以使图像变的清晰。 对图像f(x,y),在点(x,y)处的梯是一个矢量 G=[f(x,y)]=[?f ?x ,?f ?y ] 梯度的方向在函数f(x,y)最大变化率的方向上,梯度的幅度G M[ f(x,y)]可由下式给出: G M[ f(x,y)]=(?f ?x )2+(?f ?y )2 由上式可知,梯度的数值是f(x,y)在其最大变化率的方向上的单位距离所增加的量。 对数字图像,微分?f ?x 和?f ?y 可用差分近似。差分运算近似后的梯度表达式为 G M[ f(x,y)]=f x,y?f(x+1,y)2+f x,y?f(x,y+1)2 对于图像f(x,y),上式的计算量很大,因此在实际计算中常用绝对值代替平方和平方根运算,梯度模值近似为 运用双方向一次微分运算,算出梯度后用梯度值替代该点的灰度值。在图像的最后一行或最后一列无法计算像素梯度时,一般用前一行或前一列的梯度值近似代替。 为了在不破坏图像背景的前提下更好地增强边缘,也可以对上述直接用梯度值代替灰度值的方法进行改进,即利用门限判断梯度锐化方法。具体公式如下: G M[ f(x,y)]= G M f x,y+100, G M[ f(x,y)]≥T f x,y,其他 对于图像而言,物体与物体之间,背景和背景之间的梯度变化一般很小,灰度变化较大的地方一般集中在图像的边缘上,也就是物体和背景交界的地方,当设定一个合适的阈值T,G M[ f(x,y)]大于等于T就认为该像素点处于图像的边缘,对梯度值加上100,以使边缘变亮,而对于G M[ f(x,y)]小于T就认为像素点是同类像素点。这样就增加了物体的边界,又同时保留了图像的背景的原来的状态。

基础物理实验报告撰写规范及评分标准

附件2 《基础物理实验报告撰写规范及评分标准》 实验报告作为每个实验最后的总结,是学生科研素质培养的重要手段,也是整个实验的完成情况、学生实验技能和数据处理能力的集中表现,是评定实验课成绩的最主要依据。因此为规范实验报告的写作,制定此撰写规范及评分标准。 一、撰写规范 1.撰写实验报告必须采用专用的中山大学实验报告纸或标准的A4白纸,单面书写。用A4纸时必须在四周留出2.0cm以上的边空。 2. 为了实验报告的长期保存,报告的所有内容,包括图、表、文字等都必须用钢笔、签字笔等墨水笔撰写,或者打印,不得使用铅笔和圆珠笔。 3.第一层次实验的报告必须手写完成,不得打印;第二层次、第三层次实验的报告建议打印,但也可以手写。 4.一份独立完整的实验报告必须包括以下几个部分,以使他人在不参阅其他资料的情况下能够看懂报告中的所有内容。 (1)实验编号及题目。 (2)写实验报告日期,实验者专业、年级、班级、学号、姓名,合作者(两人一套设备时同组另一名学生的姓名,一人一套设备则不需填写)姓名等信息,不得缺漏。 (3)实验目的。内容与教材一致。 (4)仪器用具。注明所有实验仪器的名称,型号,测量范围及精度。 (5)实验原理。包括实验中采用的仪器设备的工作原理,实验方法,相关理论等。该部分不能用“见预习报告”、“略”、“见教材第几页”等字样说明后省略不写。由于出于教学目的,教材中的实验原理部分都写得比较多,写实验报告时不能照抄教材的内容,而必须在理解的基础上用精炼的语言对教材的内容加以总结和概括,有必要时可以补充一些教材上没有的内容。 (6)实验内容及步骤。包括安全注意事项。对于课本上已有详细说明的,可以写得简略一些;要求自己设计或安排实验步骤时,应写得尽可能详细。 (7)实验结果及数据处理。包括详细的数据处理过程及所有的实验测量结果。计算实验结果及不确定度,作出所有的图表,探讨经验公式等。处理时应详细写出计算步骤,并按教材的具体要求计算不确定度,并注意有效数字的正确修约。如教材中没有明确指出不确定度计算的具体要求,在计算时应注明不确定度的种类。 (8)讨论及结论。对实验结果进行分析讨论,讨论影响实验不确定度的因素及改进方法,并完成教材中的思考题等。 (9)参考文献。如实验报告中用到原始记录以外的数据,或教材中没有涉及到的内容,就必须注明其来源或参考文献。 5.物理量与单位采用国际单位制。变量用斜体表示,单位、化学元素用正体表示。

数据结构实验一 实验报告

班级::学号: 实验一线性表的基本操作 一、实验目的 1、掌握线性表的定义; 2、掌握线性表的基本操作,如建立、查找、插入和删除等。 二、实验容 定义一个包含学生信息(学号,,成绩)的顺序表和链表(二选一),使其具有如下功能: (1) 根据指定学生个数,逐个输入学生信息; (2) 逐个显示学生表中所有学生的相关信息; (3) 根据进行查找,返回此学生的学号和成绩; (4) 根据指定的位置可返回相应的学生信息(学号,,成绩); (5) 给定一个学生信息,插入到表中指定的位置; (6) 删除指定位置的学生记录; (7) 统计表中学生个数。 三、实验环境 Visual C++ 四、程序分析与实验结果 #include #include #include #include #define OK 1 #define ERROR 0 #define OVERFLOW -2

typedef int Status; // 定义函数返回值类型 typedef struct { char num[10]; // 学号 char name[20]; // double grade; // 成绩 }student; typedef student ElemType; typedef struct LNode { ElemType data; // 数据域 struct LNode *next; //指针域 }LNode,*LinkList; Status InitList(LinkList &L) // 构造空链表L { L=(struct LNode*)malloc(sizeof(struct LNode)); L->next=NULL; return OK;

实验报告标准范本

报告编号:LX-FS-A59757 实验报告标准范本 The Stage T asks Completed According T o The Plan Reflect The Basic Situation In The Work And The Lessons Learned In The Work, So As T o Obtain Further Guidance From The Superior. 编写:_________________________ 审批:_________________________ 时间:________年_____月_____日 A4打印/ 新修订/ 完整/ 内容可编辑

实验报告标准范本 使用说明:本报告资料适用于按计划完成的阶段任务而进行的,反映工作中的基本情况、工作中取得的经验教训、存在的问题以及今后工作设想的汇报,以取得上级的进一步指导作用。资料内容可按真实状况进行条款调整,套用时请仔细阅读。 物理探究实验:影响摩擦力大小的因素 探究准备 技能准备: 弹簧测力计,长木板,棉布,毛巾,带钩长方体木块,砝码,刻度尺,秒表。 知识准备: 1. 二力平衡的条件:作用在同一个物体上的两个力,如果大小相等,方向相反,并且在同一直线上,这两个力就平衡。 2. 在平衡力的作用下,静止的物体保持静止状态,运动的物体保持匀速直线运动状态。

3. 两个相互接触的物体,当它们做相对运动时或有相对运动的趋势时,在接触面上会产生一种阻碍相对运动的力,这种力就叫摩擦力。 4. 弹簧测力计拉着木块在水平面上做匀速直线运动时,拉力的大小就等于摩擦力的大小,拉力的数值可从弹簧测力计上读出,这样就测出了木块与水平面之间的摩擦力。 探究导引 探究指导: 关闭发动机的列车会停下来,自由摆动的秋千会停下来,踢出去的足球会停下来,运动的物体之所以会停下来,是因为受到了摩擦力。 运动物体产生摩擦力必须具备以下三个条件:1.物体间要相互接触,且挤压;2.接触面要粗糙;3.两物体间要发生相对运动或有相对运动的趋势。三个条

VC++实验报告1

实验一、HelloWorld在VC上的实现 姓名:郭殷蓉学号:E10700102 班级:10数媒1班 1.1实验目的 ●掌握Windows程序基本的运行原理。 ●学会编写简单的Windows程序。 1.2实验平台 ●Windows XP professional操作系统。 ●VC6.0集成开发环境。 1.3实验内容 ●用Windows API(SDK)实现图形化HellowWorld程序。 ●用MFC类库实现图形化HellowWorld程序。 1.4实验原理 ●Windows操作介绍 Windows是一种基于图形界面的多任务操作系统。对于普通用户来说,Windows图形化界面友好、操作简单,用户不需要花费长时间学习如何使用计算机和新程序,因为所有的Windows应用程序都具相近的外观和感觉;对于程序员来说,标准化的图形用户界面来自于Windows构造菜单和对话框的内置程序,这些工作由Windows处理,与应用程序无关,使程序员可以编写出易于用户操作的程序。 ●Windows编程模型 Windows程序采用如下图所示的事件驱动编程模型,应用程序通过处理操作系统发送出来的消息来响应事件。消息处理是所有Windows应用程序的的核心。Windows程序的进入点是WinMain函数,但大多时候操作是在成为窗口过程的函数中进行的。窗口过程函数处理发送给窗口的消息。WinMain创建该窗口并进入消息循环,即获取消息或将其调度给窗口过程。消息被检索之前处于消息队列中等待。 Windows定义了成百上千个不同的消息类型。大多数消息的开始字符为“WM”并带有下划线; 操作系统是通过消息机制(Message)来实现将事件传递给应用程序的。操作系统将每个事件都包装成一个称为消息的结构体MSG来传递给应用程序(详见MSDN)。 操作系统把它所能够完成的功能以函数的形式提供给应用程序使用,应用程序对这些函数的调用就叫做系统调用,这些函数的集合就是Windows操作系统提供给应 用程序编程的接口(Application Programming Interface),简称Windows API(C函数)。

实验报告要求及评分标准

XXX项目投资可行性实验报告 一、项目总论(10分) 二、项目背景和发展概况(10分) 三、投资估算与资金筹措(10分) 四、财务与敏感性分析(50分) 五、可行性研究结论与建议(10分) 格式和排版(10分) 注意:有些内容需自己假设拟定如项目名称、项目发起人等 有些内容要求在参考课本实验材料的基础上找相关的背景资料扩展补充如项目提出的背景、投资的必要性等。 实验报告内容参考 一、项目总论 总论作为可行性研究报告的首章,要综合叙述研究报告中各章节的主要问题和研究结论,并对项目的可行与否提出最终建议,为可行性研究的审批提供方便。总论可根据项目的具体条件,参照下列内容编写。 (一)项目名称 企业或工程的全称。 (二)研究工作依据 根据项目需要进行调查和收集的设计基础资料。 (三)研究工作概况

项目建设的必要性。简要说明项目在行业中的地位,该项目是否符合国家的产业政策、技术政策、生产力布局要求;项目拟建的理由与重要性。 (四)可行性研究结论 在可行性研究中,对项目的资金总额及筹措、项目的财务效益与国民经济、社会效益等重大问题,都应得出明确的结论,即对相关章节的研究结论作简要叙述,并提出最终结论。 1、投资估算和资金筹措 (1)项目所需总投资额。分别说明项目所需固定资产投资总额、流动资金总额,并按人民币、外币分别列出。 (2)资金来源。贷款额、贷款利率、偿还条件。合资项目要分别列出中、外各方投资额、投资方式和投资方向。 2、项目财务和经济评论 项目总成本、单位成本。 项目总收入,包括销售收入和其它收入。 财务内部收益率、财务净现值、投资回收期、贷款偿还期、盈亏平衡点等指标计算结果。经济内部收益率,经济净现值等指标计算结果。 3、主要技术经济指标表 在总论章中,可将研究报告各章节中的主要技术经济指标汇总,列出主要技术经济指标表,使审批和决策者对项目全貌有一个综合了解。 4、存在问题及建议 对可行性研究中提出的项目的主要问题进行说明并提出解决的建议。 二、项目背景和发展概况 这一部分主要应说明项目的发起过程、提出的理由、前期工作的发展过程、投资者的意向、投资的必要性等可行性研究的工作基础。为此,需将项目的提出背景与发展概况作系统地叙述。说明项目提出的背景、投资理由、在可行性研究前已经进行的工作情况及其成果、重要问题的决策和决策过程等情况。在叙述项目发展概况的同时,应能清楚地提示出本项目可行性研究的重点和问题。 (一)项目提出的背景 国家或行业发展规划

实验1实验报告

实验一词法分析 班级:计科12-3 学号:08123282 姓名:樊鑫 一.实验目的 1、学会针对DFA转换图实现相应的高级语言源程序。 2、深刻领会状态转换图的含义,逐步理解有限自动机。 3、掌握手工生成词法分析器的方法,了解词法分析器的内部工作原理。 二.实验内容 TINY计算机语言的编译程序的词法分析部分实现。 从左到右扫描每行该语言源程序的符号,拼成单词,换成统一的内部表示(token)送给语法分析程序。 为了简化程序的编写,有具体的要求如下: (1)数仅仅是整数。 (2)空白符仅仅是空格、回车符、制表符。 (3)代码是自由格式。 (4)注释应放在花括号之内,并且不允许嵌套 三.实验要求 要求实现编译器的以下功能: (1)按规则拼单词,并转换成二元式形式 (2)删除注释行 (3)删除空白符 (空格、回车符、制表符) (4)列表打印源程序,按照源程序的行打印,在每行的前面加上行号,并且打印出每行包含的记号的二元形式 (5)发现并定位错误 ,词法分析进行具体的要求: (1)记号的二元式形式中种类采用枚举方法定义;其中保留字和特殊字符是每个都一个种类,标示符自己是一类,数字是一类;单词的属性就是表示的字符串值。

(2)词法分析的具体功能实现是一个函数GetToken(),每次调用都对剩余的字符串分析得到一个单词或记号识别其种类,收集该记号的符号串属性,当识别一个 单词完毕,采用返回值的形式返回符号的种类,同时采用程序变量的形式提供 当前识别出记号的属性值。这样配合语法分析程序的分析需要的记号及其属性, 生成一个语法树。 (3)标示符和保留字的词法构成相同,为了更好的实现,把语言的保留字建立一个表格存储,这样可以把保留字的识别放在标示符之后,用识别出的标示符对比 该表格,如果存在该表格中则是保留字,否则是一般标示符。 四.实验程序 #include #include #include #include #include using namespace std; enum WordType {WRONG, NUMBER, BIAOSHI, IF, THEN, ELSE, END, REPEAT, UNTIL, //9 READ, WRITE, PLUS, SUBTRACT, MULTIPLY, DIVIDEY, EQUAL, LESSTHAN, COLON,//18 ASSIGNMENT, LINE_FEED, SPACE, TAB, BRACKET_L, BRACKET_R}; //24 enum CharType {ALPHABET, OTHER}; enum WrongType {ZERO, ALP_NUM, NUM_ALP, UNLEAGL_S, NO_MA TCH, UNKNOW}; char *Words [] = {"wrong", "number", "biaoshi", "if", "then", "else", "end", "repeat", "until", //9 "read", "write", "+", "-", "*", "/", "=", "<", ":",//18 ":=", "\n", " ", " ", "{", "}"}; //24 typedef struct { char *str; int wordtype; }Two; char ArrayChar[100], cbuffer; int i=-1, numline = 1, wordtype; string LineChar; Two T; ifstream fp("source.txt",ios::in); int main () { void HandleAlphabet(); void HandleNumber (); void HandleOther (); if (!fp) cout<<"文件打开错误!"<

科学实验报告标准范本_1

报告编号:LX-FS-A60760 科学实验报告标准范本 The Stage T asks Completed According T o The Plan Reflect The Basic Situation In The Work And The Lessons Learned In The Work, So As T o Obtain Further Guidance From The Superior. 编写:_________________________ 审批:_________________________ 时间:________年_____月_____日 A4打印/ 新修订/ 完整/ 内容可编辑

科学实验报告标准范本 使用说明:本报告资料适用于按计划完成的阶段任务而进行的,反映工作中的基本情况、工作中取得的经验教训、存在的问题以及今后工作设想的汇报,以取得上级的进一步指导作用。资料内容可按真实状况进行条款调整,套用时请仔细阅读。 实验一: 实验名称:二氧化碳能使澄清的石灰水变浑浊 实验材料:制取一瓶二氧化碳备用,制取一瓶澄清的石灰水备用、烧杯一个 实验过程:1)、将澄清的石灰水倒入烧杯中,观察澄清的石灰水是什么样子的, 2)、倒入装有二氧化碳的瓶子,摇晃后观察现象。 实验结论:二氧化碳能使澄清的石灰水变浑浊 实验二: 实验名称:研究固体的热胀冷缩

实验材料:固体体胀演示器、酒精灯、火柴、水槽、冷水 实验过程: (1)铜球穿过铁圈 (2)、给铜球加热,不能穿过铁圈 (3)把铜球放入冷水中,铜球又穿过铁圈 实验结论; 固体有热胀冷缩的性质 实验三: 实验名称:研究液体的热胀冷缩 实验材料:细管、胶塞、平底烧瓶、红颜色的水、水槽、热水 实验过程: (1)细管插在胶塞中间,用胶塞塞住瓶口 (2)、往瓶里加红颜色的水 (3)把瓶子放入水槽中,记下细管里水的位置。

如何写vc实验报告

如何写vc实验报告 篇一:VC++实验报告(2) VC++实验报告 班号:0904101 学号:090410123 姓名:仲维祎 实验一VC++开发环境的熟悉和C++基础知识实验 一、实验目的 1. 掌握C++语言的特点。 2. 掌握C++的各种数据类型及基本运算。 3. 掌握C++各种控制结构及使用技巧。 4. 掌握C++的函数、数组、指针的相关概念和使用方法。 5. 灵活运用C++相关基础知识进行综合程序设计。 6. 回顾面向过程程序设计方法。

7. 熟悉Visual C++的开发环境 8.掌握用应用程序向导创建一个控制台应用项目的方法。 9.掌握源代码文件的新建、打开、保存和关闭等基本操作。 10.掌握Visual C++项目的编译、连接和执行。 11.掌握代码简单语法错误修正和调试的一般过程。 二、实验知识点概念 注意C++中同C的不同之处,包括数据类型,输入输出等相关的差异。 三、实验题目 1. 采用插入排序法,输入10个整数按升序排序后输出。要求编写一个通用的插入排序函数,它带有三个参数,第一个参数是含有n个元素的数组,这n个元素已按升序排序;第二个参数给出当前数组中元素个数;第三个参数是要插入的整数。该函数的功能是将一个整数插入到数组中,然后进行排序。另外还需要一个用于输出数组元素的函数,要求每一行输出5个元素。 2. 有5个学生,每个学生的数据结构包括学号、姓名、年龄、C++成绩,数学成绩和英语成绩、总平均分,从键盘输入5个学生的学号、姓名、3门课的成绩,计算3门课的总平均分,最后将5个学生的数据输出。要求各个功能用函数实现。

3. 对程序加入断点简单调试。 四、程序思路 五、程序源代码 1:代码如下 #include using namespace std; void (char iArray,int nCount,int nNumber) { int i=nCount-1,j=0; char *iArray2; iArray2=iArray; *(iArray2+nCount)=nNumber;//多分配一个空间给传入数据for(i;i=0;i--) { if(nCount==1) *iArray=nNumber; if (*(iArray2+i)*(iArray+i+1))

实验1实验报告-

实验1 Windows编程基础实验报告 一、实验目的和要求 (1)创建一个Win32应用程序Ex_SDK,在程序中构造一个编辑框控件和一个按钮。 (2)编辑框用于输入一元二次方程的系数,当单击“计算”按钮,获取方程系数得的根通过TextOut显示在窗口客户区中。 二、实验环境 操作系统:Windows 2000 编译器:Visual C++ 6.0的开发环境 三、实验准备和说明 (1)具备知识:简单的SDK编程基础。 (2)准备本次上机所需要的程序。 (3)创建本次实验工作文件夹“…\Visual C++程序\实验\实验1” 四、实验内容和步骤 1.启动Visual C++ 6.0 打开计算机,启动Visual C++ 6.0系统。 2.创建工程并添加代码 ①选择“文件”→“新建”菜单命令,打开应用程序向导,显示出“新建”对话框。单击“工程”标签,从列表框中选中Win32 Application(Win32 应用程序)项。在工程名称框中输入Win32应用程序项目名称Ex_SDK。单击浏览按钮...将工程定位到文件夹“…\Visual C++ 6.0程序\实验\实验1”。 ②单击“确定”按钮继续。在向导第一步对话框中,选中An empty project(一个空的工程)项。单击“完成”按钮,系统将显示AppWizard(应用程序向导)的创建信息,单击“确定”按钮,系统将自动创建此应用程序。 ③再次选择“文件”→“新建”菜单命令,显示出“新建”对话框。单击“文件”标签,在左边的列表框中选择C++ Source File项,在右边的“文件”下的编辑框中输入Ex_SDK.cpp,单击“确定”按钮。 ④在打开的文档窗口中输入下面的代码: #include #include #include // 求一元二次方程的根,函数返回根的个数 int GetRoot(float a, float b, float c, double *root) { double delta, deltasqrt; delta = b*b - 4.0 * a * c; if (delta<0.0) return 0; // 无根 deltasqrt = sqrt(delta);

标准实验报告

标准实验报告 文档编制序号:[KK8UY-LL9IO69-TTO6M3-MTOL89-FTT688]

实验报告 实验名称 课程名称___电子技术基础实验 院系部: 专业班级: 学生姓名:学号: 同组人: 实验台号: 指导教师:成绩: 实验日期: 华北电力大学 实验报告要求: 一、实验目的及要求 二、仪器用具 三、实验原理 四、实验步骤(包括原理图、实验结果与数据处理) 五、讨论与结论(对实验现象、实验故障及处理方法、实验中存在的问题等进行分析和讨论,对实验的进一步想法或改进意见。) 六、实验原始数据 一、实验目的及要求:

1. 学会放大器静态工作点的调试方法,分析静态工作点对放大器性能的影响。 2. 掌握放大器电压放大倍数和最大不失真输出电压的测试方法。 3. 悉常用电子仪器及模拟电路实验设备的使用。 二、仪器用具:略 三、实验原理 图1.2.1为电阻分压式工作点稳定单管放大器实验电路图。 图1.2.1 共射极单管放大器实验电路 在图1.2.1电路中,当流过偏置电阻1B R 和2B R 的电流远大于晶体管VT 的基极电流B I 时(一般5~10倍),则它的静态工作点可用下式估算: CC B2B1B1B U R R R U +≈ U CE =U CC -I C (R C +R F1 + R E ) 电压放大倍数: 1 )1( // F R β++-=be L C V r R R β A 其中r be =200+26 (1+β)/I E 输入电阻:R i =R B1 调试静态工作点 接通+12V 电源、调节R W ,使U E =,测量U B 、U E 、U C 、R B2值。记入表1.2.1。 表1.2.1 U E = 根据表格测量数据,计算得到: U BE = U B - U E =,U CE = U C - U E =,I C ≈I E = U E /R E =2/= 实验数据显示,Q 点的值满足放大电路的静态工作点要求,BJT 处于放大区。 2. 测量不同负载下的电压放大倍数 输入信号u i 为1KHz ,U i ≈10mV 的正弦信号,同时用示波器观察放大器输出电压u O 波形,在波形不失真的条件下测量下述两种情况下的U O 值,并观察u i 与u O 的相位关系,记入表1.2.2。 C E BE B E I R U U I ≈+-≈1 F R

VC实现贪吃蛇的实验报告

题目:利用VC++实现贪吃蛇小游戏

一、题目:利用VC++实现贪吃蛇小游戏 利用VC++实现的贪吃蛇小游戏更加注重可视化。一条蛇在封闭的围墙内,在围墙内会随机出现一个食物,通过键盘上的W S A D四个键控制它向上,下,左,右四个方向移动。当蛇头撞到食物时表示将食物吃掉,这时蛇身增长一节,得分加一。接着随机生成食物,等待被蛇吃掉。如果在移动过程中撞到墙壁或者自己的身体,则游戏结束。游戏过程中,可以在菜单中选择暂停或者结束游戏,对游戏进行暂停或者退出。

二、编程要点(或基本思路、算法分析与说明): 本次游戏设计包含两大模块,一个模块是贪吃蛇游戏本身算法的设计,完成了贪吃蛇的食物产生,获取食物,蛇的移动等功能。另一个模块是利用MFC完成贪吃蛇的可视化显示,产生了一个对话框,在对话框可以控制游戏及游戏的显示。 1.贪吃蛇游戏算法设计包括: <1>果实出现的设计思路: (1)采用随机数生成果实出现坐标 (2)判断当前生成的果实是否在贪吃蛇身体范围内。 (3)如果在,重新生成直到不在为止。如果不在,则把坐标位置返回给调用对象。 <2>贪吃蛇更新的算法设计 (1)接收玩家按下的方向键消息,并保存到方向变量中。 (2)定义一个时间定时器,用来控制蛇运动的速度。 (3)当每次时间间隔到达时,则根据方向变量来更新贪吃蛇curr(即贪吃蛇身体)向量。 (4)判断curr向量的第一个元素中的坐标数据是否碰到边界或者蛇身,如果有,则游戏结束。否则,进行下一步。 (5)判断curr向量的第一个元素中的坐标数据是否与当前果实重合,如果有,表示贪吃蛇已经吃到果实。这时就向贪吃蛇curr向量添加一个元素,并重新生成一个果实。 (6)吃到食物后,得分会同步增加。 2.利用MFC完成贪吃蛇的可视化显示: 首先初始对话框,完成游戏的整体框架的显示。然后游戏玩家在菜单栏里选择开始,暂停,结束等,控制游戏状态。游戏开始后,玩家通过键盘上的消息控制蛇的运动。在函数DrawSnake(CDC *pDC,Snake snake),和DrawFood(CDC *pDC,SnakeFood f)完成对蛇和食物的重绘,从而显示出蛇的运动和对食物的获取。在OnPaint()函数中完成得分和游戏操作提示的显示。 本次游戏设计的主要功能函数如下: OnGameStart()(游戏开始函数), OnGamePauseStart()(游戏暂停函

实验1实验报告格式

实验1实验报告格式 《计算机图形学》实验1实验报告 实验题目:用户坐标、视图坐标、Java awt坐标概念的建立和应用 实验内容:掌握用户坐标、视图坐标、Java awt坐标概念,掌握三类坐标的转换算法。编写自己的算法函数,并形成Java语言程序包。编写程序调用验证之。 参考程序:有两个示范程序MyTest.java和MyLineDrawApplet.java 基本概念: 用户坐标:是独立于设备的逻辑坐标,可以是用户用来定义设计对象的各种坐标。 应用程序使用该坐标系:所有传给Java 2D渲染过程的坐标都是指用户坐标。例如下面程序中的默认用户坐标的范围是X轴从-1到1,Y轴也是凑够-1到1。 视图坐标:是设备相关的坐标,随目标渲染设备不同而不同。下面程序中定义的视图坐标的缺省值为(0,0)和(1,1)。 Java awt坐标:使用java.awt时使用的坐标,即窗口显示图像时的边界坐标。 填充:这个过程可以抽象的理解为以已知的线为中心,向周围扩展像素,然后对这些像素所在的方块进行着色。 将用户坐标转换为视图坐标实际上是将独立于设备的逻辑坐标转换为设备相关的坐标,将视图坐标转化为A WT坐标就是将视图坐标按照显示窗口的大小进行缩放。 算法设计:(详细叙述自己设计程序的功能、算法及实现) 程序的功能: 可以根据传入的用户坐标进行视图坐标、A WT坐标之间的转换,其反向转换同理也可以实现,即将转换的方法逆过去即可。此外,程序还可以进行图形的绘画和填充,比如矩形、椭圆、多边形等。 算法及其实现函数: 用户坐标到视图坐标的转换:对于相应的用户坐标应用数学中的平移与放缩,就可以得到视图坐标。具体方法如下:在用户坐标系下,设矩形窗口的左下角坐标为(Ux1,Uyb), 右上角为(Uxr,Uyt),视图坐标系下的两个点坐标分别为(Vx1,V yb)和(Vxr,V yt), 则视图坐标的表达式为:(Xu,Y u)是已知的用户坐标,(Xv ,Y v)是要求的视图坐标Xv=aXu+b Y v=cY u+d 其中:a=(Vxr-Vxl)/(Uxr-Uxl) b=Vxl-aUxl c=(V yt-V yb)/(Uyt-Uyb) d=V yb-cUyb //将用户坐标的点转换到视图坐标 public double view_x(double x) { double s=(x-user_i_x)/(user_a_x- user_i_x); double t=view_i_x[currentV iew]+s* //坐标的平移及压缩 (view_a_x[currentView]-view_i_x[currentV iew]); return t; } public double view_y(double y) { double s=(y-user_i_y)/(user_a_y-user_i_y); double t=view_i_y[currentV iew]+s* //坐标的平移及压缩 (view_a_y[currentView]-view_i_y[currentV iew]); return t; } 视图坐标到A WT坐标的转换:由于视图坐标在0到1之间,因此将显示窗口的宽和高

化学实验报告 实验__盐酸标准溶液的配制与标定1

实验报告 姓名:班级:同组人:自评成绩: 项目:盐酸标准溶液的配制与标定课程:学号: 一、实验目的 1. 掌握减量称量法称取基准物质的方法,巩固称量操作。 2. 掌握用无水碳酸钠作基准物质标定盐酸溶液的原理和方法。 3. 正确判断甲基红-溴甲酚绿混合指示剂的滴定终点。 二、实验原理 由于浓盐酸易挥发放出HCl气体,直接配制准确度差,因此配制盐酸标准溶液时需用间接配制法。标定盐酸的基准物质常用无水碳酸钠和硼砂等,本实验采用无水碳酸钠为基准物质,以甲基红-溴甲酚绿混合指示剂指示终点,终点颜色由绿色变为暗紫色。 用Na2CO3标定时反应为: 2HCl + Na2CO3 ══2NaCl+H2O + CO2↑ 注意事项: 由于反应产生H2CO3会使滴定突跃不明显,致使指示剂颜色变化不够敏锐,因此,在接近滴定终点之前,最好把溶液加热煮沸,并摇动以赶走CO2,冷却后再滴定。 三、仪器和药品 仪器:分析天平,称量瓶,酸式滴定管(50mL),锥形瓶(250mL),量筒(50mL),吸量管(2mL),试剂瓶(250mL),烧杯(250mL),电炉子,石棉网。 试剂:盐酸(A.R),无水碳酸钠(基准物质),甲基红-溴甲酚绿混合指示剂。 四、内容及步骤 1. 盐酸溶液(0.1mol/L)的配制 用移液管移取盐酸1.8mL,加水稀释至200mL,混匀,倒入细口瓶中,密塞,备用。 2. 盐酸溶液(0.1mol/L)的标定 用减量称量法称取在270~300℃灼烧至恒重的基准无水碳酸钠三份,每份重 0.15~0.22g,称至小数点后四位,分别置于三个已编号的250mL锥形瓶中,以50mL蒸馏水溶解,加甲基红-溴甲酚绿混合指示剂10滴,用0.1mol/L盐酸溶液滴定至溶液由绿色变为紫红色,煮沸2分钟,冷却至室温后继续滴定至溶液呈暗紫色为终点,记下消耗HCl标准溶液的体积。平行测定3次,以上平行测定3次的算术平均值为测定结果。 五、实验结果记录与计算

VC++实验报告(1,2,3)

VC++实验报告 班号:________ 学号:________ 姓名:________

实验1 VC++开发环境的熟悉和Windows编程基础 一、实验目的 1.熟悉Visual C++的开发环境 2. 掌握用应用程序向导创建一个控制台应用项目的方法。 3. 掌握源代码文件的新建、打开、保存和关闭等基本操作。 4.掌握用应用程序向导创建一个Windows应用项目的方法 5. 掌握Visual C++项目的编译、连接和执行 6. 掌握代码简单语法错误修正和调试的一般过程 7.掌握Windows程序运行基本原理。 8. 掌握使用SDK(Windows API)方式编写Windows应用程序方法。 9. 掌握用应用程序向导创建一个Windows应用项目的方法。 二、实验知识点概念 Visual C++是Microsoft公司推出的目前使用极为广泛的基于Windows平台的可视化编程环境。由于其功能强大、灵活性好、完全可扩展以及具有强有力的Internet支持,在各种C++语言开发工具中脱颖而出,成为目前较为流行的C++语言集成开发环境。 Windows程序设计不同于DOS下的程序设计,它是一种事件驱动的程序设计模式,主要是基于消息的。Windows SDK编程主要采用C++/C语言和Windows API进行Windows 应用程序设计。 三、实验题目 1. 控制台应用程序编写 术语:“控制台应用程序”是一个在仿DOS窗口(控制台窗口)中运行的基于字符的程序,控制台窗口将成为其标准输入和输出装置。由于这种模式的应用程序比Windows程序简单,我们先选择利用Visual C++来建立这样一个应用,这样使得我们可以将精力先投入到学习使用C++编程语言,而不需要把过多的精力投入到学习复杂的Windows编程中去。 创建一个控制台应用,输入以下代码: #include class Vehicle { public: Vehicle(float speed,int total) { speed = speed; total = total; cout<<”constructor is called!” <

大肠杆菌微生物培养实验报告及评价标准

实验1 微生物的分离、培养及计数 实验原理 纯化分离:人为提供适宜的菌落生长的条件(包括营养、温度、Ph等)。用平板划线法,通过接种环在琼脂固体培养基表面连续划线的操作,将聚集的菌种逐步稀释分散到培养基的表面。在数次划线后培养,可以分离到由一个细胞繁殖而来的肉眼可见的子细胞菌落。 筛选:转基因大肠杆菌有抗氨苄青霉素基因,所以在含有氨苄青霉素的LB培养基中可以正常繁殖长成菌落。而普通的大肠杆菌没有抗氨苄青霉素基因,咋含有氨苄青霉素的LB培养基中不能繁殖。由此可进行大肠杆菌的筛选。 梯度稀释并计数:通过浓度梯度稀释把液体培养基培养的大肠杆菌稀释到一定浓度,用稀释涂布平板法,然后将不同稀释度的菌液分别涂布到琼脂固体培养基的表面进行培养。在稀释度足够高的菌液里,聚集在一起的微生物将被分散成单个细胞,从而能在培养基表面形成单个的菌落。由此可计数计算大肠杆菌的数量。 实验目的 1.通过制备LB固体培养基,对平板进行划线等,学会使用固体LB 平板。 2.通过用液体培养基,学会对微生物进行扩大培养。 3.通过稀释,学会用计数器对微生物进行计数。

实验材料和药品 待分离的大肠杆菌菌液、高压蒸汽灭菌锅、LB 固体培养基、LB 液体培养基、接种环、玻璃涂布器、培养皿、恒温培养箱、摇床、酒精灯、无菌水、移液枪、EP 管 实验步骤(用简单的流程图表示) 实验数据的记录与分析(如照片、表格等)

稀释倍数104105 大肠杆菌单个菌落个 837799111812数 平均数 浓度×107×107 实验结果与讨论 结果:稀释了105计算出来的结果约为×107ml/cm^3

电机学实验1实验报告

实验报告 课程名称:电机学指导老师:史涔溦成绩:__________________实验名称:直流电动机实验实验类型:验证性实验同组学生姓名: 一、实验目的和要求(必填)二、实验内容和原理(必填) 三、主要仪器设备(必填)四、操作方法和实验步骤 五、实验数据记录和处理六、实验结果与分析(必填) 七、讨论、心得 一、实验目的和要求 1、进行电机实验安全教育和明确实验的基本要求 2、认识在直流电机实验中所用的电机、仪表、变阻器等组件 3、学习直流电动机的接线、起动、改变电机转向以及调速的方法 4、掌握用实验方法测取直流并励电动机的工作特性和机械特性 5、掌握直流并励电动机的调速方法 6、并励电动机的能耗制动 二、实验内容和原理 1、并励直流电动机起动实验 2、改变并励直流电动机转向实验 : 3、测取并励直流电动机的工作特性和机械特性 4、并励直流电动机的调速方法 三、主要仪器设备 1、直流电源(220V,3A,可调) 2、并励直流电动机 3、负载:测功机。与被测电动机同轴相连。 4、调节电阻。电枢调节电阻选取0-90欧,磁场调节电阻选取0—3000欧。 5、直流电压电流表。电压表为直流250V,电枢回路电流表量程,励磁回路电流表量程200mA。 四、操作方法与实验步骤 (1)并励直流电动机的起动实验 接线图: `

实验时,首先将电枢回路电阻调节到最大,因为起动初n=0,而端电压为额定值,如果电枢回路电阻过小那么会因电流过大而烧坏电机。其次应该Rf调节到最小,因为当电枢电流和电动势一定时,磁通量和转速是成反比的,如果磁场太弱,那么会造成很大的转速,从而造成危险。调节电源电压,缓缓启动电机,观察电动机的旋转方向是否符合负载的加载方向。最后逐步减小R1,实现分级起动,直到完全切除R1. 注意每次起动前,将测功机加载旋钮置0。实验完成后,将电压和测功机加载旋钮置0。 (2)改变并励直流电动机转向实验 改变转向,即改变导体的受力方向,则改变电枢电流或者磁场的方向都可以实现。因此对调励磁绕组或者电枢绕组的极性即可。重新起动,观察转向。 (3)测量并励直流电动机的工作特性和机械特性 1、完全起动电机并获取稳定转速,使得R1=0 2、将电动机调节到额定状态,调节电源电压测功机加载旋钮及磁场调节电阻R f ,至额定状态:U=U N , I=I N ,n=n N ,记下此时的I f ,即I fN 。 . 3、保持U=U N ,I f =I fN 不变,调测功机加载旋钮,逐渐减小电动机负载至最小,测I、n、T 2 。 (4)并励直流电动机的调速特性1、改变电枢电压调速 1) 按操作1起动后,切除电枢调节电阻R 1(R 1 =0)

相关主题
文本预览
相关文档 最新文档