c实验指导书

更新时间:2024-05-14 05:05:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

C语言程序设计实验指导书

河北大学电子信息工程学院

2013年10月

目 录

一 C程序设计上机操作指导··················································· 1

二 C程序设计实验内容························································· 10

三 C语言课程设计······························································ 23

附录1 Turbo C各菜单的功能 ··············································· 27

附录2 常用快捷键······························································ 35

附录3 Turbo C图形功能简介及其函数······································ 36

第一章 C程序设计上机操作指导

程序设计是实践性很强的过程,任何程序最终都必须在计算机上运行,以检验程序的正确与否。因此在学习程序设计中,一定要重视上机实践环节,通过上机可以加深理解C语言的有关概念,以巩固理论知识,另一方面也可以培养程序调试的能力与技巧。 1.1 C语言程序的上机步骤

按照C 语言语法规则而编写的C 程序称为源程序。源程序由字母、数字及其它符号等构成,在计算机内部用相应的ASCII 码表示,并保存在扩展名为“.C”的文件中。源程序是无法直接被计算机运行的,因为计算机的CPU 只能执行二进制的机器指令。这就需要把ASCII 码的源程序先翻译成机器指令,然后计算机的CPU 才能运行翻译好的程序。 源程序翻译过程由两个步骤实现:编译与连接。首先对源程序进行编译处理,即把每一条语句用若干条机器指令来实现,以生成由机器指令组成的目标程序。但目标程序还不能马上交计算机直接运行,因为在源程序中,输入、输出以及常用函数运算并不是用户自己编写的,而直接调用系统函数库中的库函数。因此,必须把“库函数”的处理过程连接到经编译生成的目标程序中,生成可执行程序,并经机器指令的地址重定位,便可由计算机运行,最终得到结果。

C 语言程序的调试、运行步骤可以用图1 表示:

图1 C 语言程序的调试、运行步骤

图1 中,虚线表示当某一步骤出现错误时的修改路线。运行时,无论是出现编译错误、连接错误,还是运行结果不对(源程序中有语法错误或逻辑错误),都需要修改源程序,并对它重新编译、连接和运行,直至将程序调试正确为止。

除了较简单的情况,一般的程序很难一次就能做到完全正确。在上机过程中, 根据出错现象找出错误并改正称为程序调试。我们要在学习程序设计过程中,逐步培养调试程序的能力,它不可能靠几句话讲清楚,要靠自己在上机中不断摸索总结,它可以说是一种经验积累。

程序中的错误大致可分为三类: (1)程序编译时检查出来的语法错误; (2)连接时出现的错误;

(3)程序执行过程中的错误。

编译错误通常是编程者违反了C 语言的语法规则,如保留字输入错误、大括号不匹配、语句少分号等等。连接错误一般由未定义或未指明要连接的函数,或者函数调用不匹配等因素引起,对系统函数的调用必须要通过“include”说明。

对于编译连接错误,C 语言系统会提供出错信息,包括出错位置(行号)、出错提示信息。编程者可以根据这些信息,找出相应错误所在。有时系统提示的一大串错误信息,并不表示真的有这么多错误,往往是因为前面的一两个错误带来的。所以当你纠正了几个错误后,不妨再编译连接一次,然后根据最新的出错信息继续纠正。

有些程序通过了编译连接,并能够在计算机上运行,但得到的结果不正确,这类在程序执行过程中的错误往往最难改正。错误的原因一部分是程序书写错误带来的,例如应该使用变量x 的地方写成了变量y,虽然没有语法错误,但意思完全错了;另一部分可能是程序的算法不正确,解题思路不对。还有一些程序有时计算结果正确,有时不正确,这往往是编程时,对各种情况考虑不周所致。解决运行错误的首要步骤就是错误定位,即找到出错的位置,才能予以纠正。通常我们先设法确定错误的大致位置,然后通过C 语言提供的调试工具找出真正的错误。

为了确定错误的大致位置,可以先把程序分成几大块,并在每一块的结束位置,手工计算一个或几个阶段性结果,然后用调试方式运行程序,到每一块结束时,检查程序运行的实际结果与手工计算是否一致,通过这些阶段性结果来确定各块是否正确。对于出错的程序块,可逐条仔细检查各语句,找出错误所在。如果出错块程序较长,难以一下子找出错误,可以进一步把该块细分层更小的块,按照上述步骤进一步检查。在确定了大致出错位置后,如果无法直接看出错误,可以通过单步运行相关位置的几条语句,逐条检查,一定能找出错误的语句。

当程序出现计算结果有时正确有时不正确的情况时,其原因一般是算法对各种数据处理情况考虑不全面。解决办法最好多选几组典型的输入数据进行测试,除了普通的数据外,还应包含一些边界数据和不正确的数据。比如确定正常的输入数据范围后,分别以最小值、最大值、比最小值小的值和比最大值大的值,多方面运行检查自己的程序。

下面以TC2.0为上机平台,对C 程序编译、连接和调试作简单介绍。建议一开始学习上机时,把注意力放在程序的编译、连接和运行,已能运行为目标,只有具有一定的程序语句量,调试才有作用。 1.2 Turbo C语言集成环境

Turbo C 是一个常用的、最基本的C 语言工具,一般简称TC。它为C 语言开发提供了操作便利的集成环境。源程序的输入、修改、调试及运行都可以在TC 集成环境下完成,非常方便有效。TC2.0 系统非常小巧,但功能齐全。它主要支持DOS 环境,因此在操作中无法使用鼠标,更多的需要通过键盘操纵菜单或快捷键完成。这也成为使用TC 的一大遗憾。

1.2.1 TC启动

由于TC 支持DOS 环境,TC 系统的安装十分方便。如果有安装盘,可以按照提示一步一步完成安装;如果没有安装盘,可以从其他机器直接拷贝已安装好的系统。

由于TC 是在DOS 环境下工作的,无法像Windows 应用程序那样,通过“开始”菜

单的程序项运行。首先要找到TC 系统的安装(复制)目录,双击其上的tc.exe 应用程序,

可以启动TC 系统,其界面如图A-2 所示。

图2 TC 界面

图2 中,菜单包含了所有操作的功能;编辑窗口是用于输入、修改程序的区域;信息窗口将显示程序编译、连接和运行过程中的错误信息或有关提示信息;快捷热键提示将给出常用操作的快捷键提示信息,以方便用户的操作。

1.2.2 运行程序

要运行一个C 程序,必须经过:输入源程序、修改错误、编译连接和运行几个步骤。 (1)编辑

在编辑窗口中,直接输入程序。如果要进行修改,可以使用【↑】、【↓】、【←】、【→】四个方向键,移动光标到所需位置,然后删除错误,输入正确的内容。 (2)编译、连接和运行

同时按下【Ctrl】+【F9 】键, 将对编辑窗口中的程序,完成编译、连接和运行三个步骤。

●如果程序没有错误,将直接运行程序;

●如果存在编译错误,信息窗口中将显示错误信息,并终止连接与执行步骤;

●如果编译通过,但存在连接错误,信息窗口中将显示错误信息,并终止执行步骤。 任何错误都必须纠正后,重新按【Ctrl 】+ 【F9】键运行。如果还有错,继续修改,直到能正确执行为止。

即使通过了编译和连接,并不说明程序就没有错误了,解题思路错误或语句的错误使用(语句格式没有错),都会导致无法得到正确的结果,甚至程序无法正确执行。如果程序在执行过程中无法结束(死机),可以按【Ctrl】+【break 】强制结束。(【break 】位于键盘最右上角——功能键)。 (3)输入数据

