北京邮电C语言程序设计实验指导书10版 V1.0_第1页
北京邮电C语言程序设计实验指导书10版 V1.0_第2页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

1、 12/12北京邮电C语言程序设计实验指导书10版 V1.0 C语言程序设计 实 验 指 导 手 册 授课教师: 宋 茂 强 实验指导教师: 李 晶 教学对象: 一年级本科生 开课时间: 秋季学期 北京邮电大学软件学院 2010年8月 C语言程序设计实验指导手册 (2010年8月) 实验内容分为九部分,涉及到编程环境的使用,循环控制语句的练习,判断分支语句练习,函数的应用,模块化开发,数组和字符串的应用,结构体、指针以及链表的应用等,最终完成一个学生成绩管理系统的设计与实现。 关于实验的说明: 1. 实验环境为:Visual Studio C+ 6.0。 2. 有需要提交实验内容的部分在实验要

2、求一项中有提示。 3. 实验内容提交至:ftp:/59.6 4.164.17/软件学院/ 10级/软件学院10级C 语言程序设计用户名:student,密码:student。 4. 提交时请注意:每一部分都有对应的文件夹,每个班都有对应的文件夹。 提交内容时,遵守“学号-姓名”命名规则上传。比如,2010211501班某 同学张三,学号为100011,完成的第一部分实验包含了两部分:工程和 实验报告。工程的提交方法:找到“part 1”文件夹下 “10-01”文件夹,找 到“project”文件夹,并将工程打包为.rar包,命名为:100011-张三.rar, 传到这个文件夹下。实验报告的提交

3、方法:找到“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】选项卡,选择【Win32 Console Application】。在右面的【project na

4、me】栏中输入工程的名字,【location】项是指定当前的工程文件放在那个目录中,单击右面的按钮 可以进行更改。选择一个合适的目录(更为方便的方法是,在硬盘上建 立一个自己的目录,比如在D盘上建立一个目录名为C Programming, 那么,【location】这里就选择D: C Programming ,这样后面所有部分 的实验内容都可以放在这个目录下),最后单击【OK】。如图1-1所示。 图1-1 新建工程 注:Win32 Console Application即win32控制台应用程序,是基于DOS开发平台开发应用程序。 (2) 接着会出现win32 Console Applicat

5、ion-step 1 of 1窗口,只要单击 【Finish】就可以。 (3) 出现下面的窗口,如图1-2所示。 整个窗口分成三大部分,左边的是资源框,可以查看本项目中包含的文件,资源等。右边的是文件编辑区,现在为灰色,是因为还没有打开文件。下边的是输出框。编译信息,调试时的变量的值都在这个框中查看。 图1-2 VC6.0窗口组成 (4) 接下来要添加一个程序文件,用来输入程序代码。 i. 如果源文件已经存在,(比如你用记事本编辑的一个源文件,或者用 Dev-C+编辑的一个源文件,现在想用VC6.0重新编译运行一下), 只需把源文件添加进工程里。单击【project】菜单条,选择【add to

6、 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 新建文件 然后

7、可以观察到在左侧的资源框中出现了新建的源文件。接下来可以在编辑框中输入源程序,如图1-5所示。注意保存源程序。 图1-5 输入源程序 到此为止,我们已经建立好了一个完整的工程。如果工程不需要添加第三方类库,那么可以直接跳转到第(6)步。 (5) 为工程添加第三方类库。 i. 添加头文件。 ?将.h文件拷贝到工程所在的目录中。如,我们课本上的源文件都有用到这样一个头文件:genlib.h,那么大家需要将genlib.h这 个文件拷贝到你的工程目录中去。 ?在左侧资源框中,右键点击工程的根结点,选择【add Files to Project】。在弹出的对话框中找到相应的头文件(后缀为.h),确 定

8、。 ii. 添加第三方类库。 ?将.lib文件拷贝到工程所在的目录中。如,我们课本上的源文件都有用到这样一个类库:CSLIB.lib,那么大家需要将CSLIB.lib 这个文件拷贝到你的工程目录中去。 ?在左侧资源框中,右键点击工程的根结点,选择【add Files to Project】。在弹出的对话框中找到相应的库文件(后缀为.lib), 确定。 (6) 程序编译、链接、运行。 i. 在Build菜单中,Compile(Ctrl+f7)编译源文件。如果在输出框中 看到如图1-6红框内的提示,那么编译就通过了,否则,请检查源程 序。 图1-6 编译结果 ii. Build(F7)链接。如果在

9、输出框中看到如图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和contin

