计算方法实验指导书_第1页
计算方法实验指导书_第2页
计算方法实验指导书_第3页
计算方法实验指导书_第4页
计算方法实验指导书_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验一插值方法实验学时:4实验类型:设计实验要求:必修一 实验目的通过本次上机实习,能够进一步加深对各种插值算法的理解;学会使用用三种类型的插值函数的数学模型、基本算法,结合相应软件(如VC/VB/Delphi/Matlab/JAVA/Turbo C)编程实现数值方法的求解。并用该软件的绘图功能来显示插值函数,使其计算结果更加直观和形象化。二 实验内容通过程序求出插值函数的表达式是比较麻烦的,常用的方法是描出插值曲线上尽量密集的有限个采样点,并用这有限个采样点的连线,即折线,近似插值曲线。取点越密集,所得折线就越逼近理论上的插值曲线。本实验中将所取的点的横坐标存放于动态数组中,通过插值方法计算

2、得到的对应纵坐标存放于动态数组中。以Visual C+.Net 2005为例。本实验将Lagrange插值、Newton插值和三次样条插值实现为一个C+类CInterpolation,并在Button单击事件中调用该类相应函数,得出插值结果并画出图像。CInterpolation类为class CInterpolationpublic: CInterpolation();/构造函数CInterpolation(float *x1, float *y1, int n1);/结点横坐标、纵坐标、下标上限 CInterpolation();/析构函数int n, N;/结点下标上限,采样点下标上限f

3、loat *x, *y, *X;/分别存放结点横坐标、结点纵坐标、采样点横坐标float *p_H,*p_Alpha,*p_Beta,*p_a,*p_b,*p_c,*p_d,*p_m;/样条插值用到的公有指针,分别存放,和;其中,有参数的构造函数为CInterpolation(float *x1, float *y1, int n1) /动态数组x1,y1中存放结点的横、纵坐标,n1是结点下标上限(即n1+1个结点) n=n1; N=x1n-x10; X=new floatN+1; x=new floatn+1; y=new floatn+1; for(int i=0;i<=n;i+)

4、xi=x1i; yi=y1i; for(int i=0;i<=N;i+) Xi=x0+i;2.1 Lagrange插值,其中对于一个自变量,要求插值函数值,首先需要计算对应的Lagrange插值基函数值float l(float xv,int i) /求插值基函数的值 float t=1; for(int j=0;j<=n;j+) if(j!=i) t=t*(xv-xj)/(xi-xj); return t;调用函数l(float x,int i),可求出float p_l(float x) /求在一个点的插值结果 float t=0; for(int i=0;i<=n;i+

5、) t+=yi*l(x,i); return t;调用p_l(float x)可实现整个区间的插值float *Lagrange() /求整个插值区间上所有采样点的插值结果 float *Y=new floatN+1; for(int k=0;k<=N;k+) Yk=p_l(x0+k*h); return Y;2.2 Newton插值,其中,对于一个自变量,要求插值函数值,首先需要计算出和float *f()/该函数的返回值是一个长度为n1的动态数组,存放各阶差商float w(float x, int i)/该函数计算在求的函数中调用*f()得到各阶差商,然后在循环中调用w(float

6、 x)可得出插值结果float p_n(float x)/该函数计算在一点的值调用p_n(float x)可实现整个区间的插值float *Newton()/该函数计算出插值区间内所有点的值2.3 三次样条插值三次样条插值程序可分为以下四步编写:(1) 计算结点间的步长、;(2) 利用、产生三对角方程组的系数矩阵和常数向量;(3) 通过求解三对角方程组,得出中间结点的导数;(4) 对自变量x,在对应区间上,使用Hermite插值;(5) 调用上述函数,实现样条插值。将每步写成函数:(1)void GetH(void)/该函数计算数组void GetAlpha(void)/该函数计算数组void

7、 GetBeta(void)/该函数计算数组(2)void Geta(void)/该函数计算数组下对角线 void Getb(void)/该函数计算数组主对角线 void Getc(void)/该函数计算数组上对角线void Getd(void)/该函数计算方程组右端常数项(3)float *Chasing(float *pa,float *pb,float *pc,float *pd,int n)/追赶过程,计算各点斜率(4)float F0(float x)/该函数计算函数的值float F1(float x)/该函数计算函数的值float P0(float x)/该函数计算函数的值flo