如果程序中有scanf( )语句,则屏幕将出现一个黑底的输入窗口,等待输入数据,通常是输入一个数据,打一个空格或回车,然后输入下一个数据。直到输入完所有的数据。如果scanf( )语句中格式规定是逗号分隔,则各数据之间要输入逗号。

(4)查看结果

输入完数据,系统将自动关闭输入窗口,运行程序后,回到编辑窗口。但运行结果并未在屏幕上显示,若要查看运算结果,需要按【Alt】+ 【F5】才出现输出窗口。看完后,再按任意键将关闭输出窗口。

对于没有输入要求的程序,按下【Ctrl】+【F9】运行,屏幕上不会有什么变化,但这并不表示程序未被运行,按【Alt】+【F5】就能看到结果。通过上述步骤,读者可以快速掌握C 语言的上机过程,运行自己的程序。但还只能处理一些简单的问题,如果想更有效地调试运行C 程序,下面的内容是必不可少的。 (5)运行环境设置

第一次上机时,如果一个简单正确的程序却无法运行,需要检查一下运行环境是否设置正确。具体参看下面“Turbo C 菜单”中介绍的“Option”菜单项。

1.2.3 Turbo C 菜单

前面介绍的是上机过程中的最基本的一些操作。为了对TC 的功能有一个全面的了解,我们将对各主要菜单项分别予以介绍。

由于TC 环境下不能使用鼠标,对打开菜单栏有两种方法: (1)按【F10】,然后按【←】或【→】选择相应菜单位置,再按回车键【Enter】。 (2)按【Alt】+【菜单上红色大写字母】

当选中一个菜单后,会弹出下拉菜单项,通过【↑】或【↓】选择相应菜单项,再按回车键【Enter】, 完成菜单功能操作。按【Esc】可以取消菜单选择(不是撤销菜单功能)。

TC 中提供了完善的帮助信息,按【F1】屏幕上将弹出帮助窗口。但其中的信息都是英文的。

TC 的快捷键通常是组合键,如【Ctrl】+【F9】表示要同时按下两个键。对于三键的组合键,其前两个键要同时按下,松手后再按第三个键,如【Ctrl】+【k】+【b】表示先同时按下【Ctrl】键和【k】键,松手后再按【b】键。 (1)File 菜单(文件操作)

●Load(【F3】):调入一个已存在的程序文件(扩展名为c)。【F3】是快捷键。 ●Pick(【Alt】+【F3】):从最近曾经调入过的文件中选择一个调入。 ●New:清除编辑窗口中的程序,供输入一个新程序。 ●Save(【F2】): 把编辑窗口中的程序保存到文件中。如果该程序已经保存过,该操

作将更新文件内容;如果该程序是新输入的,需要进一步输入文件名称或路径。

● Write to: 把当前程序写到另外命名的文件上,相当于Windows 文件菜单中的“另

存为”功能。 ● Quit(【Alt】+【x】):退出TC 系统。 (2)Edit (编辑操作)

它没有下拉菜单,按回车键【Enter 】直接进入编辑窗口,在编辑过程中,一些常用的编辑功能依靠快捷键实现。

●【Ctrl】+【y】:删除光标所在行的整行信息。

●【Ctrl】+【k】+【b】:把光标所在位置定义为块信息的头部。 ●【Ctrl】+【k】+【k】:把光标所在位置定义为块信息的尾部。块头部定义与块尾部定义要按顺序配合起来使用,所定义的块变成白底蓝字。 ●【Ctrl】+【k】+【h】:取消所定义的块信息。若重新定义新块也会取消原定义块。 ●【Ctrl】+【k】+【c】:把定义的块信息复制到光标所在位置。 ●【Ctrl】+【k】+【v】:把定义的块信息移动到光标所在位置。

●【Ctrl】+【q】+【f】:查找特定字符,它会在屏幕上部提示输入查找字符,如图3 所示,当输入了“main ”后,屏幕上出现Option 信息,要求输入查找方式: a) G 对整个文件进行查找

b) 回车从光标当前位置向后查找

图3 字符查找

●【Ctrl】+【q】+【a】:替换字符串。它在上面查找的过程中,再输入替换字符Replace 。 ●【Ctrl】+【L】:重复上一次查找或替换。 ●【Ctrl】+【q】+【[]: 对光标所处位置的“(、[ 或 {” 定位相应的“}、] 或)”。

这在程序中检查三种括号是否匹配十分有用。

在“记事本”中选中一块文本,使用鼠标能很方便地实现。而在TC 中由于无法使用鼠标,只能通过键盘进行,我们需要定义文本块的开始位置和结束位置,当选中后,文字变成白底蓝字,然后才能实现文本块的复制和移动,步骤与“记事本”中相似。因此上述5个操作需要配合使用。

(3)Compile 菜单(编译连接操作) ●Compile(【Alt】+【F9】):把编辑窗口中的程序编译成目标文件。 ●Link:把编辑窗口中的程序连接成可执行文件。

●Make(【F9】):把编辑窗口中的程序经编译、连接,生成可执行文件。

(4)Run 菜单(运行操作) ●Run(【Ctrl 】+【F9】):执行编辑窗口中的程序。如果该程序最近未编译连接过,将先自动编译连接,然后再执行。 (5)Option 菜单(建立工作环境)

●工作环境目录的设置:如果使用安装盘安装,该工作环境目录会自动设置好。如果是通过系统复制的,则需要对“Option ”菜单的“Directories” 菜单项进行设置。假设TC 所在目录为:“D:\\TC”,在打开的目录窗口中应填入: Include directories: D:\\TC\\INCLUDE Library directories: D:\\TC\\LIB

以确保程序连接时能从这两个位置找到系统包含文件和系统库文件。如图4 所示

图4 TC 工作目录设置

●命令行参数输入:在学习了“指针”后,会用到命令行参数。可以执行“Option” 菜单的“Arguments” 菜单项,输入命令行参数(不包括可执行文件名,各参数用空格分隔), 回车结束输入,按【Esc】隐去菜单,然后可按【Ctrl】+【F9】运行程序,参数便能被主函数接受。

详尽的Turbo C 各菜单的功能见附录1

1.2.4 窗口操作

在图2 的TC 界面下,屏幕上半部分是编辑窗口,下半部分是信息窗口。如果想把编辑窗口扩大到整屏,可按【F5】键, 这时信息窗口将被遮住,再按【F5】键又可以恢复成上下两个窗口。因此【F5】键就像一个电源开关。如果编辑窗口被扩大到整屏,而又想看一下信息窗口,可使用【F6】进行窗口切换。如果在程序执行时又开了观察窗口,【F6】可以对三个窗口进行切换,切换过程是按一个方向循环。

在Windows 中运行TC, 所打开的窗口往往较小,边框线也不对。按【Alt 】+【Enter 】键可以使窗口最大化,成为仿真Dos 界面。再按【Alt】+【Enter】又会恢复较小窗口。 1.2.5 程序调试

TC 提供了必要的调试手段和工具,下面按照使用过程予以介绍。 (1) 让程序执行到中途暂停以便观察阶段性结果: 方法一:使程序执行到光标所在的那一行暂停。

①把光标移动到需暂停的行上;

②按【F4】或执行菜单Run 中的“Go to Cursor” 操作。当程序执行到该行将会暂停。如果把光标移动到后面的某个位置,再按【F4】,程序将从当前的暂停点继续执行到新的光标位置,第二次暂停。