10、ue程序控制语句。 2. 实验内容 (1) 修改“第二讲”中的“Add certain numbers”例子,使其完成一个学生 平均成绩的统计。 (2) 修改“第二讲”中的“Add indeterminate numbers”例子,使其完成一 个学生平均成绩的统计。 (3) 前两项实验内容中,约定: i. 输入的成绩应为double类型数据,从键盘获得double类型数据的 函数为GetReal()。 ii. 最后输出的平均成绩保留一位小数位。 (4) 如果将该程序中的while循环改为for循环应该怎样实现? 3. 实验要求 (1) 编码规范,解释清晰。 (2) 提交的结果包括: ? VC6

11、.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 In

12、to (F11):单步执行,遇到函数调用,会step into(跳进)函数体中,一步步显示被调用函数的执行。 Step Over(F10):单步执行,遇到函数调用,会跳过函数体。 Step Out (Shift+F11):从函数中跳出。 Run to Cursor(Ctrl +F10):运行到光标。 如果想从程序的某个地方而不是从程序头开始,先定位光标到想开始调试的那一行代码上,然后在Debug菜单(调试时代替Build菜单)中选择Start Debug 中Run to Cursor项,黄色箭头将出现在紧接着所选择语句的左边边框中。现在 按下,将使调试器步进到下一条语句上,黄色箭头将标明位置。

13、如果在循环中,可以发现黄色箭头在循环体内的语句间顺序向下移动,然后又跳回循环的顶端。 (2) 观察变量 在单步调试程序时,可以观察变量的值的改变情况。这个窗口可以显示所有当前执行上下文中可见的变量的值。特别是当前指令涉及的变量,以红色显示。Auto标签显示编译器选择的变量值。单击屏幕底部窗口中的local标签,可以看到局部变量的值。 图3-2 auto标签 图3-3 locals标签 如果希望自己选择观察变量,在屏幕右下角的watch窗口中输入变量名。 图3-4 watch窗口 如果希望自己选择观察变量,在源代码中选中变量的名字,右击将弹出一个菜单,在弹出的菜单中选择QuickWatch,将出

14、现QuickWatch对话框,在expression框中可以看到刚刚选中的变量名,它的当前值将显示在CurrentValue 窗口中,如果变量超出范围,Watch窗口将在此变量名后面显示一条错误信息代替变量的值。 图3-5 QuickWatch 窗口 (3) 调试函数 如果程序中使用函数,可以使用来调试函数(单步调试函数中的语句), 与之对应的可以跳过函数的调用(把函数作为简单语句)。如果用调试比如printf这种标准库函数,追踪库程序的程序清单,将会是一个冗长的过程。所以在程序调试时应该尽量避免此过程,除非真正对库程序感兴趣。而且库函数都是经过时间考验的程序,应该不会错。如果不小心做了追踪库

15、函数的动作,不要担心,使用就可以跳出库函数的追踪。一般用来调试自己写的函数。明智的在和之间进行切换,取决于是否想探究特定函数的内部工作过程。 (4) 断点 断点允许在任意位置暂停程序,这有什么用处呢?前面知道,可以通过选择Run菜单中的Run to Cursor来执行程序到光标所在位置,然而如果在多个位置暂停程序就需要执行此操作多次。因为可以插入多个断点,所以断点可以解决这个问题。 怎样插入断点呢?首先定位光标到要插入断点的行,然后单击鼠标右键,在弹出的菜单中选择Insert/Remove BreakPoint,或者用快捷键F9,这将使得在左边空白区出现一个红色的圆点。现在不论何时以全速运行程