8、at P1(float x)/该函数计算函数的值调用上述函数,实现三次样条插值float *Cubic_Spline()/该函数计算所有点的插值结果三 实验组织运行要求 实验前,由任课教师落实实验任务,每个学生事先编写好算法设计源程序代码。集中上机、调试并通过计算机图形可视化演示操作实例来测试、验证所学的数值分析理论。四 实验条件为每个学生提供一台具有WINDOWS 98/XP/NT/2000操作系统的计算机;同时提供VC+/VB/JAVA/TC等集成语言开发环境来编程设计计算方法的上机实验。五 实验步骤1 根据实验内容和算法流程图预先编好程序初稿,上机调试、运行, 输出正确的结果。2 三种类

9、型的插值函数所生成的图形要显示在同一坐标轴上,并用三种不同的颜色分别表示出来。3 分析它们的运行结果,并比较三种插值函数各自不同的特点。4 实验完毕后提交实验报告六 实验报告实验报告的内容包括:实验目的、实验内容、源程序清单和结果分析及心得体会。并分析它们的运行结果,并比较三种插值函数各自不同的特点。上述是第一个实验插值方法程序的构思和编写过程。将其简单概括,可分为以下几步:(1) 按照本实验指导书的开篇“集成开发环境Visual C+.Net的使用”中的第一部分“开发环境介绍”建立项目。(2) 为项目添加一个类,在该类中编写插值算法。该类需要一个有参数的构造函数将类外的插值条件数据传递到类中

10、。(3) 按照“集成开发环境Visual C+.Net的使用”所述为项目添加对话框双击事件响应程序,将鼠标双击的坐标存放于数组或线性表中,用于插值,并将双击的点用小圆圈标出。(4) 在对话框上添加一个Button(按钮),双击改按钮,添加响应程序,调用拉格朗日插值函数,并将得到的相邻插值点用直线连接起来。连线的方法在“集成开发环境Visual C+.Net的使用”有介绍。(5) 用与(4)类似的方法添加牛顿插值和三次样条插值的Button和相应的响应程序。对于插值结点的存储,可以采用线性表。为了通过插值结点确定插值区间,可将这些点按照横坐标递增排序。务必熟练实验一程序编写的每一步骤,做到能够从

11、头至尾独立编写。在项目的建立、画图、类的添加和编程思维各方面,后面的四个实验与实验一都是类似的。本实验指导书对后面的四个实验不再如此赘述。实验二数值积分实验学时:2实验类型:设计实验要求:必修一 实验目的通过该课程实习,学会使用数值积分的各种方法求解定积分计算的问题,体会各种方法的精度差异。二 实验内容本实验将梯形法的递推化和龙贝格算法编写为类CIntegration,在工程中调用该类得出积分结果并画出区间二分图像。首先画出被积函数图像,并储存被积函数在图像中每个像素对应的采样点的横坐标(存放于float型指针p_X中)和纵坐标(存放于int型指针p_Y中);然后调用CIntegration类

12、中相应函数,计算积分结果;最后将x轴上的区间二分点与其对应的被积函数值的点连线。CIntegration有公有变量和指针float a,b,h,*x;int n和带参数的构造函数CIntegration:CIntegration(float ma,float mb)a=ma; /a、b分别为积分区间左右端点b=mb;n=1; /区间二分个数h=b-a; /步长x=new floatn+1; /存放区间二分点x0=a;x1=b;另需被积函数float CIntegration:f(float x)float mTemp=sin(x); /可替换为其他函数return mTemp;绘制函数图像时,

13、需要将图像按照比例放大。2.1 梯形法的递推化 梯形法递推化公式为该过程是下列过程的往复循环 求已有各区间中点函数值的和; 求积分值。 区间二分,即更新结点,并将步长减半。要实现该算法过程,需要先编写下面两个函数float CIntegration:Sum(void)/该函数求的值void CIntegration:Divide(void)/该函数实现区间二分和步长更新float *px=new float2*n+1;for(int i=0;i<n;i+)px2*i=xi;px2*i+1=(xi+xi+1)/2;px2*n=xn;delete x;x=px;n=n*2;h=h/2;为了后