方法二:把光标所在的那一行设置成断点,然后按【Ctrl】+【F9】执行,当程序执行到

该行将会暂停。设置断点的步骤为:

①把光标移动到需暂停的行上;

②按【Ctrl】+【F8】或执行菜单“Break/watch ”中的“Toggle breakpoint ”操作。不管是通过光标位置还是断点设置,其所在的程序行必须是程序执行的必经之路,亦即不应该是分支结构中的语句,因为该语句在程序执行中受到条件判断的限制,有可能因条件的不满足而不被执行。这时程序将一直执行到结束位置或下一个断点位置。

(2) 设置需观察的结果变量

按照上面的操作,可使程序执行到指定位置时暂停,其目的是为了查看有关的中间结果。按【Ctrl】+【F7】或菜单“Break/watch ”中的“Add watch ”操作,屏幕上将会弹出小窗口供输入查看变量,如图5 所示,输入了变量i 进行查看。

对于图5 中的例子,先把光标移动到第五行,然后按【F4】执行,程序到第五行暂停,如图6 所示,查看(Watch) 窗口中就会显示查看变量i 的当前值。绿色光条表示当前将被执行的程序位置(或暂停位置)。

多次使用【Ctrl】+【F8】可增加多个新的查看变量,如果想改变查看变量的名字或删除查看变量,可以按【F6】, 使查看窗口成为操作窗口,然后按回车键【Enter】, 可以改变查看变量,按删除键【Delete】可以删除查看变量。这些菜单功能分别在“Break/watch”中。

图5 输入查看变量

图6 查看中间结果

(3) 单步执行

当程序执行到某个位置时发现结果已经不正确了,说明在此之前肯定有错误存在。如果能确定某一小段程序可能有错,先按上面步骤暂停在该小段程序的头一行,再输入若干个查看变量,然后单步执行,即一次执行一行语句,逐行检查下来,看看到底是哪一行造成结果出现错误,从而能确定错误的语句并予以纠正。

单步执行按【F8】或执行菜单Run 中的“Step over”操作。如果遇到自定义函数调用,想进入函数进行单步执行,可按【F7】或执行菜单Run 中的“Trace into” 操作。对不是函数调用的语句来说,【F7】与【F8】作用相同。但一般对系统函数不要使用【F7】。 (4) 断点的使用

使用断点也可以使程序暂停。但一旦设置了断点,不管你是否还需要调试程序,每次执行程序都会在断点上暂停。因此调试结束后应取消所定义的断点。方法是先把光标定位在断点所在行,再按【Ctrl 】+【F8】或执行菜单“Break/watch ”中的“Toggle breakpoint” 操作,该操作是一个开关,第一次按是设置,第二次按是取消设置。被设置成断点的行将呈红色背景。如果有多个断点想一下全部取消,可执行菜单“Break/watch ”中的“Clear all breakpoints”操作。

断点通常用于调试较长的程序,可以避免使用【F4】(运行程序到光标处暂停)功能时,需要经常把光标定位到不同的地方。而对于长度为上百行的程序,要寻找某位置并不太方便。

如果一个程序设置了多个断点,按一次【Ctrl】+【F9】会暂停在第一个断点,再按一次【Ctrl】+【F9】会继续执行到第二个断点暂停,依次执行下去。

(5) 结束调试

TC 中通过“结束程序运行”(Program reset)来结束程序调试。按【Ctrl】+【F2】或执行菜单Run 中的“Program reset”操作实现。 (6) 循环的调试实例

下面用单步执行功能来看一下for 语句的执行流程。如图7 所示。程序中把for(..) 分成三行,以便观察执行流程。先把光标移动到第四行,然后按【F4】或执行菜单Run 中的“Go to Cursor ”操作,按【Ctrl】+【F7】输入查看变量i, 由于此时i 未赋过值,所以显示的是一个随机数。再连续按【F8】单步执行, 可以观察绿色光条的位置变动和查看变量i 的变化,绿色光条的位置变动就是程序执行的过程,学员可以充分体会到for

语句的执行流程。

图7 循环调试实例

通过这个例子,可以举一反三调试自己的程序了。 上面我们只对TC 中主要的功能作了介绍,对于其他的操作读者可以自己试验,或参考有关Turbo C 手册。 1.2.6 常用快捷键小结 【F2】:保存程序 【F3】:调入程序文件 【F4】:程序运行到光标处暂停 【Alt】+【F5】:查看运行结果 【F7】:单步执行(可进入函数) 【F8】:单步执行(不能进入函数) 【Ctrl】+【F2】:结束程序调试运行 【Alt】+【F3】:调入最近曾经用过的文件 【F5】:放大/缩小窗口

【F6】:窗口切换 【Ctrl】+【F7】:增加查看变量 【Ctrl】+【F8】:把光标所在行设为断点或取消段点 【F9】:编译、连接程序 【Alt】+【F9】:编译程序

【Ctrl】+【F9】:编译、连接、执行程序 【F10】:菜单选择 【F1】:帮助 【Alt】+【x】:退出系统 详尽的常用快捷键见附录2

第二章 C程序设计实验内容

实验1 C程序的运行环境及运行方法

1.实验目的、要求

(1)了解所用计算机系统的基本操作方法,学会独立使用该系统。 (2)了解在该系统上如何编辑、编译、连接和运行一个c程序。 (3)通过运行简单的C程序,初步了解C程序的特点。 2.实验内容

(1)进入Turbo C编辑环境。

(2)熟悉Turbo C集成环境,掌握各主要下拉菜单的功能及用法。 (3)输入程序并运行,观察运行结果。

a) #include “stdio.h”

int main( )

{ printf(“This is a C program.\\n”); return(0); }

b)

#include “stdio.h” int main( ) { int a,b,sum; a=123; b=456; sum=a+b;

printf(“sum is %d \\n”,sum ); return(0); }

(4)补全程序并运行,观察运行结果。 输入两个整数,将较小的数输出。 #include “stdio.h”

int main( ) { int a,b,c;

scanf(“%d %d”,&a,&b ); if(a>b) c= ; else c= ; printf(“min=%d \\n”,c); return(0); }

(5)编写程序,将该程序保存为my.c及d:\\my.c 。 输出以下信息

******************** This is a C program! ********************

3.思考及总结

功能键F2、F9、F10及快捷键Ctrl+F9、Alt+F5的功能。 如何编辑一个新文件和一个已存在的文件。 如何将 .c文件换名存盘。 4.易犯错误及纠正方法。

(1)实验内容(3)中的a)和b)是两段程序,不允许在同一个c程序中,即一个c

程序只允许有一个main()函数。

(2)实验内容(4)中,将程序补充完整后运行时,对a和b进行数据输入时,以空

格作为分隔。

(3)注意程序中的标点符号。

实验2 数据类型、运算符及表达式

1.实验目的

(1)掌握C语言数据类型,熟悉如何定义一个整型、字符型和实型的变量,以及对它们赋值的方法。

(2)掌握不同的类型数据之间赋值的规律。

(3)会使用C的有关算术运算符,以及包含这些运算符的表达式,特别是自加(+ +)和自减(——)运算符的使用。

(4)进一步熟悉C程序的编辑、编译、连接和运行的过程。 2.实验内容

(1)输入程序并运行,观察运行结果。 #include “stdio.h”

int main( ) { char c1,c2; c1=‘a’;

c2=‘b’;

printf(“%c %c\\n”,c1,c2); return(0); } ① 运行此程序。

