《C语言程序设计》 实 验 指 导 手 册授课教师: 宋 茂 强实验指导教师: 李 晶教学对象: 一年级本科生开课时间: 秋季学期北京邮电大学软件学院2010年8月《C语言程序设计》实验指导手册(2010年8月)实验内容分为九部分,涉及到编程环境的使用,循环控制语句的练习,判断分支语句练习,函数的应用,模块化开发,数组和字符串的应用,结构体、指针以及链表的应用等,最终完成一个学生成绩管理系统的设计与实现。
关于实验的说明:1. 实验环境为:Visual Studio C++ 6.0。
2. 有需要提交实验内容的部分在实验要求一项中有提示。
3. 实验内容提交至:ftp://59.64.164.17/软件学院/ 10级/软件学院10级C语言程序设计用户名:student,密码:student。
4. 提交时请注意:每一部分都有对应的文件夹,每个班都有对应的文件夹。
提交内容时,遵守“学号-姓名”命名规则上传。
比如,2010211501班某同学张三,学号为100011,完成的第一部分实验包含了两部分:工程和实验报告。
工程的提交方法:找到“part 1”文件夹下 “10-01”文件夹,找到“project”文件夹,并将工程打包为.rar包,命名为:100011-张三.rar,传到这个文件夹下。
实验报告的提交方法:找到“part 1”文件夹下 “10-01”文件夹,找到“report”文件夹,将word形式的实验报告命名为:100011-张三.doc上传至该文件夹下。
第一部分: VC6.0的使用(2学时)1.实验目的(1) 掌握Visual Studio C++ 6.0 编程环境的基本使用方法;(2) 掌握如何在Visual Studio C++ 6.0编程环境下为工程引入第三方类库。
2.实验内容如何建立新的工程(1) 打开【file】|【new】,出现new窗口。
选择【project】选项卡,选择【Win32Console Application】。
在右面的【project name】栏中输入工程的名字,【location】项是指定当前的工程文件放在那个目录中,单击右面的按钮可以进行更改。
选择一个合适的目录(更为方便的方法是,在硬盘上建立一个自己的目录,比如在D盘上建立一个目录名为C Programming,那么,【location】这里就选择D:\ C Programming\ ,这样后面所有部分的实验内容都可以放在这个目录下),最后单击【OK】。
如图1-1所示。
图1-1 新建工程注:Win32 Console Application即win32控制台应用程序,是基于DOS开发平台开发应用程序。
(2) 接着会出现win32 Console Application-step 1 of 1窗口,只要单击【Finish】就可以。
(3) 出现下面的窗口,如图1-2所示。
整个窗口分成三大部分,左边的是资源框,可以查看本项目中包含的文件,资源等。
右边的是文件编辑区,现在为灰色,是因为还没有打开文件。
下边的是输出框。
编译信息,调试时的变量的值都在这个框中查看。
图1-2 VC6.0窗口组成(4) 接下来要添加一个程序文件,用来输入程序代码。
i. 如果源文件已经存在,(比如你用记事本编辑的一个源文件,或者用Dev-C++编辑的一个源文件,现在想用VC6.0重新编译运行一下),只需把源文件添加进工程里。
单击【project】菜单条,选择【add to project】->【files】菜单项,可以完成这个任务,或者在项目名字上单击鼠标右键,使用快捷菜单项来完成这个任务,如图1-3所示。
图1-3为工程添加文件快捷方式ii. 如果需要重新建立源文件,那VC6.0提供了一个很好的编辑器,打开【file】|【new】,出现new窗口。
选择【Files】|【C++ Source File】(注意:如果你要编辑一个头文件,请选择【C/C++ Header File】,文件名的后缀为“.h”),在右边的【file】中输入文件名,比如“welcome.c”,确认选中【Add to project】;最后单击【OK】。
如图1-4所示。
图1-4 新建文件然后可以观察到在左侧的资源框中出现了新建的源文件。
接下来可以在编辑框中输入源程序,如图1-5所示。
注意保存源程序。
图1-5 输入源程序到此为止,我们已经建立好了一个完整的工程。
如果工程不需要添加第三方类库,那么可以直接跳转到第(6)步。
(5) 为工程添加第三方类库。
i. 添加头文件。
¾将.h文件拷贝到工程所在的目录中。
如,我们课本上的源文件都有用到这样一个头文件:genlib.h,那么大家需要将genlib.h这个文件拷贝到你的工程目录中去。
¾在左侧资源框中,右键点击工程的根结点,选择【add Files to Project】。
在弹出的对话框中找到相应的头文件(后缀为.h),确定。
ii. 添加第三方类库。
¾将.lib文件拷贝到工程所在的目录中。
如,我们课本上的源文件都有用到这样一个类库:CSLIB.lib,那么大家需要将CSLIB.lib这个文件拷贝到你的工程目录中去。
¾在左侧资源框中,右键点击工程的根结点,选择【add Files to Project】。
在弹出的对话框中找到相应的库文件(后缀为.lib),确定。
(6) 程序编译、链接、运行。
i. 在Build菜单中,Compile(Ctrl+f7)编译源文件。
如果在输出框中看到如图1-6红框内的提示,那么编译就通过了,否则,请检查源程序。
图1-6 编译结果ii. Build(F7)链接。
如果在输出框中看到如图1-7所示的提示,那么链接就通过了,否则,请检查工程。
图1-7 链接结果此时,在本地硬盘工程所在文件夹下可以看到一个可执行文件,这里是welcome.exe。
iii. Execute(Ctrl + F5)运行程序。
可以看到如图1-8的界面。
图1-8 运行结果3.实验要求(1) 根据实验内容掌握构建一个基本的C工程的操作步骤,并且明白每一步操作的意义。
(2) 请把课堂上讲过的“两数相加”的例子录入,并运行。
第二部分:循环语句练习(2学时)1. 实验目的1.理解并掌握while循环语句和for循环语句的基本使用方法。
2.理解并学会使用break和continue程序控制语句。
2. 实验内容(1) 修改“第二讲”中的“Add certain numbers”例子,使其完成一个学生平均成绩的统计。
(2) 修改“第二讲”中的“Add indeterminate numbers”例子,使其完成一个学生平均成绩的统计。
(3) 前两项实验内容中,约定:i. 输入的成绩应为double类型数据,从键盘获得double类型数据的函数为GetReal()。
ii. 最后输出的平均成绩保留一位小数位。
(4) 如果将该程序中的while循环改为for循环应该怎样实现?3. 实验要求(1) 编码规范,注释清晰。
(2) 提交的结果包括:¾ VC6.0工程¾其他文档:i. 关于实验完成人、提交结果描述等补充说明readme.txt。
第三部分:VC6.0环境下C程序的调试(2学时)1. 实验目的(1) 掌握VC6.0环境下C程序调试的方法。
2. 实验内容(1) 单步调试按下F10键即可启动调试器,启动后可以看到程序清单的左边空白处有指向main()后大括号的黄色箭头出现。
调试时会出现Debug的快捷菜单。
如图3-1所示。
把鼠标放在快捷菜单上面,会出现提示信息。
图3-1 调试程序Restart(Ctrl+Shift+F5):重新开始调试。
Stop Debugging (Shift + F5):停止调试。
Step Into (F11):单步执行,遇到函数调用,会step into(跳进)函数体中,一步步显示被调用函数的执行。
Step Over(F10):单步执行,遇到函数调用,会跳过函数体。
Step Out (Shift+F11):从函数中跳出。
Run to Cursor(Ctrl +F10):运行到光标。
如果想从程序的某个地方而不是从程序头开始,先定位光标到想开始调试的那一行代码上,然后在Debug菜单(调试时代替Build菜单)中选择Start Debug 中Run to Cursor项,黄色箭头将出现在紧接着所选择语句的左边边框中。
现在按下,将使调试器步进到下一条语句上,黄色箭头将标明位置。
如果在循环中,可以发现黄色箭头在循环体内的语句间顺序向下移动,然后又跳回循环的顶端。
(2) 观察变量在单步调试程序时,可以观察变量的值的改变情况。
这个窗口可以显示所有当前执行上下文中可见的变量的值。
特别是当前指令涉及的变量,以红色显示。
Auto标签显示编译器选择的变量值。
单击屏幕底部窗口中的local标签,可以看到局部变量的值。
图3-2 auto标签图3-3 locals标签如果希望自己选择观察变量,在屏幕右下角的watch窗口中输入变量名。
图3-4 watch窗口如果希望自己选择观察变量,在源代码中选中变量的名字,右击将弹出一个菜单,在弹出的菜单中选择QuickWatch,将出现QuickWatch对话框,在expression框中可以看到刚刚选中的变量名,它的当前值将显示在CurrentValue 窗口中,如果变量超出范围,Watch窗口将在此变量名后面显示一条错误信息代替变量的值。
图3-5 QuickWatch 窗口(3) 调试函数如果程序中使用函数,可以使用来调试函数(单步调试函数中的语句),与之对应的可以跳过函数的调用(把函数作为简单语句)。
如果用调试比如printf这种标准库函数,追踪库程序的程序清单,将会是一个冗长的过程。
所以在程序调试时应该尽量避免此过程,除非真正对库程序感兴趣。
而且库函数都是经过时间考验的程序,应该不会错。
如果不小心做了追踪库函数的动作,不要担心,使用就可以跳出库函数的追踪。
一般用来调试自己写的函数。
明智的在和之间进行切换,取决于是否想探究特定函数的内部工作过程。
(4) 断点断点允许在任意位置暂停程序,这有什么用处呢?前面知道,可以通过选择Run菜单中的Run to Cursor来执行程序到光标所在位置,然而如果在多个位置暂停程序就需要执行此操作多次。
因为可以插入多个断点,所以断点可以解决这个问题。
怎样插入断点呢?首先定位光标到要插入断点的行,然后单击鼠标右键,在弹出的菜单中选择Insert/Remove BreakPoint,或者用快捷键F9,这将使得在左边空白区出现一个红色的圆点。
现在不论何时以全速运行程序(例如:debug 中的go项(F5)),程序都将在断点处暂停程序,此时可以检查变量、单步运行程序或者运行到另一个断点。