340 likes | 486 Views
第 13 章 C 语言综合应用程序设计. 13.1 多模块程序设计基础. 13.2 图形处理基础. 13.3 操作系统接口. 13.4 C 程序中的汉字显示技术. 13.1 多模块程序设计基础. 一 . 多模块程序的建立. 使用多模块编程技术的处理过程大致如下:
E N D
第13章 C语言综合应用程序设计 13.1 多模块程序设计基础 13.2 图形处理基础 13.3 操作系统接口 13.4 C程序中的汉字显示技术
13.1 多模块程序设计基础 一. 多模块程序的建立 使用多模块编程技术的处理过程大致如下: 首先将一个大型程序根据其功能合理地划分为若干个小的源程序,每个小源程序均以程序文件(文件扩展名为.C)的形式保存在磁盘上。例如,一个较在程序应该分解成file1.c、file2.c、file3.c、...等多个源程序,各自独立地保存在磁盘上。这些源程序可以进行单独编译,形成.OBJ文件,然后将这些文件组合成一个大的程序。 11.1 多模块程序设计
1.include方法 例如,一个大型程序分解为file1.c、file2.c两个小源程序. file1.c为: #include <stdio.h> #include ”file2.c” /*将源程序file2.c包含到源程序file1.c中*/ void main() { ┇ A2(); ┇ } file2.c为: #include <stdlib.h> void A2() { ┇ } 11.1 多模块程序设计
2.建立project文件 在Turbo C中,可以建立一个工程文件(文件扩展名为.prj),将各个源程序模块的文件名包含其中。再用编译器进行编译,将工程文件中指定的多个文件进行编译,生成多个目标文件和一个可执行的文件。 当某个文件有错时,例如,file1.c有错误时,编译器会报告错误。用户可对file1.c进行修改,修改后再编译时,编译器只会对file1.c进行重新编译,其它模块不再被编译,原来生成的目标文件仍可使用。 11.1 多模块程序设计
【例13-1】从键盘上输入两个整数,输出最大值、最小值及平均值。【例13-1】从键盘上输入两个整数,输出最大值、最小值及平均值。 分析: ◆在多模块设计中,首先是源程序拆分成几个小的源程序,每个小的源程序完成一个简单的功能。 ◆这里,可将源程序文件分成4个小源程序:file1.c、file2.c、file3.c和file4.c。其中file1.c是主函数,它的功能是从键盘输入两个整数i,j,然后分别调用函数max、min和average,最后在主函数中输出最大值、最小值及平均值。文件file2.c、file3.c和file4.c分别为求两个整数的最大值、最小值和平均值。 11.1 多模块程序设计
(1)建立一个以.prj为扩展名的工程文件 建立.prj工程文件与编写源程序的方法相同,只是这个文件的每行都是C的源程序名,例如文件内容为: file1.c file2.c file3.c file4.c /* 源程序的扩展名.c可以省略 */ 然后以.prj为扩展名将以上文件存盘,例如文件名为file.prj。 11.1 多模块程序设计
(2)对工程文件处理 在主菜单窗口下,选择菜单项Project/Project name,系统弹出一个如图13-1所示的窗口。这时,可在该窗口直接输入文件名file.prj或通过通配符选择文件file.prj。然后按热键Ctrl-F9或选择菜单项Compile/Compile to OBJ,即可对文件file.prj进行编译、连接,最后生成同名的可执行文件file.exe。 (3)选择菜单项Run/Run,运行file.exe文件, 11.1 多模块程序设计
二。 程序模块之间的通信 一个大型程序分解成若干个程序模块后,各个模块之间常常需要相互联系,一个模块中的函数可能要调用另一个模块中的函数;函数间也常常需要传递参数,返回处理结果。因此,在多模块编程中,需要解决模块之间的通信问题。 在C语言的多模块编程中,模块间通信往往使用外部变量。 extern int student;/*file2.*/ fun1() {student=50; … } function1()/*file1.c*/ { extern int student; … } 11.1 多模块程序设计
13.2 图形处理基础 一. 图形程序运行的条件 显示器的图形驱动程序主要有: att.bgi、cga.bgi、egavga.bgi、herc.bgi、 ibm8514.bgi、pc3270.bgi 、 bgiobj.exe. 图形程序运行的基本条件是: 将相应的显示驱动程序装入内存运行。 在C语言中,可通过调用函数initgraph对图形系统进行初始化来实现。 11.2 图形处理基础
左上角 x方向 (0,0) 屏幕 y 方 向 y x (x,y) 右下角 二. 基本图形处理函数及基本图形处理方法 图形屏幕的坐标与象素点 11.2 图形处理基础
1.图形系统初始化函数 (1)显示模式控制函数initgraph void far initgraph(int far *graphdriver,int far *graphmode,char far *path); int graphdriver=EGA; int graphmode=EGAHI; initgraph(&graphdriver,&graphmode, ”\\tc”); int graphdriver=DETECT; int graphmode; intgraph(&graphdriver,&graphmode, "\\tc"); 11.2 图形处理基础
(2)检测显示器硬件函数detectgraph void far detectgraph(int far *graphdriver,int far * graphmode); (3)清屏函数cleardevice void far cleardevice(void); (4)恢复文本显示方式(或关闭图形系统)函数closegraph void far closegraph(void); 11.2 图形处理基础
(5)恢复文本工作模式函数restorecrtmode void far restorecrtmode(void); (6)设置图形工作模式函数setgraphmode void far setgraphmode(void); 11.2 图形处理基础
2.基本图形处理函数 (1)画点、线函数 ① 画点函数putpixel void far putpixel(int x,int y,int color); ② 画线函数line void far line(int startx,int starty,int endx,int endy); 例: 编程,从在屏幕的左上角到屏幕的右下角画一条直线。 11.2 图形处理基础
(2)画多边形、矩形和条形图函数 ① 画多边形函数drawpoly void far drawpoly(int numpoints,int far *points); ② 画矩形函数rectangle void far rectangle(int left, int top, int right, int bottom); ③ 画实心条形图函数bar void far bar(int left,int top,int right,int bottom); 11.2 图形处理基础
topflag=0 topflag=1 (left,top) (left,top) depth depth (right,bootom) (right,bootom) (b) (a) 图13-3 函数bar3d参数的含义 ④ 画三维条形图函数bar3 void far bar3d(int left,int top,int right,int bottom,int depth,int topflag); 11.2 图形处理基础
(3)画圆、圆弧、扇形、椭圆函数 ① 画圆函数circle void far circle(int x,int y,int radius); ② 画圆弧函数arc void far arc(int x,int y,int start,int end,int radius); ③ 画扇形函数pieslice void far pieslice(int x,int y,int start,int end,int radius); ④ 画椭圆函数ellipse void far ellipse(int x,int y,int start,int end,int xradius,int yradius); 11.2 图形处理基础
结束角= 起始角=0 起始角和结束角 注意: 在Turbo C中对于角的规定是:屏幕x轴方向为0度,当半径从此处逆时针方向旋转时,则依次是90度、180度、270度。当为360度时,和x轴正向重合,即旋转了一周. 11.2 图形处理基础
模式 调色板号 颜色值 0 1 2 3 CGAC0 CGAC1 CGAC2 CGAC3 0 1 2 3 背景色 背景色 背景色 背景色 绿 青 淡绿 淡青 红 洋红 淡红 淡洋红 黄 白 棕 淡灰 3.颜色控制函数 屏幕上显示出的点、线、面的颜色称为前景色,而衬托它们的背景颜色称为背景色。 在初始化图形系统时,函数initgraph的参数graphmode用来确定屏幕显示模式,也就是用来选择“调色板”。 11.2 图形处理基础
颜色值 颜色 宏名 颜色值 颜色 宏名 0 1 2 3 4 5 6 7 黑 蓝 绿 青 红 洋红 棕 浅灰 BLACK BLUE GREEN CYAN RED MAGENTA BROWN LIGHTGRAY 8 9 10 11 12 13 14 15 深灰 淡蓝 淡绿 淡青 淡红 淡洋红 黄 白 DARKGRAY LIGHTBLUE LIGHTGREEN LIGHTCYAN LIGHTRED LIGHTMAGENTA YELLOW WHITE 16个标准色及其颜色值 11.2 图形处理基础
(1)前景颜色设置函数setcolor void far setcolor(int color); ( 2)背景颜色设置函数setbkcolor void far setbkcolor(int color); (3)填色函数setfillstyle void far setfillstyle(int pattern,int color); (4)封闭图形的填充函数floodfill void far floodfill(int x,int y,int bordercolor); 例,设计一个简单动画,将一个三维条形图从屏幕左上角向右下角移动。 11.2 图形处理基础
4.视口操作函数 在图形工作方式下,用户可以在屏幕上设置一个窗口,该窗口称为视口(viewport)。 视口中坐标也是以其左上角为参考点,每个视口的左上角坐标也为(0,0),它与物理屏幕坐标(左上角为(0,0)无关, (200,50) (0,0) (200,100) (400,150) 11.2 图形处理基础
(1)在屏幕上设置视口的函数setviewport void far setviewport(int x1,int y1,int x2,int y2,int clipflag); (2)视口清除函数clearviewport void far clearviewport(void); 例,利用视口的设置,设计一个简单动画,将一个方块图从屏幕左上角向右下角移动。 11.2 图形处理基础
5.图形模式下字符输出函数 (1)当前位置文本输出函数outtext void far outtext(char *str); (2)字符输出定位函数outtextxy void far outtextxy(int x,int y,char *str); (3)改变字型、大小和方向的函数settextstyle void far settextstyle(int font,int direction,int charsize); 11.2 图形处理基础
字体 值 含义 DEFAULT_FONT TRIPLEX_FONT SMALL_FONT SANS_FONT GOTHIC_FONT 0 1 2 3 4 8×8点阵 三倍笔划 小号笔划字体 无衬线笔划 黑体笔划 字符的字体 11.2 图形处理基础
13.3 操作系统接口 一. DOS简介 1. DOS的基本功能是对系统的基本输入输出进行控制及对内存和进程的管理。 2. DOS为用户引用其功能子程序,提供系统的软中断。 通过CPU的软中断指令INT n调用相应的程序。指令中的n是中断调用号(中断类型号),中断调用号不同,则调用的程序就不同。 3. 在Turbo C编译系统中,函数int86用于实现ROM-BIOS系统调用。 11.3 操作系统接口
软中断号 实现功能 软中断号 实现功能 05H 10H 11H 12H 13H 屏幕打印 显示器I/O处理 设备列表 内存空间管理 磁盘I/O处理 14H 15H 16H 17H 1AH 串行接口I/O处理 磁带机控制 键盘I/O处理 打印机I/O处理 时钟处理 二. 操作系统接口库函数 1.通用软中断调用库函数int86 int int86(int intno,uinon REGS * inregs,uinon REGS * outregs); 常用BIOS例行程序的软中断号和实现功能 11.3 操作系统接口
功能号 AH 功能和使用的 寄存器 功能号 AH 功能和使用的 寄存器 0 设置屏幕显示方式AL为显示代码 3 读光标位置,BH:页号 返回在以下寄存器中 DH:行坐标 DL:列坐标 CL:显示模式 1 设置光标类型 CH:光标开始 CL:光标结束 8 读光标位置的字符,BH:页号 返回值 AL:读取的字符 AH:字符的属性 2 设置光标位置 DH:行坐标 DL:列坐标 BH:页号 9 显示字符 AL:字符的ASCII码 BL:字符显示属性 BH:显示页号 CX:重复次数 INT 10H的部分功能 11.3 操作系统接口
2.系统功能调用库函数 (1)系统功能调用库函数intdos int intdos(union REGS *inregs,union REGS *outregs); (2)系统功能调用库函数intdosx int intdosx(union REGS *inregs,union REGS *outregs,struct SREGS *segregs); segregs是一个结构SREGS类型的指针,结构SREGS类型在dos.h头文件中定义如下: struct SREGS { unsigned int es; /*附加段*/ unsigned int cs; /*代码段*/ unsigned int ss; /*堆栈段*/ unsigned int ds; /*数据段*/ } 11.3 操作系统接口
3.发送DOS命令库函数system int system(char *cmd); 三. 鼠标器及其应用 1.鼠标器概况 2.鼠标器驱动程序 device=mouse.sys/1 /*其中的“1”表示安装在COM1接口*/ 3.鼠标器光标 4. 鼠标器INT 33H功能调用 11.3 操作系统接口
13.4 C程序中的汉字显示技术 一. 汉字显示的基本原理 1.国标汉字字符集与区位码 2.汉字内码 3.内码与区位码的转换关系及字模显示技术 11.4 汉字显示技术
二. 中文DOS下显示汉字 在中文DOS方式下编制显示汉字程序的一般方法是: 1.启动中文DOS系统,如UCDOS、联想DOS等。 2.利用中文编辑器编写C语言源程序,在源程序中的字符串直接用汉字书写。注意,C语言中的标识符不能使用汉字。 3.在TC集成开发环境下编译连接带有汉字的源程序,生成可执行文件。 4.在中文DOS系统中运行可执行文件。 11.4 汉字显示技术
三. 西文DOS下显示汉字 在西文DOS下汉字显示的基本方法是:获取汉字的汉字库字模数据,根据字模数据中各个字节的每一位是1还是0,确定对应输出的象素点是亮还是暗;对于为1的位,输出亮点,所有亮点的组合就是一个汉字的字形。 在实际处理中,可以采用画点或画线的方法显示汉字。 11.4 汉字显示技术
1.利用画点函数putpixel显示汉字 (1)打开点阵字库。 (2)计算字模地址,读取字模点阵信息。 (3)对汉字的所有字节的每位进行循环,若某位为1,显示一个亮点。 2.利用画线函数lineto显示汉字 void far setlinestyle(int linestyle,unsigned upattem,int thickness); 11.4 汉字显示技术