② 增加一条语句

printf(“%d %d\\n”,c1,c2); 再运行,分析运行结果。 ③ 将第二行改为:

int c1,c2; 再运行,分析运行结果。 ④ 再将第3、4行改为: c1=a;

c2=b; 再运行,分析运行结果。 ⑤ 再将第3、4行改为:

c1=”a”;

c2=”b”; 再运行,分析运行结果。

⑥ 再将第3、4行改为: c1=300;

c2=400; 再运行,分析运行结果。

(2) 熟悉各种转义字符的功能及用法。 #include “stdio.h”

int main( )

{ printf(“ ab c\\t de \\b\\n”);

printf(“ gh\\ri\\tj\\\\\\101\\x61\\n”);

return(0); }

(3) 输入程序并运行,观察运行结果。 #include “stdio.h” int main( ) { int i ,j ,m ,n; i=8; j=9; m=++i; n=j++;

printf(“%d,%d,%d,%d”, i ,j ,m ,n); return(0); } ① 运行程序。 ② 将第4、5行改为: m=i++;

n=++j; 再运行。 ③ 将程序改为:

#include “stdio.h” int main( ) {int i,j; i=8; j=10;

printf(“%d,%d”,i++,j++); return(0); }

④ 在③的基础上,将printf语句改为:

printf(“%d,%d”,++i,++j); ⑤ 再将printf语句改为:

printf(“%d,%d,%d,%d”,i,j,i++,j++); ⑥ 将程序改为:

#include “stdio.h” int main( )

{ int i,j,m=0,n=0;

i=8; j=10; m+=i++;

n-=--j;

printf(“i=%d,j=%d,m=%d,n=%d”,i,j,m,n);

return(0); }

(4) 补全程序并运行,观察运行结果。

将“china”译成编码,规律为:用原来的字母后面第4个字母代替原来的字母。 #include “stdio.h” int main( )

{ char a1=‘c’, a2=‘h’, a3=‘i’, a4=‘n’, a5=‘a’; a1= ; a2= ; a3= ;

a4= ; a5= ;

printf(“密码为:%c%c%c%c%c”,a1,a2,a3,a4,a5); return(0); }

若将 “stdio” 译为 “pqafl”,程序将做如何修改。 3.思考及总结

如何理解变量在C语言中的“先定义,后使用”这一规则。 整型与字符型数据可以互相通用的条件。 字符常量与字符串常量的区别。

4.易犯错误及纠正方法

(1)在做实验内容(3)时,先分析运行结果,再上机运行,对照结果是否一致。 (2)在做实验内容(4)时,分析译码规律,结合整型与字符型数据通用的条件来补

全程序。

实验3 最简单的C程序设计

1. 实验目的、要求

(1)掌握C语言中使用最多的一种语句——赋值语句的使用方法。

(2)掌握各种类型数据的输入输出的方法,能正确使用各种格式字符串。 2. 实验内容

(1)输入程序并运行,观察运行结果并分析。 #include “stdio.h” int main( ) { int a,b; float d,e; char c1,c2;

实验8 编译预处理

1.实验目的、要求 (1)掌握宏定义的方法。 (2)掌握文件包含处理的方法。 (3)掌握条件编译的方法。

2.实验内容

(1)输入程序,观察运行结果并分析。

#define ADD(x) x+x

#include “stdio.h” int main( )

{ int m=1,n=2,k=3; int sum=ADD(m+n)*k; printf(“sum=%d” ,sum); return(0);}

(2)编写程序

a) 定义一个带参数的宏,使两个参数的值互换,在主函数中输入两个数作为宏的参

数,输出已交换后的两个值。 b) 用子函数实现两个值的互换,在主函数中输出已交换后的两个值。

(3)设计输出实数的格式,包括:①一行输出一个实数;②一行输出两个实数;③一行

输出三个实数。实数用“%6.2f”格式输出。

用一个文件print_format.h包含上述用#define命令定义的格式,在自己的文件中用#include命令将print_format.h文件包含进来。在程序中用scanf函数读入三个实数给f1,f2,f3。然后用上述定义的三种格式分别输出:①f1;②f1、f2;③f1、f2、f3。 3.思考及总结

总结C语言提供的预处理功能:①宏定义;②文件包含;③条件编译。 4.易犯错误及纠正方法

(1)在做实验内容(1)时,先分析运行结果,再上机运行,对照结果是否一致。 (2)在做实验内容(2)时,注意带参数的宏定义和函数调用两种方式使用上的区别。

实验9 指针

1.实验目的、要求

(1)掌握指针的概念,会定义和使用指针变量。

(2)能正确使用字符串的指针和指向字符串的指针变量。 (3)正确使用数组的指针和指向数组的指针变量。

(4)正确使用字符串的指针和指向字符串的指针变量。

(5)正确使用指向函数的指针变量;了解指向指针的指针的概念及其使用方法。 2.实验内容 (1)输入程序并运行,观察运行结果并分析。

sub( int x,int y,int *z ) { *z=y-x; } #include “stdio.h” int main( ) { int a,b,c; sub(10,5,&a); sub( 7,a,&b); sub( a,b,&c);

printf(“M ,M ,M\\n”,a,b,c); return(0); }

(2)补全程序并运行。

按字符顺序比较两个字符串s、t的大小,如果s大于t,则返回正值,等于返回

0,小于则返回负值。 #include“stdio.h”

sub(char *s, char *t )

{ for( ; *s = = *t ; ) if( *s = =‘\\0’) return 0; return( *s - *t ); }

#include “stdio.h”

int main( )

{ char a[20], b[10], *p, *q; int i;

p=a; q=b;

scanf(“%s%s” ,a,b); i=sub( ); printf(“%d”, i ); return(0); }

(3)编写程序

输入a、b、c、d四个数,按从大到小的顺序输出这四个数。应用指针变量做函数参数实现。 (4)编写程序

将一个3×3矩阵转置。在主函数中用scanf输入矩阵元素,将数组名作函数参数,

在子函数中实现矩阵转置,在主函数中输出转置后的矩阵。

3.思考及总结

如何理解“指针变量作函数参数,实参变量和形参变量之间的数据传递是单向的‘值传递’方式,调用函数不可能改变指针变量的值,但可以改变实参指针变量所指变量的值”这条结论。

(1)若有定义 int a[2][3]={2,4,6,8,10,12}; 则 *(&a[0][0]+2*2+1) 的值

为 ;

*(a[1]+2) 的值为 。

(2)若有以下定义语句 int a[4]={0,1,2,3}, *p ; p=&a[2] ; 则 *--p的值为 。

(3)若有以下定义语句 int s[2][3]={0}, (*p)[3];p=s;则p+1表示 。 (4)认真理解教材中P225表10.1的含义及P255表10.2的各种指针的含义。 4.易犯错误及纠正方法

(1)在做实验内容(1)时,先分析运行结果,再上机运行,对照结果是否一致。 (2)在做实验内容(2)时,先分析运行结果,注意静态局部变量的特性,再上机运行,

对照结果是否一致。

(3)实验内容(4)的编程思路为:四个数两两比较大小,子函数完成比较大小的功能,

按照题目要求完成数值顺序的调整。 (4)在做实验内容(5)时,注意实际参数和形式参数的设置及传递方式。

实验10 结构体与公用体

1.实验目的、要求

(1)掌握结构体类型变量的定义和使用。 (2)掌握结构体类型数组的概念和使用。 (3)掌握公用体的概念与使用。 2.实验内容

(1)输入程序并运行,观察运行结果