14、面编程的方便,可将单次二分过程写为函数float CIntegration:T1ToT2(float T1)最后,调用T1ToT2,可实现梯形法递推化的函数float CIntegration:Trapezium_Recurrence(float e)在后面的Romberg函数中,还需要用到迭代一定次数的梯形法递推函数float CIntegration:Trapezium_Recurrence(int N)2.2 龙贝格算法其中调用梯形法递推函数Trapezium_Recurrence(int N)可以很方便的实现单次龙贝格算法的函数float CIntegration:R1(float *

15、 T)调用函数R1可实现迭代的龙贝格函数float CIntegration:Romberg(float e)三 实验组织运行要求实验前,由任课教师落实实验任务,每个学生事先编写好算法设计源程序代码。集中上机、调试并通过计算机图形可视化演示操作实例来测试、验证所学的数值分析理论。四 实验条件为每个学生提供一台具有WINDOWS 98/XP/NT/2000操作系统的计算机;同时提供VC+/VB/JAVA/TC等集成语言开发环境来编程设计计算方法的上机实验。五 实验步骤1、 根据实验内容和算法流程图预先编好程序初稿,上机调试、运行。2、 用绘图函数绘出曲边梯形的面积并计算其值并输出正确的结果。3、

16、 测试、分析它们的运行结果,比较两种方法的精度差异。4、 实验完毕后提交实验报告。六 实验报告实验报告的内容包括:实验目的、实验内容、源程序清单和结果分析及心得体会。并分析它们的运行结果,并比较两种数值积分不同的特点和精度差异。实验三微分方程实验学时:2实验类型:综合/设计实验要求:必修一 实验目的通过本次实验,熟悉求解常微分方程初值问题的有关方法和理论,主要是欧拉法、改进欧拉法、四阶龙格库塔法,学会编制这三种方法的计算程序。体会这三种解法的功能、优缺点及适用场合。二 实验内容本实验将欧拉法、改进欧拉法和经典四阶龙哥库塔法编写为一个类CDifferential_Equation,调用该类实现一

17、阶微分方程初值问题的求解,并画出解函数的图像。CDifferential_Equation的框架如下class CDifferential_Equationpublic:CDifferential_Equation(float ma,float mb,float mh,float my0);CDifferential_Equation(void);float f(float x, float y);void Euler(void); /欧拉法void Euler_Improved(void); /改进欧拉法void Classical_Forth_Order_Runge_Kutta(void)

18、; /经典四阶龙哥库塔法float a,b,h,y0; /分别为区间左端点、区间右端点、步长float *x,*y; /存放各个结点和横、纵坐标int n; /结点个数,构造函数中得到;其中有参数的构造函数为CDifferential_Equation:CDifferential_Equation(float ma,float mb,float mh,float my0)a=ma;b=mb;h=mh;n=(b-a)/h;x=new floatn+1;y=new floatn+1;for(int i=0;i<=n;i+)xi=a+h*i;y0=my0;三 实验组织运行要求实验前,由任课教师

19、落实实验任务,每个学生事先编写好算法设计源程序代码。集中上机、调试并通过计算机图形可视化演示操作实例来测试、验证所学的数值分析理论。四 实验条件为每个学生提供一台具有WINDOWS 98/XP/NT/2000操作系统的计算机;同时提供VC+/VB/JAVA/TC等集成语言开发环境来编程设计计算方法的上机实验。五 实验步骤1、根据实验内容和算法流程图预先编好程序初稿,上机调试、运行。2、在屏幕上按适当比例和位置画出坐标轴及解的函数曲线输出正确的结果。3、测试、分析它们的运行结果,比较三种方法的精度和误差。4、实验完毕后提交实验报告。六 实验报告实验报告的内容包括:实验目的、实验内容、源程序清单和

20、结果分析及心得体会。并分析它们的运行结果,比较三种常微分方程求初值的精度和误差。实验四非线性方程实验学时:2实验类型:设计实验要求:必修一 实验目的通过本次实验,熟练的掌握方程求根的最基本、常用的运算方法和理论。主要有二分法、牛顿法、弦截法,并体会它们各自不同的特点及收敛速率。二 实验内容2.1 算法原理与底层计算程序非线性方程f(x)=0。(1)二分法对于单根区间a,b,f(a)f(b)<0: 区间中点m为(a+b)/2,如果|b-a|<e,则m即为该方程的解; 如果f(a)=0(或f(b)=0),则a(或b)即为方程的解(注意:程序中,两浮点数不可判断相等,即使两浮点数a和b理

21、论上相等,但“a=b;”一般不成立); 如果f(a)f(m)<0,则对区间a,m调用函数自身(递归),或将m赋值给b(循环),跳转,如果f(m)f(b)<0,则对区间m,b调用函数自身(递归),或将m赋值给a(循环),跳转。float Bisection(float a, float b,float e)/a和b分别为区间左右端点,e为容许误差,返回值为方程的解 /建议该函数用递归实现 /函数在a,b区间须连续、端点函数值异号且函数在该区间有唯一解 /每步的区间中点存入顺序表中,以备后面画图之用(2)牛顿法,已知float Newton(float x, float e)/x为初值