16、序(例如:debug 中的go项(F5),程序都将在断点处暂停程序,此时可以检查变量、单步运行程序或者运行到另一个断点。 如果要移去断点,只需在断点处按下快捷键F9,或者右击红点,选择Remove BreakPoint。 调试器还有多种其他得特征,上面讨论的仅仅是入门。 3. 实验要求 (1)根据实验内容掌握C程序的调试方法。 第四部分:判断语句和分支语句练习(2学时) 1. 实验目的 (1) 理解并掌握if语句和switch语句的基本使用方法。 (2) 理解并学会使用逻辑运算符。 2. 实验内容 (1) 使用C语言构建一个成绩管理系统的两个功能模块:登录模块以及用户 根据提示菜单选择要进行的

17、操作模块。 3. 实验要求 (1) 登录模块的实现要求: i. 程序启动后,要求用户首先输入登录该系统的口令。这里有一个假 设条件:假设成绩管理系统的口令必须为整数。 ii. 当用户输入口令后,登录模块要进行口令的验证。如果口令合法(也就是说用户输入的口令与我们设定的口令一致),那么提示用户“登录 成功”;否则,提示用户“登录失败,口令不正确”,请重新输入。用 户尝试输入口令的次数不得超过三次,否则强制退出程序。 iii. 使用if语句实现。 (2) 用户根据提示菜单选择要进行的操作模块的实现要求: i. 程序启动后,给用户提示信息,如下图: ii. 用户根据需要输入自己的选择。如果用户选择1

18、,则提示用户“即将进行的操作是输入成绩”;如果用户选择2,则提示用户“即将进行的 操作是输出成绩”;如果用户选择3,则提示用户“即将进行的操作是 成绩查询”;如果用户选择4,则程序结束。 iii. 使用switch语句实现。 (3) 编码规范,解释清晰。 (4) 提交的结果包括: ? VC6.0工程 ?其他文档: i. 关于实验完成人、提交结果描述等补充说明readme.txt。 第五部分:函数的应用(2学时) 1.实验目的 (1)了解函数作为简化程序结构的工具的重要性。 (2)了解函数调用的概念以及为什么要在函数调用中提供参数。 (3)了解什么是函数原型以及如何编写函数原型。 (4)理解在函

19、数间传递信息的机制。 (5)能够创建新的函数,并实现调用。 2.实验内容 (1)将实验四中实现的两个模块修改为两个函数,通过一个main函数来调用 两个函数实现用户登录并选择要进行的操作。 3.实验要求 (1)程序启动后,main函数首先调用登录模块来对用户输入的口令进行验证, 如果验证不合法则提示用户“登录失败,口令不正确”;否则,给用户显 示提示菜单,请用户选择要进行的操作。 (2)函数声明列表: 序号函数原型说明备注 displayMenu() 显示提示菜单 1 void login(int password) 验证口令,如果合法则返回 2 int 1,否则返回0。 (3)编码规范,解释

20、清晰。 (4)提交的结果包括: ?VC6.0工程 ?其他文档: i.关于实验完成人、提交结果描述等补充说明readme.txt。 第六部分:模块化开发(2学时) 1.实验目的 (1)认识把单个程序分为多个单独模块的重要性。 (2)理解如何用函数来构建模块化的程序。 (3)能够应用逐步精化作为问题求解的策略。 2.实验内容 (1)从一个使用者的角度出发,考虑成绩管理系统的使用人员最常见的功能 都有哪些? (2)从一个程序开发者的角度出发,考虑如何采用自顶向下逐步精化的设计 方法,从主程序的层次着手,依次将前述的功能对应于一个函数(注意,每个函数解决整个问题中的一部分),最后将所有的函数细化为伪代

21、码。 3.实验要求 (1)分别采用伪代码和流程图来描述每个模块。 (2)提交的结果包括: ?伪代码 ?流程图 (3)上述两部分内容请保存并放置于后面第九部分内容中需要提交的实验报 告中。 第七部分:数组以及字符串的应用(4学时) 1.实验目的 (1)掌握如何定义数组,初始化数组以及引用数组中的单个元素。 (2)掌握如何使用数组对一组值进行存储、排序及查找。 (3)能够将数组作为参数传递给函数。 2.实验内容 (1)实验六中你所想到的成绩管理系统的基本功能都有哪些?最基本的功能 是否应该包含:成绩输入、成绩输出、成绩查询、成绩排序? (2)请以一维数组为数据结构来实现上述的功能。针对上述实现,存

22、在以下 约束: i.假设我们的成绩管理系统中,只存储成绩,而不管理学生。 ii.假设系统最多可以管理20个成绩。 iii.系统中存储的成绩均为整数。 iv.成绩输入时需要判断输入成绩是否是介于0与100之间的数字。 v.查询成绩时,如果存在重复的成绩,那么需要返回所有符合条件的成绩所在数组元素的下标。 vi.按照由高到低的顺序对成绩排序,排序结束后要输出排序的结果,排序方法使用选择排序法。 vii.在对成绩进行查询、输出、排序时,如果系统中没有成绩应给予提示。 (3)修改实验五中的验证模块,口令可以为任意字符。从命令行获得一个字 符串的函数GetLine();比对两个字符串是否相同,可使用函数

23、库string.h 中的int strcmp(char *str1, char *str2)函数,如果两字符串相等则返回0, 否则非零。 (4) 将实验五中的登录模块和用户根据提示菜单选择操作模块合并到你所实 现的系统中。要求用户必须先输入口令,然后才能开始对成绩进行管理 和操作。 3. 实验要求 (1) 函数声明列表: 序号 函数原型说明 备注 1 void displayMenu() 显示提示菜单 2 int login() 验证口令,如果合法返回1, 否则,返回0。 3 int inputScore(int score,int length) 输入学生成绩到数组中,输入 参数为存储学生成

24、绩的数组 以及数组的最大长度,返回值 为数组中实际存储的元素个 数。 4 void outputScore(int score,int length) 输出数组中的学生成绩,输入 参数为存储学生成绩的数组 以及数组中存储元素的个数。 5 void queryScore(int score,int length,int xScore) 查询成绩,成功返回下标;否则输出没找到。 6 void sortScore(int score,int length) 排序学生的成绩,按照从大到 小排序。 (2) 编码规范,解释清晰。 (3) 提交的结果包括: ? VC6.0工程 ? 其他文档: i. 关于实验

25、完成人、提交结果描述等补充说明readme.txt 。 第八部分:结构体、指针及链表的应用(4学时) 1. 实验目的 (1) 掌握如何定义结构体和声明一个结构体变量。 (2) 掌握指针的基本操作。 (3) 理解指针和数组间的关系。 (4) 能够通过引用调用在函数机器调用程序之间共享数据。 (5) 掌握链表的基本使用方法。 2. 实验内容 (1) 如果成绩管理系统中管理的不仅是成绩,而是要求学生信息与其成绩信 息关联。有没有这样一种数据结构能够同时存储学生信息和成绩信息? (2)请使用结构体来改进实验七的成绩管理系统。 该系统的约束如下: i.数组元素的数据结构采用结构体,该结构体中需要包含学生

26、的学号、 姓名、成绩等基本信息,并假设该系统每名学生只有一门课的成绩。ii.假设系统中可以存储20名学生的成绩。 iii.修改后,成绩管理系统包含登录模块、用户根据提示菜单选择操作模块、输入学生信息模块(即输入学生姓名、学号信息以及成绩)、 输出学生信息模块(即将学生的基本信息与成绩信息一并输出)、查 询学生信息模块(即输入学生的学号或姓名,返回学生的全部信息)、 按成绩排序模块。 iv.输入学生信息模块有如下验证: a)输入的学号必须是三位数字且学号唯一。 b)输入的姓名必须是字母。 c)输入的成绩必须是正整数。 v.查询使用学号进行。首先对用户输入的学号进行正确性检查(判断用户输入的是否是

27、合法学号)。如果用户输入学号不正确,提示“您 输入的学号格式不正确”;如果用户输入的学号正确则进行查询。如 果查询有结果,则返回该名学生的信息;如果没有,那么提示用户 “没有找到相关信息”。 vi.在对成绩进行输出、排序时,如果系统中没有成绩应给予提示。(3)请使用链表来改进实验七的成绩管理系统,链表的每个结点的数据结构 为结构体。该系统的约束如下: i.链表每个结点的数据结构采用结构体,该结构体中需要包含学生的 学号、姓名、成绩等基本信息,并假设该系统每名学生只有一门课 的成绩。 ii.修改后,成绩管理系统包含登录模块、用户根据提示菜单选择操作模块、输入学生信息模块(即输入学生姓名、学号信息

28、以及成绩)、 输出学生信息模块(即将学生的基本信息与成绩信息一并输出)、查 询学生信息模块(即输入学生的学号或姓名,返回学生的全部信息)、 按成绩排序模块。 iii.输入学生信息模块有如下验证: a)输入的学号必须是三位数字且学号唯一。 b)输入的姓名必须是字母。 c)输入的成绩必须是正整数。 iv. 查询使用学号进行。用户输入学号,如果查询有结果,则返回该名学生的信息;如果没有,那么提示用户“没有找到相关信息”。 v. 在对成绩进行查询、输出、排序时,如果系统中没有成绩应给予提 示。 3. 实验要求 (1) 上述实验内容学生可根据实际情况选择数组或者链表中的一种来实现。 数组实现的函数声明列