#include “stdio.h”

int main( ) { struct cmplx

{ int x;

int y;

} cnum[2]={1 , 3 , 2 , 7};

printf(“%d\\n”, cnum[0].y / cnum[0].x * cnum[1].x ); return(0); }

(2)输入程序并运行,观察运行结果

union ks { int a;

int b; };

union ks s[4]; union ks *p; #include “stdio.h” int main( )

{ int n=1, i;

printf(“\\n”); for(i=0;i<4;i++) { s[i].a=n;

s[i].b=s[i].a+1; n=n+2; }

p=&s[0];

printf(“%d,”,p->a); printf(“%d” ,++ p->a);

return(0); }

(3)编写程序

有10个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入10个学生数据,要求打印出3门课总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课成绩、平均分数)。要求用input 函数输入10个学生数据;用average函数求总平均分;用max函数找出最高分的学生数据;总平均分和最高分学生的数据都在主函数中输出。

3.思考及总结

结构体、公用体定义方式、引用方式和功能的相同点与不同点。 枚举类型的定义及应用场合。 用typedef定义类型的方法。 4.易犯错误及纠正方法

(1)在做实验内容(1)、(2)时,先分析运行结果,注意结构体、公用体的不同特性,再上机运行,对照结果是否一致。

(2)实验内容(3)综合性较强,包括函数调用和结构体的应用,提前做好预习工作,再上机实验。

第三章 C语言课程设计

C语言课程设计是电子信息工程学院各专业学生的一次重要的计算机程序设计实习环节。C语言课程设计不仅仅要求学生掌握一门计算机程序设计语言的基本知识,更重要的是培养学生掌握计算机程序设计开发的基本素质、思维方法和技能,为学生综合素质的培养打下坚实基础。实习的形式为教师制定出难易适中的设计题目,学生根据个人能力自主选题。学生实习的重点应放在实践计算机程序设计开发的全过程上。

C语言课程设计的形式为三个人一组,自由组合。每组选一个题目,确定组长。上机时坐在一起。学期结束前进行程序的运行演示和讲解,提交有详尽的注释的源程序和可执行程序,提交开发文档,说明程序的主要模块及功能、主要数据结构及意义、程序采用的核心算法及实现方式、小组成员的分工及完成情况。

C语言课程设计小组登记表格: 小组名称 题目 题目描述 姓名 学号 班级 联系电话 备注 良好的程序设计风格:

? 使用有意义的变量名

? 文档的模块化组织(缩进、对齐) ? 自顶向下的设计方法

? 增加程序的可读性(增加注释), ? 不要滥用语言技巧

C语言课程设计所用到的常用图形函数见附录3

C语言课程设计教学大纲

课程编号:130062

课程名称:C语言课程设计

英文名称:C Language Design 学分:1 学时:20

适用年级专业(学科类):一年级 电气信息类

一、课程概述 (一)课程性质

《C语言课程设计》是电气信息类学生的必修课,是一门专业基础实习课。学生通过本实习环节的学习培养用C语言编程的综合能力,为其它高级语言的学习打下良好的基础。

(二)课程目的和要求

课程目的是训练学生的计算机程序设计能力和思维方法,为学生今后学习其它计算机程序设计语言及培养计算机应用开发的综合素质打下基础。

本实习环节是一个实践性较强的环节,要求学生要理论联系实际,重点放在提高编程能力的训练上。 (三)教学的重点和难点

C语言课程设计是配合C程序设计课程和数据结构课程开设的综合实习环节,学生实习的重点应放在实践计算机程序设计开发的全过程上。

学生实习的难点主要是深入的理解C语言程序设计课程和数据结构课程的内容,掌握C语言中的常用函数的用法,针对题目设计算法,编写程序前的合理规划及调试。 (四)知识范围及与相关课程的关系

本实习环节的前续课程为《C程序设计》和《数据结构》。 (五)教材及教学参考书的选用

1.《C程序设计》,谭浩强,清华大学出版社,2005.7;

2.《数据结构(c语言版)》,严蔚敏 ,清华大学出版社,2001.02。

二、实习内容

教学目的和要求:训练学生运用所学知识开发设计计算机应用程序,培养学生独立分

析问题解决问题的能力和团队合作意识。

主要内容:由学生自由结组,自主选题,每组一题。通过实践操作,学会并掌握计算

机软件开发设计的过程。

实习题目:

1、文字编辑器:设计界面,实现中、英文字输入,能实现新建、保存、中英文字切换等功能菜单。

2、键盘电子琴:能通过键盘弹奏乐曲,通过PC喇叭播放音乐。能够播放简单的WAV

文件,支持键盘和鼠标操作 。主要应用dos.h下的处理声音的函数sound(long freg)发出特定频率的声音;nosound()停止发音;delay()延时特定时间发音等函数来实现。

3、简易图形编辑器:实现Windows下的画笔工具的部分功能,能够读写编辑位图(BMP)

文件 。实现类似Photoshop滤镜的部分功能,如锐化、模糊、凸出、扭曲、马赛克等,能够读写编辑位图(BMP)文件。

4、黑白翻转棋:二人对弈,系统判断输赢和禁手,具有计时和记分功能,保留纪录,

支持鼠标和键盘操作,能悔棋 。通过画图函数设定棋盘,设定二人对弈的有效范围,通过鼠标或键盘进行对弈,根据一定的规则,判断输赢。

5、五子棋:二人对弈,系统判断输赢和禁手,具有计时和记分功能,保留纪录,支持

鼠标和键盘操作,能悔棋 。通过画图函数设定棋盘,设定二人对弈的有效范围,通过鼠标或键盘进行对弈,根据一定的规则,判断输赢。

6、跳棋:二人对弈,具有计时和记分功能,保留纪录,支持鼠标和键盘操作,能悔棋 。 7、中国象棋:二人对弈,具有计时和记分功能,系统判断输赢和禁手,支持鼠标和键

盘操作,能悔棋一步 。

8、俄罗斯方块:可选择难度,可记分,保留最高分纪录,支持键盘和鼠标操作 。 9、挖雷游戏:实现Windows下的挖雷游戏功能 。

10、走迷宫:绘制和选择迷宫地图,系统能够自动寻找出口,支持鼠标和键盘操作 。

通过画图函数设定迷宫,运用数据结构的相关知识,利用一定的算法,实现单步找寻迷宫出口的操作。

11、汉诺塔的动态演示:自动移动盘子,要求能输入塔盘的数量,支持鼠标和键盘操

作。运用数据结构的相关知识,利用一定的算法,实现单步的动态演示。

12、华容道游戏:系统能够自动提示。要求用鼠标拖动并记录时间,支持鼠标和键盘操作

三、教学方式

以学生独立完成设计为主要形式,辅以基础知识的讲授。

四、课程考核

课程结束后,学生提交相关的电子开发文档,教师根据学生的分工开发情况给出成绩。

附录1 Turbo C 各菜单的功能

TC提供的菜单内容很丰富,有些内容虽然在一般情况下用得不多,但有时会用得着,读者应对它有些了解。

下面以表的形式简要列出全部菜单的功能。 File菜单的功能

附表1-1列出了File菜单各选项的功能。

附表1-1 File菜单各选项的功能