22、x0,e为容许误差,返回值为方程的解 /每次得到的近似解存入顺序表中,以备后面画图之用(3)快速弦截法,和已知float Secant(float x0, float x1, float e)/x0,x1分别为前两个近似解,用于启动迭代过程,e为容许误差,返回值为方程的解 /将每次迭代结果存入顺序表中,以备后面画图之用也可以定义多个待求解方程为函数,在二分法、牛顿法和弦截法的函数中增加函数指针参数,用以调用不同的待求解方程。2.2 可视化交互式对话框设计(1)绘制直角坐标系,并画出待求解方程的函数图象。(2)使用文本编辑框向程序传递a、b、x、x0、x1、e等条件初始值。(3)使用三个按钮分别

23、调用三种算法的函数,用静态文本框显示计算结果。对于区间二分法,用小圆圈在x轴标出每次得到的区间中点;对于牛顿法,对每个k,用直线连接和;对于弦截法,对每个k,用直线连接和。图4 非线性方程三 实验组织运行要求 实验前,由任课教师落实实验任务,每个学生事先编写好算法设计源程序代码。集中上机、调试并通过计算机图形可视化演示操作实例来测试、验证所学的数值分析理论。四 实验条件为每个学生提供一台具有WINDOWS 98/XP/NT/2000操作系统的计算机;同时提供VC+/VB/JAVA/TC等集成语言开发环境来编程设计计算方法的上机实验。五 实验步骤1、 根据实验内容和算法流程图预先编好程序初稿,上

24、机调试、运行。2、 按适当的比例在屏幕上画出f(x)的函数曲线以及根在x轴上的逼近过程。3、 测试、分析它们的运行结果并比较三种方法的运算速率及精度误差。4、 实验完毕后提交实验报告。六 实验报告实验报告的内容包括:实验目的、实验内容、源程序清单和结果分析及心得体会。并分析它们的运行结果,比较三种方程求根的运算速率及精度误差。实验五线性方程组实验学时:2实验类型:设计实验要求:必修一 实验目的 通过本课程的实习,学会编写全主元消去法的计算程序。掌握解线性方程组的最基本算法及其运用,进一步了解该解法的功能、优缺点,领会系数矩阵对解的影响。二 实验内容求解n元线性方程组即其中第k个方程表示为2.1

25、 算法原理与底层计算程序表9 线性方程组初始数据二维数组A方程组系数矩阵一维数组B方程组常数项向量变量n未知数个数(1)高斯赛德尔迭代法对于第i个方程,表达式为该算法可以通过编写三个函数实现。float *Adjust(float *pX0) 该函数计算一次迭代,pX0数组为上次迭代结果,返回值为本次迭代结果(数组)/已有条件数据:系数矩阵数组A,常数数组B,未知数个数n/计算结果数据:根据参数pX0数组(表示某步迭代结果)计算下一步迭代数组float *pX1=(float *)malloc(n+1)*sizeof(float); /不使用第0个元素for(int i=1;i<=n;i

26、+) /求每个/,两个一重循环return pX1;float Distance(float *pX0,float *pX1) /该函数计算两个向量的距离(即计算两个向量之差的范数)/已有条件数据:向量维数nfloat *Gauss_Seidel(float *pX0,float e) /该函数计算以pX0为初值,精度为e的迭代解/已有条件数据:系数矩阵数组A,常数数组B,未知数个数n/计算结果数据:根据参数pX0数组和e(表示某步迭代结果)计算迭代结果/该函数调用Adjust(float *pX0)和Distance(float *pX0,float *pX1)(2)高斯列主元消去法将线性方

