1软件技术基础实验指导书(8学时实验版本)(适用于光信、测控)实验报告内容与要求实验报告封面请注明实验名称、学生姓名和学号。实验报告应包括以下部分:1.实验目的:简述实验的目的。2.实验内容:简述实验的内容。3.实验步骤:按实验指导书的要求逐步完成各个实验环节,观察并记录每步实验的数据、结果、遇到的问题及解决方法等。该步骤尽量多作分析。4.程序清单:实验中使用的程序源代码。5.总结:对实验的结果与问题进行归纳和总结。2实验一、VC++环境下程序的建立与调试实验题目:VC++环境下程序的建立与调试实验目的:掌握VC++环境下程序调试的方法;掌握VC++控制台程序的建立、编辑、编译、运行步骤;C++6.0下基于MFC的Windows程序开发的基本步骤。实验准备:安装VC++6.0软件的计算机。实验内容:(1)学会VC++环境下程序的建立、编辑、调试、运行,学会单步运行,断点调试,数据查看等方法。以编写出百鸡问题的求解程序为例,调试并给出结果。百鸡问题:设每只母鸡值3元,每只公鸡值2元,两只小鸡值1元。现要用100元钱买100只鸡,编制程序求有多少种买鸡方案。(2)线性表顺序存储下的线性表的运算:定义一个线性表,实现插入和删除算法,参考教材P16、P17。(3)选做:编写一个Windows环境下的对话框程序,界面如图所示,要求做到:单击“复制”按钮时将第一个文本框中的内容(自行输入)复制到第二个文本框中,单击清空按钮,将两个文本框的内容清空。实验要求:(1)学会VC++环境下程序的建立、编辑、调试、运行。将程序输入计算机,编译运行。(2)学会单步运行,断点调试等方法。(3)掌握线性表顺序存储下的线性表的运算。(4)了解基于MFC的程序开发步骤。掌握VC++的操作和调试方法。实验步骤:一、VC++环境下程序的建立、编辑、调试、运行方法31.工程文件的创建打开VC++6.0程序,在菜单上选择File|New,显示New对话框,在此对话框的列表栏中,选择Win32ConsoleApplication(Win32控制台应用程序)。然后在ProjectName栏中输入新建的工程名如“实验一”。在Location文本框中选择工程文件存放的文件夹,如图中所示,完成后单击ok按钮。如图所示在对话框中选择Anemptyproject单选项。然后单击Finish按钮。在出现的NewProjectInformation对话框中单击ok按钮,完成工程的创建过程。2.创建C++文件下一步创建C++源程序文件。菜单上选择File|New,显示New对话框。在new窗口选择Files选项卡,在它的列表框中选择C++SourceFile,在FileName下面的文本框中输入源程序文件名,单击AddtoProject复选框,如图所示,在单击ok按钮,出现编辑界面。4输完源程序后,应注意存盘。选择File|Save命令,保存文件。3.编译调试方法编译是指调用系统提供的C++语言编辑器,对源程序文件进行编译,生成扩展名为.obj的目标文件。连接是指调用系统提供的连接程序,将已编译的目标文件和系统提供库函数连接成一个整体,形成一个扩展名为.exe的可执行文件。执行也称运行,指使用执行命令,执行.exe可执行文件。编译连接和运行源程序。选择Build|Complie命令,这时系统开始对当前的源程序进行编译,编译过程中所出现的错误信息将显示在屏幕下方的Build窗口中。错误信息指出了该错误所在的行号和该错误的性质。用户可以根据这些错误信息进行修改。编译过程无错误后,可以连接生成可执行文件(.exe),这时选择工具栏或者菜单中Build|execute命令。编译过程比较方便的是采用如图所示的工具栏按钮进行操作。5VC++的调试:程序调试一般分为两个步骤:第一步是排除语法错误,使得程序能够运行;第二步是排除逻辑错误,使得程序能够得到正确的结果。语法错误可以通过编译时给出的错误找到相应的错误。逻辑错误利用VC提供的调试工具来排查错误。要调试首先要确保程序能够编译、建立得到执行程序,也就是完成了第一步(排除了语法错误),然后选择Build|StartDebug|StepInto命令或者按F11进入单步执行状态。进入Debug状态后,在窗口下方可以观察变量的数值变化情况。单步执行就是一条一条语句的执行,每执行完一条语句,程序就暂停下来,以便调试者观察程序执行状况,这是最简单的调试手段。通过单步执行的方式,可以观察程序执行过程中关键变量的变化情况,从而比较容易的确定错的原因,改正错误。在单步调试状态下,主菜单中新增加了Debug,该菜单中执行的菜单项有以下几种。StopDebugging退出单步调试状态,返回正常编辑窗口。Restart重新开始执行。StepInto(F11)单步执行,遇到函数调用则进入到函数中执行。StepOver(F10)单步执行,遇到函数调用,执行完该函数调用返回到下一条语句。RuntoCursor执行到光标所在的语句。6注意F10和F11的区别,在于调用了函数时,F10直接得到函数调用的返回结果,F11则进入到子函数单步执行,如果怀疑子函数有问题则用F11。断点调试方法:采用单步执行的方法调试程序有时显得太慢。比如说程序中有一条循环语句,它要循环100次,用单步法需要按100次才能执行完这个循环。这种情况下可以采用断点调试法。在程序中设置若干个断点,将程序分为一段一段的,然后一段一段的执行,每执行一段(一个断点),程序便停下来,你可以像单步执行那样进行检查。●设置/取消断点在编辑窗口,将光标定位于某条语句所在的行,按F9,或者工具栏中的断点按钮(手形按钮),这条语句就作为一个断点,而该语句所在行的行首,出现一个断点指示标记(紫红色的圆点)同样对于已经设置断点的语句所在行,再按F9则取消了断点。●执行到断点按F5或者工具栏中的继续执行按钮(带下箭头的按钮),程序便开始执行,遇到断点时,程序暂停执行(注意,断点处的语句未执行),再按F5,继续执行到下一个断点。调试状态下,可以选择Debug|StopDebugging退出调试状态。二、VC++下基于MFC的应用程序开发1.建立新工程启动VC++6.0,在菜单上选择File|New,显示New对话框,在此对话框的列表栏中,选择MFCAppWizard(exe),然后在ProjectName栏中输入新建的工程名如“实验一”。在Location文本框中选择工程文件存放的文件夹,如图中所示,完成后单击ok按钮。在接下来的向导页面中确定应用程序的类型,选择Dialogbased(基于对话框),如图所示。7接着可以单击Next按钮进一步设置。完成后单击finish按钮进入最后一个对话框,单击ok按钮完成程序框架的构建,进入编辑屏幕,如图所示。2.选择控件到窗口在工具栏上分别选择相应的控件,然后放在对话框的适当位置。各个控件的属性修改方法:右键单击放好的空间,在弹出的菜单中选择“Properties(属性)”命令,可以改变该控件属性,如控件ID及显示。83.为新生成的类定义公有数据成员的方法该程序中是利用类的生成向导将两个文本框设置为对话框类的公有数据成员。右键单击EditBox(文本编辑框)控件,在弹出的快捷菜单中选择ClassWizard(类向导)命令,出现如图所示的对话框。(或者在菜单上选择View|ClassWizard)。在类向导对话框中选择MemberVariables(成员变量)选项卡,如图所示,为了将文本框控件设置为“对话框”类的成员数据,先选中文本框控件所对应的控件IDC_EDIT1,再单击AddVariable按钮,出现如图所示的添加成员变量对话框。选择合适的种类并输入名称。94.为按钮添加对应函数在对话框窗口中双击按钮,会弹出对话框,在该对话框中输入函数名称后,单击ok按钮,编辑窗口会切换到该函数定义的起始位置,在该函数中填写相应的代码。本程序的控件代码如下:复制:CStringstr1;m_edit1.GetWindowText(str1);m_edit2.SetWindowText(str1);清除:m_edit1.SetWindowText();m_edit2.SetWindowText();最后编译执行可执行程序,查看应用程序功能。//百鸡问题#includestdio.hvoidmain(){inti,j,k;intm=0;//统计循环次数的for(i=0;i=33;i++)for(j=0;j=50-1.5*i;j++){m++;k=100-i-j;10if(3*i+2*j+0.5*k==100.0)printf(%5d%5d%5d\n,i,j,k);}printf(%d\n,m);}//线性表的顺序存储实现和插入删除,难点在于指针的运用,可以参考以下程序。#includestdio.h#includestdlib.h#definemaxnum20typedefintelemtype;typedefstruct{elemtypelist[maxnum];intnum;}qltype;voidcreat(qltype*la){inti,n;printf(\npleaseinputthenumbersofnode:);scanf(%d,&n);la-num=n;printf(\nInputthecontent:);for(i=0;in;i++)scanf(%d,&la-list[i]);for(i=0;in;i++)printf(%d,la-list[i]);printf(\n);getch();}intqiancha(qltype*la,inti,intx){intj;if(i0||ila-num+1){printf(\nthevalueofiiswrong!);return0;}if(la-num+1=maxnum){printf(\noverflow!);return0;}for(j=la-num;j=i;j--)la-list[j+1]=la-list[j];la-list[i]=x;la-num++;return1;}11intshanchu(qltype*la,inti){if(i0||ila-num){printf(\nthepositioniswrong!\n);return0;}for(;ila-num;i++)la-list[i-1]=la-list[i];la-num--;return1;}voiddisplay(qltype*la){inti;for(i=0;ila-num;i++)printf(%5d,la-list[i]);printf(\n);getch();}main(){qltype*la;inti,x;la=(qltype*)malloc(sizeof(qltype));creat(la);printf(qingshurucharudeweizhihezhi:\n);scanf(%d,%d,&i,&x);qiancha(la,i,x);display(la);printf(qingshuruyaoshanchuyuansudexuhao:);scanf(%d,&i);shanchu(la,i);display(la);}12实验二、单链表的生成、打印和运算实验目的:掌握数据的链式存储结构、在计算机中的实现方法及运算。实验准备:安装VC++6.0软件的计算机,学生需预先掌握实验所做内容,查找资料并做好上机调试的准备。实验内容:(1)建立一个线性链表,其元素值可以为从键盘输入的数,或者从已有数组中取数。(2)实现线性链表的现实、查找、插入、删除等算法。(3)选做:将线性链表逆转并输出,例设当前链表的顺序为:“ABCD”,则将链表逆转为“DCBA”,输出查看结果。实验参考:(1)教材中P18-P25。//下列程序供大家参考#includeconio.h#includedos.h#inc