选 项 Load Pick 功 能 从当前目录或用路径指明的目录中,把一个源文件装入编辑缓冲区。该项被选中后弹出一个会话窗口,可以直接键入文件名,也可以键入*.PRJ等文件类型匹配符,列出相同类型文件的清单,移动光标进行选择。 该项被选中后打开一个Pick表。表中列出了启动TC后装入过的文件(不超过8个)。第一个文件是当前正在编辑的文件,其余是以前装入过的文件。第二个文件是用高亮条显示的,它是前面装入的文件。若是装入Pick表中的文件,则可按Alt+F3打开Pick表并从表中选择文件。这样做比使用File/Load(F3)方便且速度快。Pick表中的最后一项,New Save Write to Directory Change dir Os shell Quit 即Load file选择项与File/Load选择项是等价的。 清除编辑缓冲区,将新文件(NONAME.C)装入进行编辑。 将正在编辑的文件及时存盘。在第一次使用该命令存储新文件(NONAME.C)时,TC会弹出会话窗口提示用户改写文件名。 改变正在编辑的文件名,并写到磁盘上。 列出当前目录中的所有文件名,可选择其中一个文件装入编辑器。 改变当前目录,与DOS命令级的CD命令等价。 暂时离开TC返回DOS。此时TC仍然保存在内存中,键入exit后可以立即返回TC。 退出TC返回DOS。 Edit菜单的功能

TC主菜单中的Edit菜单无下拉菜单,选择Edit并按回车键后,即进入编辑状态,可以利用Turbo C提供的编辑功能进行源程序的编辑。附表1-2列出了TC编辑命令的功能。

附表1-2 Turbo C的编辑命令

分 类 命 令 ← → 功 能 左移一格 右移一格 命 令 Ctrl-A Ctrl-F 功 能 左移一词 右移一词 光 标 移 动 插 入 操 作 块 操 作 ↑ ↓ Ctrl-QE Ctrl-QX Ctrl-QP Page Up Page Down Insert 上移一行 下移一行 移到本窗口开始 移到本窗口底部 移到上次光标位置处 向前移一页 向后移一页 Insert on/off Ctrl-QR Ctrl-QC Home End Ctrl-W Ctrl-Z Ctrl-QB Ctrl-QK Ctrl-Y 移到文件开始 移到文件结尾 移到行首 移到行尾 向上滚动 向下滚动 移到块首 移到块尾 删除光标所在行 Del Backspace Ctrl-N Ctrl-KB Ctrl-KK Ctrl-KT Ctrl-KC Ctrl-KY 删除光标所指字符 删除光标前一个字符 插入一行 块头标记 块尾标记 单个词标记 块复制 块删除 撤销正在进行的操作 允许加入控制符 Indent on/off Tab模式on/off 联机帮助 文件存盘退出 Ctrl-T Ctrl-QY Ctrl-KH Ctrl-KV Ctrl-KR Ctrl-KW Ctrl-KQ Ctrl-QF Ctrl-QA Ctrl-QV Tab 删除光标左边一词 从光标处删除到行尾 显示/隐藏块标记 块移动 从磁盘读入块 把块写入磁盘 文件不存盘退出 查找 查找和替换 查找标记处 制表符 其 他 Ctrl-U Ctrl-P Ctrl-OI Ctrl-OT Ctrl-F1 Ctrl-KD 注:Ctrl-QE表示同时按Ctrl、Q、E三个键。

Run菜单的功能

附表1-3列出了Run菜单各选项的功能。

附表1-3 Run菜单各选项的功能

选 项 Run 功 能 编译、连接生成目标文件和可执行文件并运行。如果选择开关Debug/Source为on,则程序执行到每一个断点处都会暂停下来;再次选择该选项,程序将继续执行到下一个断点处或执行到结束处。 Program rest 用于动态调试。其作用是终止当前的调试操作,释放分配给程序的内存

空间,关闭已打开的文件,但不改变断点的设置。 Go to cursor 用于动态调试。使程序从执行条开始运行到编译窗口中的光标所在行上。若光标所在行不含可执行代码语句,则显示一个ESC框,给出警告。 Trace into Step over User screen 用于动态调试。单步跟踪程序执行,并跟踪进入被调用的子函数,包括系统函数。 用于动态调试。单步跟踪程序执行,但不跟踪进入被调用的子函数。 显示程序的输出结果(把编辑窗口切换到程序输出窗口)。 Compile菜单的功能

附表1-4列出了Compile菜单各选项的功能。

附表1-4 Compile菜单各选项的功能

选 项 Compile to OBJ 功 能 编译源文件,生成相应的目标文件。源文件是在Primary C file选项中记录的文件。如果在Primary C file选项中没有记录着文件Make EXE file 名,则源文件就是最后装入编译窗口中的文件。 生成可执行文件。如果处理的是.C文件,则编译并连接生成相应的.OBJ和.EXE文件。如果源文件的生成日期和时间比相应的.OBJ文件早,则不再对源文件进行编译。只有更新了源文件后才重新编译。如果处理的是.OBJ文件,则只进行连接,生成相应的.EXE文件。如果.OBJ文件的生成日期和时间比相应的.EXE文件早,则不进行连接,只有更新了.OBJ文件后才重新连接。对文件处理的顺序是:①Project name中的.PRJ文件;②Primary C file中的.CLink EXE file Build all Primary C file Get info Project菜单的功能

附表1-5列出了Project菜单各选项的功能。

选 项 Project name 附表1-5 Project菜单各选项的功能

功 能 弹出会话窗口,要求输入将要编译、连接的.PRJ文件名。用这种方文件;③最后装入编辑窗口中的.C文件。 连接.OBJ文件和系统库,生成.EXE文件。不检查日期和时间。 类似于Compile/ Make EXE file。只是不进行过时检查,即无条件重新编译与链接。 弹出一个对话窗口,要求输入将要编译或Make的新文件名。若在编译或连接时发现了错误,则把相应的文件装入编辑窗口。 弹出一个显示窗口。其中显示了当前目录、当前源文件及源文件的字节数、程序退出码以及可用存储空间等信息。 法生成的.EXE文件的主文件名就是.PRJ文件的主文件名。 Break make on 规定终止Make的缺省条件。此项被选择后弹出一个选择窗,其中有4个选项: Warning:在编译一个文件后,如果发现警告(warning)以上的错误,就停止编译。 Error:在编译一个文件后,如果发现警告(error),就停止编译。 Fatal Error:编译完全部文件后,如果发现致命错误,就停止编译。 Link:在链接前停止Make,即只生成.OBJ文件。 Auto dependencies 设置自动依赖关系。 On:自动检查.C文件与相应.Obj文件的日期和时间关系。TC在编译时把日期和时间信息存放在.OBJ文件中。若.C文件比.OBJ文件的日期和时间新,则重新编译。 Off:不进行日期和时间的检查。 Clear Project Remove message Debug菜单的功能

附表1-6列出了Debug菜单各选项的功能。

附表1-6 Debug菜单各选项的功能

选 项 Evaluate 功 能 弹出一个会话窗口,窗口中有3项内容:要计算结果的表达式(Evaluate)、表达式的结果(Result)和赋给表达式的新值(New value)。在调试过程中可以采用给某些变量赋新值的办法寻找错误。这一点是该选项与Break/Watch/Add watch选项不同的地方。 Call stack Find function Refresh display Display swapping 弹出一个调用栈显示窗口,其中显示了程序正在运行的函数调用序列。主函数在栈底,子函数在栈顶。 显示编辑窗口中某一个函数的定义。弹出一个会话窗口,在其中输入要显示的函数名并按回车后,光标就指向该函数的定义处。 万一编辑屏幕被重写,该选项可恢复当前屏幕内容。 控制编辑窗口与程序输出窗口的转换关系。弹出一个选择窗口,其中有3种选择: Smart(默认方式):执行代码产生输出时切换到程序输出窗口, 然后又返回到编辑窗口。 None:不进行屏幕切换。 Always:每执行一条语句切换一次屏幕。 Source 控制编译器是否在可执行文件中加入调试信息。弹出一个选择窗口,清除Project name并重置消息窗口。 清除消息窗口中的错误信息。 debugging 其中有3种选择: On:在可执行文件中加入调试信息,为源代码级调试做准备。 Standalone:在可执行文件中加入调试信息,但只能使用独立调试工具Turbo debugger。 None:不在可执行文件中加入调试信息。