27、程组写成增广矩阵形式将该增广矩阵作为全局数据或类的数据成员。表10 高斯列主元消去法数据数组G方程组增广矩阵所谓消去法,就是通过行初等变换,将增广矩阵化为对角矩阵的方法,最后一列就是方程组的解。因此,首先编写对数组G进行行初等变换的三个函数。void Exchange(int i,int j) /交换G的第i行和第j行void Mult(int i,float r) /将G的第i行乘以rvoid AddTo(int i,int j,float r) /将第i行乘以r加到第j行另外还需选主元函数。int GetMaxElem(int i) /查找GiiGni中最大元素的行标有了这些函数,可以很方

28、便的实现高斯列主元消去法。void GaussEliminate()for(int y=1;y<=n;y+) /将G化为上三角矩阵/消掉Gyy以下的元素(简单起见,可以先将第y行除以Gyy)for(int y=n;y>=1;y-) /将上三角矩阵化为对角矩阵/消掉Gyy以上的元素/G的最后一列就是方程组的解对于C+语言,为了方便,使用二维动态数组。可调用下面的函数为二维指针分配动态存储空间和销毁空间。为了方便程序的移植和重复利用,可将这两个函数写在一个文件MatrixAllocate.h中。C#和Java可以直接使用二维数组。template<class T>bool

29、New(T *&ppData,int H,int W)/该函数为二维指针ppData分配动态存储空间 T *ppData1 = new TW*H; ppData=new T*H; for(int i=0;i<H;i+) ppDatai=ppData1+i*W; return true;template<class T>bool Delete(T *&ppData)/该函数销毁二维指针ppDataT *ppData1=ppData0;delete ppData1;delete ppData;ppData=NULL;return true;2.2 可视化交互式对话

30、框设计该实验不需要对话框,建立控制台应用程序,将结果输出即可。三 实验组织运行要求 实验前,由任课教师落实实验任务,每个学生事先编写好算法设计源程序代码。集中上机、调试并通过计算机图形可视化演示操作实例来测试、验证所学的数值分析理论。四 实验条件为每个学生提供一台具有WINDOWS 98/XP/NT/2000操作系统的计算机;同时提供VC+/VB/JAVA/TC等集成语言开发环境来编程设计计算方法的上机实验。五 实验步骤1.根据实验内容和算法流程图预先编好程序初稿,上机调试、运行。2.用随机函数随机产生一个n阶线性方程组并用两种方法求解,并对该解进行验证。3.测试、分析它们的运行结果并比较两种

31、方法的精度误差。4.实验完毕后提交实验报告。六 实验报告实验报告的内容包括:实验目的、实验内容、源程序清单和结果分析及心得体会。并分析它们的运行结果,比较两种线性方程组求解方法及精度误差。附录一:集成开发环境(Visual C+.Net 2005)的使用一、开发环境介绍Visual C+.Net画图通常在MFC应用程序中进行。本实验指导书采用基于对话框的MFC应用程序。该种工程新建过程如下:(1) 选择 文件>新建>项目,选择路径且填写工程名称后点“确定”;(2) 在MFC应用程序向导中点“下一步”,应用程序类型选“基于对话框”,MFC的使用选“在静态库中使用MFC”,并将“使用U

32、nicode库”前面的去掉,点“完成”。一个工程就建好了。我们先来熟悉一下Visual C+.Net和我们所新建的这个工程。在左侧,有“解决方案资源管理器”、“类视图”、“属性管理器”和“资源视图”。若有缺少,到菜单栏中“视图”中添加。“解决方案资源管理器”中列出了四个头文件和三个源文件,其中你的程序写在×××Dlg.cpp和×××Dlg.h中(我们以×××指代你的工程名),其余的文件不要修改。“类视图”列出了工程×××中的所有的类,该视图主要用于为类添加成员函数和变量。“资

33、源视图中”的“Dialog”中有“IDD_×××_DIALOG”,双击打开即可看到对话框,我们程序的运行结果通过这个对话框显示。对话框上已经默认放置了两个Button和一个StaticText,将其删除。图5 Visual C+ 2005 IDE最右边,有“工具箱”,其中有各种控件,我们将使用的主要是Button,你可以尝试在对话框上放置一个Button,然后双击该Button,则会跳转到×××Dlg.cpp对应位置,这里要编写的就是该Button的单击响应程序。另外,右侧有属性栏,显示的是当前选中的控件的各种属性,可修改。在属性栏中