29、表: 序号 函数原型说明 备注 1 void displayMenu() 显示提示菜单 2 int login() 验证口令,如果合法则返回1, 否则返回0。 3 int uniqueNumber(NODE *stuArray, char *number) 验证输入学号的唯一性,如果唯一则返回1,否则返回0。 4 NODE * inputInfo(NODE *stuArray) 输入信息到数组中,返回指向 数组第一个元素的指针。 5 void outputInfo(NODE *stuArray) 输出数组中的数据。 6 void queryInfo(NODE *stuArray, string

30、 stuNum) 按学号查询数组中的学生信息7 NODE * sortScore(NODE *stuArray) 按成绩降序对数组中的学生信 息进行排序,返回指向数组第 一个元素的指针 注:NODE 为结构体类型。 链表实现的函数声明列表: 序号 函数原型说明 备注 1 void displayMenu() 显示提示菜单 2 int login(char password) 验证口令,如果合法则返回1, 否则返回0。 3 int uniqueNumber(NODE *stuList, char *number) 验证输入学号的唯一性,如果唯一则返回1,否则返回0。 4 NODE * inputInfo(NODE *stuList) 输入信息到链表中,返回指向 链表头的指针。 5 void outputInfo(NODE *stuList) 输出链表中的数据。 6 void queryInfo(NODE *stuList, string stuNum) 按学号查询链表中的学生信息7 NODE * sortScore(NODE *stuList) 按成绩降序对链表中的学生信 息进行排序,返回指向链表头 结点的指针 8 NODE * addInfo(NODE *stuList, NODE *

温馨提示

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

评论

0/150

提交评论