Break/watch菜单的功能

附表1-7列出了Break/watch菜单各选项的功能。

附表1-7 Break/watch菜单各选项的功能

选 项 Add watch 功 能 弹出一个Add watch窗口,在该窗口中输入监视表达式后,watch窗口中将显示表达式的值。 Delete watch 删除监视窗口中最后加入的监视表达式。也可把光标移到watch窗中的某一表达式处,用Del键或Ctrl+Y键删除。 Edit watch Remove watches Toggle breakpoint 在光标所在行设置断点,再次执行该命令时删除该断点。 弹出一个编辑窗口,在该窗口中编辑最后加入的监视表达式。 all 删除观察窗口(watch窗口)中的所有表达式。 Clear all 删除所在断点。 breakpoint View

Options菜单的功能

Options菜单控制着集成环境的工作设置。改变其中的选择项可以改变编译、连接、调试的工作方式。在这个菜单中包含编译(Compiler)、连接(Linker) 、环境(Environment)、目录( Directories)、参数( Arguments)、保存任选项( Save options)、恢复任选项( Retrieve options)等7个子菜单。

Options菜单的内容很多,有许多细节,但对初学者他们一般不常使用。我们只介绍其中几种。

1、 编译子菜单

Compiler子菜单中的选项为用户提供了选择文件配置、内存模式、查找技术、代码优化、诊断信息控制、宏定义等功能。见附表1-8。

附表1-8 Compiler子菜单的功能

选 项 功 能 next 把光标移到下一个断点处。 breakpoint Model 弹出子菜单,允许用户选择Tiny,Small,Medium,Compact,Large,Huge等6种存储模式中的一种。 弹出一个窗口,可以在窗口中输入宏定义。 弹出一个子菜单,改变子菜单中的选项可以控制生成的目标代码的形式。 控制代码生成策略,弹出一个子菜单,供选择。 控制编译器如何处理源代码,弹出一个子菜单,提供以下选项:Identifier length:指定标识符中有效字符的个数,默认长度为32,可选值为1~32。 Nested comments On:允许使用嵌套注释。 Off:不允许使用嵌套注释。 ANSI keywords only On:只使用ANSI C的关键字,把Turbo C的关键字看作是用户定义的标识符; Off:允许使用Turbo C的关键字。 Defines Code generation Optimization Source Errors 控制编译器处理和相应诊断信息,弹出一个子菜单,供选择。 Names 改变代码、数据和BSS段的缺省段、组和类名,一般不需改变。 以上只给出各选项的功能,具体细节清查阅有关手册。

2、 连接子菜单

Linker子菜单中的选项可以改变连接程序的设置,如附表1-9所示。

附表1-9 Linker子菜单的功能

选 项 Map file 功 能 控制是否产生映射文件。 On:在当前目录或指定的输出目录中产生.MAP文件; Off:不产生映射文件。 Initialize segments Default libraries 控制连接程序是否对未初始化的段初始化。 On:对未初始化的段初始化(一般不需要); Off:不初始化。 当连接由其他编译程序产生的目标文件时,那些编译程序可能在目标文件中加入了默认库,该选项可控制连接程序是否在默认库中查找所需函数。 On:查找所需函数; Off 不查找所需函数。 Graphics library 打开或关闭自动查找图形库的开关。 On:在图形库中查找所需函数(当程序中有图形输出时使用该方式); Off:不在图形库中查找所需函数。若程序中有图形输出,选择Off时可在.PRJ文件中写上graphics.lib,也可以输出图形。 Warn symbols duplicate 检查.OBJ文件和.LIB文件中的重复符号。 On:当.OBJ文件和.LIB文件中有重复符号时产生警告信息; Off:不检查重复符号。 控制是否产生No stack警告信息。 On:产生No stack警告信息(在small模式情况中有时会产生这种信息); Off:不产生No stack警告信息。 Case-sensitive link

1、 环境子菜单

Environment菜单中的选项的作用是:设置文件是否自动存盘、制表键的空格数和显示屏幕行数等,为编辑程序设置环境,如附表1-10所示。

附表1-10 Environment子菜单的功能

选 项 功 能 Message tracking 当滚动信息窗口中的错误信息时,控制TC是否跟踪编辑程序中的语法错误及跟踪方式。 Current file:只跟踪编辑程序里的文件; All file:加载、跟踪与错误信息相对应的所有文件; Off:不跟踪。 Keep message 控制在编译、Make之前是否保存信息窗口中的错误信息。 Yes:保存在当前窗口中的错误信息,再次编译、Make时产生的信息跟在后面; No:在编译、Make之前清除所有错误信息。 Config auto save 控制是否保存选项设置。 On:选择Run/Run或File/Os shell(Quit)时,只要改变选项,TC自动将当前的选项保存到配置文件中; Edit auto save Off:不保存当前选项。 控制是否将正在编辑的文件自动存盘。 On:选择Run/Run或File/Os shell(Quit)时,自动将正在编译的源文件存盘; 控制是否区分大小写字母。 On:区分大小写字母; Off:不区分大小写字母。 Stack warning

Off:不存盘。 Backup files 控制是否产生备份文件。 On:当要覆盖一个磁盘上已存在的文件时,自动将原来的文件以.BAK为扩展名作为一个备份保存起来,然后再将当前文件存盘。 Off:不产生备份文件。 Tab size Zoomed windows Screen size 2、 目录子菜单

Directories菜单中的选择项可以选择头文件、库文件、编译器等所在的目录及可执行文件的输出目录,如附表1-11所示。

附表1-11 Directories子菜单的功能

选 项 Include directories Library directories Output directory 选择输出文件所在目录。 Turbo C directory 选择TC所在目录。 Pick file name 弹出一个窗口,允许用户规定pick文件名。默认的文件名为TCPICK.TCP,它是初启TC时自动加载的。如果用户没有规定pick文件名,则下面的选项Current pick file的设置为空;当规定了pick文件名时,将显示pick文件名。 Current pick file 显示当前pick文件的文件名和它所在的目录。这一选项只是一个提示信息,不能修改。

功 能 选择头文件所在目录。 选择库文件所在目录。 选择制表(Tab)键的空格数。默认值为8,可取值为2~16(Tab mode on)时有效。 与热键F5的作用一样。把当前激活的窗口(编辑窗或信息窗)放大到整屏。 弹出一个子菜单,允许选择显示屏幕的行数,标准为25,EGA为43,VGA为50。 附录2 常用快捷键

在集成环境下可以通过菜单操作完成各种工作,菜单中的许多选项都有与之对应的功能键,这些功能键称为热键。使用这些热键能够加快处理速度。在附表2列出了常用功能键及其功能。

附表2 常用功能键及其功能