34、,有“控件事件”一栏(闪电符号),其中有一个控件的多种事件,除单击外,有双击,等。下面开始编写我们的程序。以实验一拉格朗日插值为例。二、类的添加右击资源视图中的工程名,选择“添加”->“类”,在“类别”中选择“C+类”,然后点击“添加”。出现了一个“C+类向导”,在“类名”、“.h文件”、“.cpp文件”中分别填“CInterpolation”、“CInterpolation.h”和“CInterpolation.cpp”,然后点击“完成”,一个空类就建好了。将本实验指导书中已经给出的拉格朗日插值函数和类公有变量以及有参数的构造函数复制到该类中,并将“CInterpolation.cpp

35、”文件开头的#include "CInterpolation.h"拷到C×××Dlg.h中,就可以通过对象调用拉格朗日函数了(你可以在前面添加的那个Button中进行)。三、画图拉格朗日插值的结果有了,如何化成图像呢?MFC提供了类CDC用来画图,CDC中有很多现成的画图函数,如连接两点的函数LineTo,画椭圆的函数Ecllipse,等,画图功能全面而且使用方便。使用方法如下:CDC *pDC=GetDC(); /pDC检索对话框pDC->MoveTo(2,2); /pDC指向点(2,2),这里坐标原点为窗口左上角第一个像素pDC-&g

36、t;LineTo(250,250); /连接点(2,2)与点(250,250)p_DC->Ellipse(50,50,60,60);/在(50,50),(60,60)两点所界定的矩形范围内画内切椭圆CString mStr=”This is an Ellipse!”;p_DC->TextOut(150,200,mStr);/在(150,200)打印字符串”This is an Ellipse!”ReleaseDC(pDC); /pDC使用完毕,取消检索使用CDC类,你可以将求得的数组中的数据划成曲线,可以画出坐标系,如:int x10=0,50,100,150,200,250,30

37、0,350,400,450;/10个点的横坐标int y10=27,33,39,235,208,214,111,8,345,100;/10个点的纵坐标CDC *pDC=GetDC();pDC->MoveTo(x0,y0);for(int i=1;i<10;i+)pDC->LineTo(xi,yi);ReleaseDC(pDC);图6 画直线四、鼠标取点在插值实验中,需要首先选取插值结点,将所取的点用圆标出。我们采用窗口的鼠标左键双击取点。选中窗体,在右侧“属性”“消息”中,找到WM_LBUTTONDBCLK,添加事件响应函数,如下:void CGetPointDlg:OnLB

38、uttonDblClk(UINT nFlags, CPoint point)/point即是鼠标左键双击时所在点/ TODO: 在此添加消息处理程序代码和/或调用默认值CDC *pDC=GetDC();pDC->Ellipse(point.x-5,point.y-5,point.x+5,point.y+5);ReleaseDC(pDC);CDialog:OnLButtonDblClk(nFlags, point);图7 鼠标双击取点当然,仅仅将点标记出来是远远不够的,我们的主要目的是保存这些点的坐标,用作插值条件。五、类型转换在显示图像时,可能会用到整型变量与字符串的相互转换。要将整型变

39、量a的值转换为字符串,做法如下CString mStr;mStr.Format(“%d”,a);则串mStr为a的值转换成的字符串。要将串mStr转换为整型数,做法如下int a=atoi(mStr);/串转换为浮点数float a=atof(mStr);从对话框中读出的数据都是字符串,若要作为数值使用,需要转换,向对话框输出数值也需要转换。CString是MFC中的串类,与C+中的字符串不是一回事。在VC中可以用字符串常量赋值,两个串可以相加。如,要通过对话框向程序输入数据,则需要使用EditControl控件。从EditControl中获取字符串的办法为CString mStr;GetDl

40、gItem(IDC_EDIT1)->GetWindowText(mStr); /则mStr就获取了EditControl中的字符串了其中IDC_EDIT1是EditControl控件的ID,GetDlgItem是Windows操作系统提供的API函数,参数为控件的ID,返回值是控件的句柄。六 编程过程中的注意事项1.不要修改IDE自动生成的代码,如果不慎修改,所导致的错误极难解决。2.不要使用中文输入法,如果不慎输入了中文空格,由于该字符不可见,因此很难排查。3.MFC应用程序项目文件较多,本课程实验编写的程序在项目Dlg类和自行编写的类中,不要在其他文件中胡乱添加或删改代码。4.可以在

41、Win32控制台应用程序下编写调试具体的函数,随时输出结果,以便检查程序,待程序正确无误后,再拷贝到基于MFC的应用程序中使用。5.思路要清晰,不盲目编程;胆大心细,不轻易否定自己的能力。附录二:集成开发环境开发环境Visual C#.NET的使用一、开发环境介绍点击“文件”>“新建”>“项目”,选择语言类型“Visual C#”->“windows窗体应用程序”,填写项目名,选择存储路径。点击“确定”后如图8所示。图8 Visual C#界面Form1.cs文件,右击Form1.cs,查看代码。using System;using System.Collections.Ge

42、neric;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;namespace WindowsFormsApplication1 public partial class Form1 : Form public Form1() InitializeComponent(); 双击打开Form1.Designer.cs文件,看到如下

43、程序。namespace WindowsFormsApplication1 partial class Form1 / <summary> / Required designer variable. / </summary> private System.ComponentModel.IContainer components = null; / <summary> / Clean up any resources being used. / </summary> / <param name="disposing">

44、;true if managed resources should be disposed; otherwise, false.</param> protected override void Dispose(bool disposing) if (disposing && (components != null) components.Dispose(); base.Dispose(disposing); #region Windows Form Designer generated code / <summary> / Required method

45、 for Designer support - do not modify / the contents of this method with the code editor. / </summary> private void InitializeComponent() ponents = new System.ComponentModel.Container(); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.Text = "Form1" #endregion Form

46、1.cs中是类Form1的逻辑部分,主要用来表示涉及的一些事件处理和逻辑成分,编写代码的主要部分就在这里。Form1.Designer.cs中是类Form1的属性部分,由VS自动生成。它表示一个应用程序类,即表示应用程序本身的一个类,其中包含了一个主方法,是应用程序的入口点,调用应用程序的run方法,启动窗口类程序。这部分程序一般不需要更改。namespace WindowsFormsApplication1 static class Program / <summary> / The main entry point for the application. / </sum

47、mary> STAThread static void Main() Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1(); 二、添加控件与控件响应以将一个数字和100比较大小为例。打开窗口设计器,将鼠标移至工具箱,拖放一个button按钮,一个label标签,和一个TextBox编辑框,设置Text字段如图9所示。图9 控件Text字段双击button,IDE会自动在Form1.cs中增加如下控件消息响应函数。

48、private void button1_Click(object sender, EventArgs e)在函数体中添加如下代码。private void button1_Click(object sender, EventArgs e) String str = this.textBox1.Text; int Num = int.Parse(str); if (Num > 100) MessageBox.Show("数字"+Num+"比100大"); else MessageBox.Show("数字" + Num + &qu

49、ot;比100小");程序运行结果如图10所示。图10 运行结果该程序实现了对编辑框的读写以及对控件的响应,同时涉及了String与整形数值之间的转换。三、如何鼠标取点新建一个windows窗体应用程序,点击事件,如图11所示。图11 窗体事件找到mouseClick双击,即可新增鼠标点击处理函数。为了程序中通过鼠标单击选点并用小圆标记,鼠标点击处理函数如下所示:private void Form1_MouseClick(object sender, MouseEventArgs e) Graphics g = this.CreateGraphics(); /获取这个类的绘图环境 g

50、.DrawArc(new Pen(Color,Blue),new Rectangle(e.X-5,e.Y-5,10,10),0,360);运行结果如图12所示。图12 鼠标单击四、绘图使用C#绘图,就得用到GDI+中的对象。Graphics g = this.CreateGraphics(); /获取这个类的绘图环境该语句获取这个类的绘图环境,用以g对窗口绘图。常用函数有DrawArc : 绘制一个矩形的内部圆,参数需要包含一个矩形边框和画笔DrawLine; 绘制一条由两个Point点连接的直线DrawPolygon: 绘制由一组点的连线,参数为point数组DrawString: 绘制一段

51、给定的文字在指定位置其中参数如何设置等等问题,参照下面这个程序public partial class Form1 : Form public Form1() InitializeComponent(); vec_x = new int20; vec_y = new int20; g = this.CreateGraphics(); public int vec_x; /用于存放点的数组 public int vec_y; public int count = 0; private Graphics g; /该类的GDI+对象 private void Form1_MouseClick(object sender, MouseEventArgs e) vec

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论