功能键 F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 Shift+F10 Alt+F5 Alt+F7 Alt+F8 Alt+F9 Ctrl+F1 Ctrl+F2 Ctrl+F3 Ctrl+F4 Ctrl+F7 Ctrl+F8 Ctrl+F9 Alt+C Alt+D Alt+E Alt+F Alt+O Alt+P Alt+R Alt+X Esc 附录

功能 打开帮助文件,其中简要说明了TC的各种用法 把当前编辑的文件存储到磁盘上,见File/Save 装载一个文件,见File/Load 让程序从执行长条执行到光标所在行,见Run/Go to cursor 放大或缩小激活的窗口,见Options/Environment/Zoomed windows 交替激活编辑或信息窗口 单步执行程序,跟踪函数调用,见Run/Trace into 单步执行程序,不跟踪函数调用,见Run/Step over 编译并连接,见Compile/Make 返回主菜单 显示版本信息 显示用户屏,见Run/User screen 光标指向前一个错误处 光标指向下一个错误处 不进行日期和时间检查的编译,生成.OBJ文件 显示光标所指的关键词或函数的使用信息 终止调试操作 显示函数的调用序列,见Debug/Call stack 检查和改变表达式的值,见Debug/Evaluate 在观察窗口中输入表达式,见Break/Watch/Add watch 设置或清除断点,见Break/Watch/Toggle breakpoint 编译、连接并运行程序,见Run/Run 打开编译菜单 打开Debug菜单 进入编辑状态 打开File菜单 打开Options菜单 打开Project菜单 打开Run菜单 退出TC返回DOS 返回上一级菜单 3 Turbo C图形功能简介及其函数

Turbo C提供了PC系统环境下扩充的屏幕和图形支持系统。只要不把程序用于不同的计算机系统,你会觉得使用这些函数大大方便了编程,因为它们补充了相当多的内容以适应任何用途。实际上,完整的屏幕控制是最成功的商用程序所必须的。

函数原型和字符屏幕处理函数的头部信息在conio.h中,图形系统的有关信息和原型在graphics.h中。

图形系统要求graphics.lib库与程序相连接。如果是用命令行方式,必须在命令行中包括这个库名。例如,如果程序名为test,则命令行如下所示:

tcc test graphics.lib

如果是在综合开发环境中,需要把下面这一行写入TEST. PRJ文件中去。 test graphics.lib

Turbo C的图形函数可归纳为以下几个种类: ·屏显适配器模型设置 ·基本图形功能 ·字符输出

·屏幕状态 ·屏幕操作

在任何使用图形函数的程序中,都要求在头部包含文件graphics.h。

附录3.1 视口 (viewport) Turbo C所有图形函数都是在视口上操作的。视口实际上只是窗口的别名。图形视口实质上与字符窗口具有相同的特性,在没有定义视口的情况下,它是整个屏幕。也可以建立大小不同的视口,所有图形输出都是与当前视口有关系的,而视口未必是整个屏幕。 附录3.2 显示模式控制函数

在这些图形函数使用之前,必须把屏显适配器设置为某一种图形模式。在未经定义的情况下,绝大多数计算机系统都使用80列字符模式3。由于这不是图形模式,Turbo C的图形函数不能工作。若要将屏显适配器设置为图形模式,必须先用initgraph( )函数。其原型如下:

void far initgraph(int far *driver,int far *mode, char far *path); initgraph( )函数将图形驱动软件装入内存,该驱动软件为driver所指的数字。如果没有装入图形驱动软件,图形函数将不能操作。参数mode是图形函数用来确定屏显模式的整型指针。由path所指的字符串确定进入该驱动软件的路径。如果没有指出路径,就在当前目录下搜寻。

图形驱动软件包含在.BGI文件中,这个文件必须是系统可以得到的。但不必为文件的实际名字担忧,因为只需要用其数字来指定该驱动软件。在graphice.h中为用于此目的的数字定义了符号值。如下所示:

符号值 数值 DETECT 0 CGA 1 MCGA 2 EGA 3

EGA64 4 EGAMONO 5 RESERVED 6 HERCMONO 7 ATT400 8

VGA 9 PC3270 10 当选用了DETECT,initgraph( )会自动在当前系统下搜寻显示器硬件类型,并且选用最大可能的分辨率的屏显模式。

用函数setpalette( )可以改变调色板。该函数的原型是:

void far setpalette(int index,int color)

初次使用该函数会有些困难。实际上,该函数用一个表把color值和index联系起来。Turbo C用该表将所要求的颜色变换成屏幕上的实际颜色。

对于CGA模式,只有背景色能改变。而设置背景色总是取index=0。所以,对于CGA模式,下面的语句可将背景色改为绿色。

setpalette(0, GREEN);

EGA能在总共64种颜色中同时显示16种。可以用setpalette( )函数将某一种颜色设置为这16种不同颜色中的一种。例如,下面的语句设置颜色的值代表青色。 setpalette(5, EGA_CYAN);

如果用非法参数调用setpalette( ),它将返回-1L。

当要在EGA/VGA的调色板上设置所有颜色值时,用setallpalette( )函数更容易做到。该函数的原型为:

void far setallpalette(struct palettetype far *pal) 其中palettetype定义为: struct palettetype{ unsigned char size;

signed char colors[16]; }

必须将size设置为调色板的颜色种数,然后将每个颜色的编号值放到color数组对应的元素中去。

可以用函数setbkcolor( )只设置背景色。其原型为: void far setbkcolor( int color) color的值必须是下面所示之一。

颜色值 颜色

0 1 2 3 4

黑 兰 绿 青 红

5 6 7 8 9 10 11 12 13 14

洋红 棕 浅灰 深灰 浅兰 浅绿 浅青 浅红 浅洋红 黄

15 白

若要终止图形模式并返回到字符模式,用closegraph( ) 或 restorecrtmode( )。它们的原型为:

void far closegraph( )

void far restorecrtmode( ) 函数closegraph( )用于程序还要继续在字符模式下运行时。它释放由字符函数所占用的内存,同时把屏显模式恢复为调用initgraph( )之前的模式。如果程序要结束运行了,可以用restorecrtmode( )将屏显适配器设置到原来的模式,即首次调用initgraph( )之前的模式。

附录3.3 基本图形函数

最基本的图形函数不外乎画一个点、线和圆。在Turbo C中这些函数分别为putpixel( )、Line( ) 和circle( ) ,它们的原型为:

void far putpixel(int x, int y, int coror)

void far line(int startx, int starty, intendx, int endy) void far circle(int x, int y, int radius)

putpixel( )函数将color所指定的颜色写到x和y坐标确定的点上。line( )函数是从指定点startx, starty到endx, endy之间画一条直线,其颜色的为当前色。circle( )函数画一个以radius为半径的圆,颜色为当前绘图色,圆心位置在x, y处。如果任何坐标超出了范围,则超出部分不画。

可以用函数setcolor( )设置绘图的当前色。其原型如下: void far setcolor(int color)

color值一定要在当前图形模式下的有效范围内。

可以用函数floodfill( )填充任何封闭的图形。其原型如下:

void far floodfill(int x, int y, int bordercolor)

若用该函数去填充一个封闭的图形,则应以图形中任一点为坐标,以图形建立时边线的颜色为其颜色来调用该函数。一定要确保所要填充的图形是完全封闭的。如果不这样,图形以外的一些区域也将被填充。可以用当前的填充模式和颜色来填充图形,但也可以用setfillstyle( )来改变填充对象的填充模式。该函数的原型如下: void far setfillstyle(vint pattern, int color)

本文来源:https://www.bwwdw.com/article/yk97.html

Top