![第12章 C語言綜合應(yīng)用程序示例_第1頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/3/781bdfac-6688-478f-8a70-959863464396/781bdfac-6688-478f-8a70-9598634643961.gif)
![第12章 C語言綜合應(yīng)用程序示例_第2頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/3/781bdfac-6688-478f-8a70-959863464396/781bdfac-6688-478f-8a70-9598634643962.gif)
![第12章 C語言綜合應(yīng)用程序示例_第3頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/3/781bdfac-6688-478f-8a70-959863464396/781bdfac-6688-478f-8a70-9598634643963.gif)
![第12章 C語言綜合應(yīng)用程序示例_第4頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/3/781bdfac-6688-478f-8a70-959863464396/781bdfac-6688-478f-8a70-9598634643964.gif)
![第12章 C語言綜合應(yīng)用程序示例_第5頁](http://file2.renrendoc.com/fileroot_temp3/2021-11/3/781bdfac-6688-478f-8a70-959863464396/781bdfac-6688-478f-8a70-9598634643965.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、返回12.1 12.1 多模塊編程方法多模塊編程方法12.2 12.2 圖形處理應(yīng)用圖形處理應(yīng)用12.3 12.3 操作系統(tǒng)接口應(yīng)用操作系統(tǒng)接口應(yīng)用12.4 C12.4 C語言與匯編語言混合編程語言與匯編語言混合編程12.5 12.5 綜合應(yīng)用程序舉例綜合應(yīng)用程序舉例漢字顯示技術(shù)漢字顯示技術(shù) 一個(gè)有實(shí)用價(jià)值的一個(gè)有實(shí)用價(jià)值的C語言應(yīng)用程序往往較大,需語言應(yīng)用程序往往較大,需要?jiǎng)澐殖刹煌哪K,分配給不同的程序員去完成。要?jiǎng)澐殖刹煌哪K,分配給不同的程序員去完成。因此,在實(shí)用軟件的開發(fā)中,往往需要采用多模塊編因此,在實(shí)用軟件的開發(fā)中,往往需要采用多模塊編程技術(shù)。程技術(shù)。12.1 12.1 多模
2、塊編程方法多模塊編程方法 使用多模塊編程技術(shù)的處理過程大致如下:使用多模塊編程技術(shù)的處理過程大致如下:1 1、首先首先將一個(gè)大的源程序根據(jù)其功能合理地劃分成將一個(gè)大的源程序根據(jù)其功能合理地劃分成若干個(gè)小的源程序,每個(gè)小源程序均以程序文件若干個(gè)小的源程序,每個(gè)小源程序均以程序文件(.C)(.C)的形式保存在磁盤上。的形式保存在磁盤上。并建立一個(gè)包括各個(gè)源程序并建立一個(gè)包括各個(gè)源程序模塊的文件名的工程文件模塊的文件名的工程文件(.prj)(.prj)。 12.1.1 程序模塊組織程序模塊組織下一頁下一頁 第12章 C語言綜合應(yīng)用程序舉例上一頁上一頁2 2、然后然后用編譯器進(jìn)行編譯,將工程文件中指定
3、的用編譯器進(jìn)行編譯,將工程文件中指定的多個(gè)源程序文件進(jìn)行編譯,生成多個(gè)目標(biāo)文件和一多個(gè)源程序文件進(jìn)行編譯,生成多個(gè)目標(biāo)文件和一個(gè)可執(zhí)行文件。注意,在分模塊單獨(dú)編譯處理的各個(gè)可執(zhí)行文件。注意,在分模塊單獨(dú)編譯處理的各個(gè)程序模塊中,必須有且只有一個(gè)主函數(shù)個(gè)程序模塊中,必須有且只有一個(gè)主函數(shù) main( ) 。 下一頁下一頁 第12章 C語言綜合應(yīng)用程序舉例上一頁上一頁12.1.2 12.1.2 模塊之間的通信模塊之間的通信1 1、使用外部變量使用外部變量 即一個(gè)程序文件即一個(gè)程序文件file1.c中定義一個(gè)外部變量,另中定義一個(gè)外部變量,另一個(gè)程序文件一個(gè)程序文件file2.c中的函數(shù)可以通過外部
4、變量說明中的函數(shù)可以通過外部變量說明后來使用這個(gè)變量,以實(shí)現(xiàn)模塊間的通信。后來使用這個(gè)變量,以實(shí)現(xiàn)模塊間的通信。 說明形式:說明形式:extern 類型說明符類型說明符 外部變量名外部變量名 ; 注意:只是進(jìn)行了說明,并不是變量定義注意:只是進(jìn)行了說明,并不是變量定義2、舉例舉例 利用外部變量實(shí)現(xiàn)程序模塊利用外部變量實(shí)現(xiàn)程序模塊f1.c與程序模塊與程序模塊f2.c之之間的通信。間的通信。 設(shè)程序模塊文件設(shè)程序模塊文件 f1.c 的內(nèi)容如下:的內(nèi)容如下: #include int var=8; /* 全局變量的定義全局變量的定義 */ main() printf(“%d”,var); proc1
5、(); printf(“%dn”,var); 下一頁下一頁 第12章 C語言綜合應(yīng)用程序舉例上一頁上一頁 程序模塊文件程序模塊文件f2.c 的內(nèi)容如下:的內(nèi)容如下:extern int var; /* 外部變量的說明外部變量的說明 */proc1() var = 25 ;程序編譯連接程序編譯連接生成可執(zhí)行文生成可執(zhí)行文件,執(zhí)行結(jié)果件,執(zhí)行結(jié)果為:為: 8 25下一頁下一頁 第12章 C語言綜合應(yīng)用程序舉例上一頁上一頁12.1.3 預(yù)處理命令預(yù)處理命令#include的應(yīng)用的應(yīng)用1、#include命令經(jīng)過預(yù)處理后,會(huì)將其后有關(guān)文件命令經(jīng)過預(yù)處理后,會(huì)將其后有關(guān)文件的內(nèi)容拷貝到命令所在的源程序文
6、件中。的內(nèi)容拷貝到命令所在的源程序文件中。2、在上一個(gè)例子中,程序要能夠編譯運(yùn)行,需在上一個(gè)例子中,程序要能夠編譯運(yùn)行,需建立建立一個(gè)工程文件一個(gè)工程文件f12.prj,其內(nèi)容為:,其內(nèi)容為: f1.c f2.c然后對然后對f12.prj文件編譯運(yùn)行即可。文件編譯運(yùn)行即可。3、也可以在、也可以在f1.c文件開頭文件開頭加一預(yù)處理命令加一預(yù)處理命令:#include#includeint var=8; main() 對對f1.c文件直接編譯運(yùn)行即可。文件直接編譯運(yùn)行即可。 第12章 C語言綜合應(yīng)用程序舉例上一頁上一頁返回12.2 12.2 圖形處理應(yīng)用圖形處理應(yīng)用 圖形處理是計(jì)算機(jī)應(yīng)用的一個(gè)極具
7、特色的領(lǐng)域,有圖形處理是計(jì)算機(jī)應(yīng)用的一個(gè)極具特色的領(lǐng)域,有很好的應(yīng)用前景,可以增強(qiáng)程序的趣味性、實(shí)用性。很好的應(yīng)用前景,可以增強(qiáng)程序的趣味性、實(shí)用性。12.2.1 基本圖形處理庫函數(shù)基本圖形處理庫函數(shù) Turbo C支持多種顯示適配器的各種顯示模式,提支持多種顯示適配器的各種顯示模式,提供了畫點(diǎn)、線、圓、橢圓、多邊形以及輸出各種字供了畫點(diǎn)、線、圓、橢圓、多邊形以及輸出各種字體等功能的函數(shù)。體等功能的函數(shù)。 這些函數(shù)包含在圖形頭文件(這些函數(shù)包含在圖形頭文件(graphics.h)中,在)中,在進(jìn) 行 目 標(biāo) 程 序 連 接 時(shí) , 也 必 須 將 圖 形 庫 文 件進(jìn) 行 目 標(biāo) 程 序 連
8、接 時(shí) , 也 必 須 將 圖 形 庫 文 件graphics.lib連接到目標(biāo)程序中去,其圖形接口還包連接到目標(biāo)程序中去,其圖形接口還包括圖形顯示驅(qū)動(dòng)程序(括圖形顯示驅(qū)動(dòng)程序(*.BGI)等。)等。下一頁下一頁 第12章 C語言綜合應(yīng)用程序舉例上一頁上一頁作用:將一個(gè)圖形驅(qū)動(dòng)程序裝入內(nèi)存,并將系統(tǒng)設(shè)置成作用:將一個(gè)圖形驅(qū)動(dòng)程序裝入內(nèi)存,并將系統(tǒng)設(shè)置成 圖形模式;圖形模式;說明:說明:gd指定指定所用的圖形驅(qū)動(dòng)程序,其值可參照書上所用的圖形驅(qū)動(dòng)程序,其值可參照書上 的圖形驅(qū)動(dòng)程序常量表;的圖形驅(qū)動(dòng)程序常量表; gm說明初始化的圖形模式,其取值見附錄說明初始化的圖形模式,其取值見附錄; path
9、指定驅(qū)動(dòng)程序目錄路徑,空字符時(shí)表示驅(qū)動(dòng)指定驅(qū)動(dòng)程序目錄路徑,空字符時(shí)表示驅(qū)動(dòng) 程序就在當(dāng)前目錄下。程序就在當(dāng)前目錄下。 例如:若已知所用的圖形適配器為例如:若已知所用的圖形適配器為CGA,并打算使用,并打算使用 640200高分辨率模式高分辨率模式CGAHI,則圖形初始化,則圖形初始化 部分可寫成:部分可寫成:1 1、圖形系統(tǒng)初始化函數(shù)圖形系統(tǒng)初始化函數(shù) 顯示模式控制函數(shù)顯示模式控制函數(shù)initgraph(gd,gm,path)int gd = CGA, gm = CGAHI;initgraph(&gd, &gm, “TC” ); 下一頁下一頁 第12章 C語言綜合應(yīng)用程序舉例
10、上一頁上一頁 自動(dòng)檢測顯示器硬件的函數(shù)自動(dòng)檢測顯示器硬件的函數(shù)detectgraph(gd,gm) 作用:當(dāng)編程者不知所用的圖形適配器的類型,作用:當(dāng)編程者不知所用的圖形適配器的類型, 或者需要編寫在不同圖形模式下均能運(yùn)行或者需要編寫在不同圖形模式下均能運(yùn)行 的圖形程序,使用該函數(shù)可以完成對適配的圖形程序,使用該函數(shù)可以完成對適配 器的檢查,獲取顯示器類型號(hào)(賦給器的檢查,獲取顯示器類型號(hào)(賦給gd) 及相應(yīng)的顯示模式(賦給及相應(yīng)的顯示模式(賦給gm)。)。 例如:圖形初始化部分可以寫成:例如:圖形初始化部分可以寫成: int gd, gm; detectgraph(&gd,&
11、dm); /*自動(dòng)測試硬件自動(dòng)測試硬件 */ initgraph(&gd, &gm, “TC” ); /* 根據(jù)測試結(jié)果進(jìn)行圖形初始化根據(jù)測試結(jié)果進(jìn)行圖形初始化 */下一頁下一頁 第12章 C語言綜合應(yīng)用程序舉例上一頁上一頁 恢復(fù)顯示方式函數(shù)恢復(fù)顯示方式函數(shù)closegraph( ) 作用:作用:關(guān)閉圖形系統(tǒng),返回文本工作方式。關(guān)閉圖形系統(tǒng),返回文本工作方式。 恢復(fù)工作模式函數(shù)恢復(fù)工作模式函數(shù)restorecrtmode( ) 設(shè)置圖形工作模式函數(shù)設(shè)置圖形工作模式函數(shù)setgraphmode( ) 作用:作用:使顯示器工作方式在圖形和文本方式使顯示器工作方式在圖形和文本方式 之
12、間來回切換。之間來回切換。 清屏函數(shù)清屏函數(shù)cleardevice( ) 作用:用于作用:用于畫圖前進(jìn)行清除屏幕畫圖前進(jìn)行清除屏幕; 作用范圍為整個(gè)屏幕。作用范圍為整個(gè)屏幕。 下一頁下一頁 第12章 C語言綜合應(yīng)用程序舉例上一頁上一頁2 2、基本圖形函數(shù)基本圖形函數(shù) 三種最基本的圖形函數(shù):畫點(diǎn)、線、圓函數(shù)三種最基本的圖形函數(shù):畫點(diǎn)、線、圓函數(shù) 畫點(diǎn)函數(shù)畫點(diǎn)函數(shù) putpixel(x, y, color); 作用:將在坐標(biāo)作用:將在坐標(biāo)x、y指定的位置上畫一點(diǎn),指定的位置上畫一點(diǎn), 該點(diǎn)的顏色由該點(diǎn)的顏色由color值決定。值決定。 畫線函數(shù)畫線函數(shù) line(startx, starty, e
13、ndx, endy); 作用:在作用:在(startx, starty)和和(endx, endy)兩點(diǎn)兩點(diǎn) 間畫一直線,顏色為系統(tǒng)當(dāng)前顏色。間畫一直線,顏色為系統(tǒng)當(dāng)前顏色。 畫圓函數(shù)畫圓函數(shù) circle(x, y, radius); 作用:用當(dāng)前顏色畫一個(gè)圓心在作用:用當(dāng)前顏色畫一個(gè)圓心在(x,y)處,半處,半 徑大小為徑大小為radius的圓。的圓。 下一頁下一頁 第12章 C語言綜合應(yīng)用程序舉例上一頁上一頁 畫圓弧、扇形、橢圓函數(shù)畫圓弧、扇形、橢圓函數(shù) 畫圓弧函數(shù)畫圓弧函數(shù) arc(x, y,start, end, radius); 作用:用當(dāng)前顏色,以作用:用當(dāng)前顏色,以(x,y)為
14、圓心,為圓心,(start,end) 為起為起 止角,止角,radius為半徑畫圓弧。為半徑畫圓弧。 畫扇形函數(shù)畫扇形函數(shù) pieslice(x, y, start, end, radius); 作用:用當(dāng)前顏色,以作用:用當(dāng)前顏色,以(x,y)為圓心,為圓心, (start,end)為起為起 止角,止角,radius為半徑畫扇形。為半徑畫扇形。 畫橢圓函數(shù)畫橢圓函數(shù) ellipse(x,y,start,end,xradius, yradius); 作用:用當(dāng)前畫線顏色,以作用:用當(dāng)前畫線顏色,以(x,y)為中心,為中心, (start,end)為起止角,為起止角,(xradius,yradi
15、us)為為兩軸半徑畫圓。兩軸半徑畫圓。 說明:說明:start、end均以角度為單位。均以角度為單位。下一頁下一頁 第12章 C語言綜合應(yīng)用程序舉例上一頁上一頁 畫多邊形、矩形和條形圖函數(shù)畫多邊形、矩形和條形圖函數(shù) 畫多邊形函數(shù)畫多邊形函數(shù)drawpoly(numpoints,points); 作用:用當(dāng)前顏色畫一個(gè)多邊形,多邊形的頂作用:用當(dāng)前顏色畫一個(gè)多邊形,多邊形的頂 點(diǎn)數(shù)點(diǎn)數(shù) 為為numpoints,而,而points指向的整形數(shù)指向的整形數(shù)組連續(xù)存放著各頂點(diǎn)的組連續(xù)存放著各頂點(diǎn)的(x,y)坐標(biāo)。坐標(biāo)。 畫畫矩形矩形函數(shù)函數(shù)rectangle(left,top,right,bottom
16、); 作用:用當(dāng)前顏色,以作用:用當(dāng)前顏色,以(left,top)為左上角坐標(biāo),為左上角坐標(biāo),以以(right,bottom)為右下角坐標(biāo)畫一個(gè)矩形。為右下角坐標(biāo)畫一個(gè)矩形。 畫畫條形圖條形圖函數(shù)函數(shù)bar(left,top,right,bottom); bar3d(left,top,right,bottom,depth,topflag); 作用:用當(dāng)前顏色,畫一實(shí)心條形圖;作用:用當(dāng)前顏色,畫一實(shí)心條形圖; depth決定決定bar3d()產(chǎn)生的三維條形圖的厚度,產(chǎn)生的三維條形圖的厚度, topflag決定是否加頂蓋。決定是否加頂蓋。下一頁下一頁 第12章 C語言綜合應(yīng)用程序舉例上一頁上一頁
17、3 3、顏色控制函數(shù)顏色控制函數(shù) 屏幕上顯示出的點(diǎn)、線、面的顏色稱為前景色,屏幕上顯示出的點(diǎn)、線、面的顏色稱為前景色,而襯托它們的背景顏色稱為背景色。在而襯托它們的背景顏色稱為背景色。在Turbo C中常中常使用的使用的16個(gè)標(biāo)準(zhǔn)色為:個(gè)標(biāo)準(zhǔn)色為:下一頁下一頁 第12章 C語言綜合應(yīng)用程序舉例上一頁上一頁 顏色設(shè)置顏色設(shè)置函數(shù)函數(shù)setcolor(color); 作用:作用:用顏色值用顏色值color設(shè)置當(dāng)前畫圖顏色設(shè)置當(dāng)前畫圖顏色。 圖形填充圖形填充函數(shù)函數(shù)floodfill(x, y, bordercolor); 作用:該函數(shù)對任意封閉圖形進(jìn)行填充,其顏色和作用:該函數(shù)對任意封閉圖形進(jìn)行填
18、充,其顏色和 模式由設(shè)定的或缺省的顏色與圖形模式?jīng)Q定。模式由設(shè)定的或缺省的顏色與圖形模式?jīng)Q定。 說明:編程時(shí)該函數(shù)位于畫圖函數(shù)之后說明:編程時(shí)該函數(shù)位于畫圖函數(shù)之后;參數(shù)參數(shù)(x,y) 為封閉圖形中的任意一點(diǎn),為封閉圖形中的任意一點(diǎn),bordercolor是封是封 閉圖形的邊框顏色。閉圖形的邊框顏色。 填充模式填充模式函數(shù)函數(shù)setfillstyle(pattern, color); 作用:作用:來設(shè)定來設(shè)定floodfill( )函數(shù)函數(shù)的填充模式的填充模式 。 說明:說明:參數(shù)參數(shù)pattern的值及其符號(hào)如下表所示。的值及其符號(hào)如下表所示。 下一頁下一頁 第12章 C語言綜合應(yīng)用程序舉例
19、上一頁上一頁下一頁下一頁 第12章 C語言綜合應(yīng)用程序舉例上一頁上一頁舉例:舉例:利用基本作圖函數(shù)及顏色控制函數(shù)畫圖。利用基本作圖函數(shù)及顏色控制函數(shù)畫圖。點(diǎn)擊點(diǎn)擊4 4、圖形模式下字符輸出函數(shù)圖形模式下字符輸出函數(shù) 字符輸出字符輸出函數(shù)函數(shù)outtext(str); 作用:作用:在當(dāng)前位置輸出由在當(dāng)前位置輸出由str指定的字符串。指定的字符串。 說明:它能用不同的字型、大小,和不同的顯示說明:它能用不同的字型、大小,和不同的顯示 方向輸出文字。方向輸出文字。下一頁下一頁 第12章 C語言綜合應(yīng)用程序舉例上一頁上一頁字符輸出屬性函數(shù)字符輸出屬性函數(shù) settextstyle(font, dire
20、ction, charsize); 作用:作用:改變輸出字符串的字型、大小和方向。改變輸出字符串的字型、大小和方向。 說明:參數(shù)說明:參數(shù)font確定所用的字型;確定所用的字型; direction的值表示字符的顯示方向。它可以的值表示字符的顯示方向。它可以 是是HORIZ-DIR(水平輸出,值為(水平輸出,值為0),或是),或是 VERT-DIR(垂直輸出,值為(垂直輸出,值為1)。)。 charsize是增加字符大小的倍數(shù)(是增加字符大小的倍數(shù)(0 10)。)。下一頁下一頁 第12章 C語言綜合應(yīng)用程序舉例上一頁上一頁 字符輸出定位函數(shù)字符輸出定位函數(shù) outtextxy(x, y, st
21、r); 作用:作用:將將str指向的字符串輸出到窗口位置指向的字符串輸出到窗口位置(x,y) 上。上。5 5、視口操作函數(shù)視口操作函數(shù) Turbo C所有圖形函數(shù)實(shí)際上都是在視口(即窗所有圖形函數(shù)實(shí)際上都是在視口(即窗口)上操作的(在沒有定義視口的情況下,它是整口)上操作的(在沒有定義視口的情況下,它是整個(gè)屏幕)。用戶可以同時(shí)建立多個(gè)不同大小的視口,個(gè)屏幕)。用戶可以同時(shí)建立多個(gè)不同大小的視口,每個(gè)視口操作函數(shù)的參數(shù)都是以其左上角(坐標(biāo)為每個(gè)視口操作函數(shù)的參數(shù)都是以其左上角(坐標(biāo)為0,00,0)為參考點(diǎn)的相對坐標(biāo)。)為參考點(diǎn)的相對坐標(biāo)。 設(shè)置視口設(shè)置視口函數(shù)函數(shù)setviewport(x1,y
22、1,x2,y2,clipflag); 作用:設(shè)置作用:設(shè)置左上角坐標(biāo)為左上角坐標(biāo)為(x1,y1),右下角坐標(biāo),右下角坐標(biāo) 為為 (x2,y2)的視口。的視口。 說明:說明:clipflag決定是否顯示超出視口的圖形部決定是否顯示超出視口的圖形部分。分。 0顯顯示;示;1不不顯示。顯示。 下一頁下一頁 第12章 C語言綜合應(yīng)用程序舉例上一頁上一頁 視口清除視口清除函數(shù)函數(shù)clearviewport( ); 作用:作用:清除視口內(nèi)的圖形。清除視口內(nèi)的圖形。 注意:注意:使用使用setviewport( )函數(shù)函數(shù)可以在屏幕上開可以在屏幕上開辟多個(gè)視口,這些視口可以重迭,但最近一次設(shè)置辟多個(gè)視口,這
23、些視口可以重迭,但最近一次設(shè)置的視口才是當(dāng)前視口。各圖形函數(shù)都是在當(dāng)前視口的視口才是當(dāng)前視口。各圖形函數(shù)都是在當(dāng)前視口中操作。其它視口中的內(nèi)容只要不被清除,就可以中操作。其它視口中的內(nèi)容只要不被清除,就可以保持在屏幕上。保持在屏幕上。 通過改變坐標(biāo)位置移動(dòng)視口,從而實(shí)現(xiàn)一個(gè)通過改變坐標(biāo)位置移動(dòng)視口,從而實(shí)現(xiàn)一個(gè)立方體的連續(xù)往左移動(dòng)。程序請立方體的連續(xù)往左移動(dòng)。程序請 下一頁下一頁 第12章 C語言綜合應(yīng)用程序舉例上一頁上一頁點(diǎn)擊點(diǎn)擊例如例如6 6、建立獨(dú)立運(yùn)行的圖形處理程序建立獨(dú)立運(yùn)行的圖形處理程序 要脫離要脫離 Turbo C 集成環(huán)境,建立可獨(dú)立運(yùn)行的集成環(huán)境,建立可獨(dú)立運(yùn)行的可執(zhí)行圖形程
24、序,必須將圖形驅(qū)動(dòng)程序(有的還要可執(zhí)行圖形程序,必須將圖形驅(qū)動(dòng)程序(有的還要將字體驅(qū)動(dòng)程序)連接到可執(zhí)行的圖形程序中。將字體驅(qū)動(dòng)程序)連接到可執(zhí)行的圖形程序中。 在在tc子目錄子目錄下輸入命令:下輸入命令: C:TCBGIOBJ EGAVGA 作用:將驅(qū)動(dòng)程序作用:將驅(qū)動(dòng)程序EGAVGA.BGI 轉(zhuǎn)換成相應(yīng)的目轉(zhuǎn)換成相應(yīng)的目標(biāo)文件標(biāo)文件EGAVGA.OBJ。 在在tc子目錄子目錄下輸入命令:下輸入命令: C:TCTLIB LIBgraphics.lib+EGAVGAOBJ 作 用 : 將 目 標(biāo) 文 件作 用 : 將 目 標(biāo) 文 件 E G AV G A O B J 添 加 到添 加 到 gr
25、aphics.lib 庫文件中。庫文件中。 下一頁下一頁 第12章 C語言綜合應(yīng)用程序舉例上一頁上一頁 在用戶程序調(diào)用在用戶程序調(diào)用initgraph()函數(shù)函數(shù)之前應(yīng)加一語句:之前應(yīng)加一語句: registerbgidriver(EGAVGA-driver); 字體驅(qū)動(dòng)程序的連接類似。經(jīng)過字體驅(qū)動(dòng)程序的連接類似。經(jīng)過上述處理,經(jīng)編上述處理,經(jīng)編譯連接后的執(zhí)行程序便可在任何目錄或其它兼容機(jī)譯連接后的執(zhí)行程序便可在任何目錄或其它兼容機(jī)上運(yùn)行了。上運(yùn)行了。 12.2.2 圖形處理庫函數(shù)應(yīng)用示例圖形處理庫函數(shù)應(yīng)用示例 第12章 C語言綜合應(yīng)用程序舉例上一頁上一頁舉例:設(shè)有一組實(shí)驗(yàn)數(shù)據(jù)存于數(shù)組舉例:設(shè)
26、有一組實(shí)驗(yàn)數(shù)據(jù)存于數(shù)組val中,將它們用中,將它們用曲曲 線表示在線表示在 x-y 坐標(biāo)平面上。程序請坐標(biāo)平面上。程序請 點(diǎn)擊點(diǎn)擊返回12.3 12.3 操作系統(tǒng)接口應(yīng)用操作系統(tǒng)接口應(yīng)用1、DOS 基本組成基本組成 由引導(dǎo)程序模塊、基本輸入輸出系統(tǒng)、文件管理和系由引導(dǎo)程序模塊、基本輸入輸出系統(tǒng)、文件管理和系統(tǒng)調(diào)用模塊、命令處理模塊等幾個(gè)部分組成。統(tǒng)調(diào)用模塊、命令處理模塊等幾個(gè)部分組成。 C語言可以通過庫函數(shù)實(shí)現(xiàn)與操作系統(tǒng)接口,即調(diào)語言可以通過庫函數(shù)實(shí)現(xiàn)與操作系統(tǒng)接口,即調(diào)用操作系統(tǒng)中的子程序,從而實(shí)現(xiàn)用戶應(yīng)用程序的深層用操作系統(tǒng)中的子程序,從而實(shí)現(xiàn)用戶應(yīng)用程序的深層次的開發(fā)。次的開發(fā)。12.3
27、.1 DOS 操作系統(tǒng)簡介操作系統(tǒng)簡介 下一頁下一頁 第12章 C語言綜合應(yīng)用程序舉例上一頁上一頁 DOS為用戶引用其功能子程序,利用了系統(tǒng)的軟件中為用戶引用其功能子程序,利用了系統(tǒng)的軟件中斷。通過斷。通過 CPU 的軟中斷指令的軟中斷指令 INT n 調(diào)用相應(yīng)的程序。指調(diào)用相應(yīng)的程序。指令中的令中的n是中斷調(diào)用號(hào)(也稱中斷類型號(hào)),中斷調(diào)用號(hào)是中斷調(diào)用號(hào)(也稱中斷類型號(hào)),中斷調(diào)用號(hào)不同,則調(diào)用的程序就不同。不同,則調(diào)用的程序就不同。2、操作系統(tǒng)接口操作系統(tǒng)接口 v通過軟件中斷調(diào)用通過軟件中斷調(diào)用 BIOS 中的基本中的基本I/O服務(wù)子程序,服務(wù)子程序,這種方法常被稱為低層接口。這種方法常被
28、稱為低層接口。常用的有:常用的有:利用利用 INT 10指令調(diào)用有關(guān)顯示器服務(wù)程序;利用指令調(diào)用有關(guān)顯示器服務(wù)程序;利用 INT 16H 指令指令調(diào)用鍵盤服務(wù)程序。調(diào)用鍵盤服務(wù)程序。下一頁下一頁 第12章 C語言綜合應(yīng)用程序舉例上一頁上一頁例:設(shè)置顯示器顯示模式為例:設(shè)置顯示器顯示模式為320*200彩色圖形模式的彩色圖形模式的匯編語言程序段如下:匯編語言程序段如下:MOVAL,4 ; 設(shè)顯示模式設(shè)顯示模式MOVAH,0 ; 設(shè)功能號(hào)設(shè)功能號(hào)INT 10H ; 系統(tǒng)功能調(diào)用系統(tǒng)功能調(diào)用v通過軟件中斷調(diào)用通過軟件中斷調(diào)用IBMDOS模塊中的功能程序,即所謂模塊中的功能程序,即所謂系統(tǒng)功能調(diào)用,是
29、高層接口。如系統(tǒng)功能調(diào)用,是高層接口。如 INT 21H 指令便是典型指令便是典型的軟件接口,該接口包括了許多子功能。的軟件接口,該接口包括了許多子功能。 例例 :向顯示器輸出字符:向顯示器輸出字符“A”的匯編語言程序段如下:的匯編語言程序段如下:MOV DL,“A” ; 置顯示字符置顯示字符MOV AH,2 ; 設(shè)功能號(hào)設(shè)功能號(hào) INT 21H ; 系統(tǒng)功能調(diào)用系統(tǒng)功能調(diào)用 v使用這兩種接口,用戶就可以在不與極復(fù)雜的硬件接口使用這兩種接口,用戶就可以在不與極復(fù)雜的硬件接口打交道的情況下,使用系統(tǒng)資源,開發(fā)各種應(yīng)用軟件。打交道的情況下,使用系統(tǒng)資源,開發(fā)各種應(yīng)用軟件。vC語言作為一種中級(jí)語言,
30、它的一些庫函數(shù)語言作為一種中級(jí)語言,它的一些庫函數(shù)實(shí)際上實(shí)際上就是就是調(diào)用了一些系統(tǒng)功能調(diào)用子程序,調(diào)用了一些系統(tǒng)功能調(diào)用子程序,用戶可以利用它們來用戶可以利用它們來調(diào)用調(diào)用BIOS及及DOS軟件接口軟件接口,以實(shí)現(xiàn)特定功能。,以實(shí)現(xiàn)特定功能。下一頁下一頁 第12章 C語言綜合應(yīng)用程序舉例上一頁上一頁12.3.2 12.3.2 操作系統(tǒng)接口庫函數(shù)操作系統(tǒng)接口庫函數(shù) 1 1、通用軟中斷調(diào)用庫函數(shù)通用軟中斷調(diào)用庫函數(shù)int86()int86(int intno,union REGS *inregs,union REGS *outregs);說明:參數(shù)說明:參數(shù)intno表示調(diào)用類型號(hào),相當(dāng)于中斷指
31、令表示調(diào)用類型號(hào),相當(dāng)于中斷指令int n調(diào)用的中斷類型號(hào)調(diào)用的中斷類型號(hào)n;參數(shù);參數(shù)inregs用于接收調(diào)用用于接收調(diào)用功能號(hào)及相關(guān)的一些入口參數(shù);參數(shù)功能號(hào)及相關(guān)的一些入口參數(shù);參數(shù)outregs用于接用于接收調(diào)用后的返回值,即出口參數(shù)。收調(diào)用后的返回值,即出口參數(shù)。下一頁下一頁 第12章 C語言綜合應(yīng)用程序舉例上一頁上一頁舉例:舉例: 在屏幕的在屏幕的35行、行、20列處顯示字符列處顯示字符 串串“COMPUTER”。程序請。程序請點(diǎn)擊點(diǎn)擊2 2、系統(tǒng)功能調(diào)用庫函數(shù)系統(tǒng)功能調(diào)用庫函數(shù) intdos()和和intdosx() intdos(union REGS *inregs, unio
32、n REGS *outregs ); intdosx(union REGS *inregs, union REGS *outregs, struct REGS *segregs);說明:與說明:與DOS的系統(tǒng)功能調(diào)用(的系統(tǒng)功能調(diào)用(INT 21H)相對應(yīng)。)相對應(yīng)。 參數(shù)參數(shù)inregs是入口參數(shù),表示相應(yīng)的功能號(hào);參數(shù)是入口參數(shù),表示相應(yīng)的功能號(hào);參數(shù) outregs是出口參數(shù),保存調(diào)用后的返回值;參數(shù)是出口參數(shù),保存調(diào)用后的返回值;參數(shù) segregs是一個(gè)結(jié)構(gòu)是一個(gè)結(jié)構(gòu)SREGS類型的指針,用來設(shè)類型的指針,用來設(shè)置和保存置和保存CPU段寄存器的值。段寄存器的值。3 3、發(fā)送發(fā)送DOS
33、命令庫函數(shù)命令庫函數(shù) system() system(char *cmd);說明:說明:cmd為為DOS系統(tǒng)下的命令字符串。系統(tǒng)下的命令字符串。下一頁下一頁 第12章 C語言綜合應(yīng)用程序舉例上一頁上一頁12.3.3 12.3.3 鼠標(biāo)器及其應(yīng)用鼠標(biāo)器及其應(yīng)用 安裝好鼠標(biāo)器驅(qū)動(dòng)程序,并進(jìn)行初始化后,然安裝好鼠標(biāo)器驅(qū)動(dòng)程序,并進(jìn)行初始化后,然后在應(yīng)用程序中利用后在應(yīng)用程序中利用 INT 33H 功能調(diào)用管理鼠標(biāo)功能調(diào)用管理鼠標(biāo)器的各種操作。器的各種操作。 例例1:編寫一個(gè)編寫一個(gè)C語言函數(shù),完成鼠標(biāo)器初始化工作,語言函數(shù),完成鼠標(biāo)器初始化工作, 測試鼠標(biāo)安裝情況,顯示檢查結(jié)果。測試鼠標(biāo)安裝情況,顯
34、示檢查結(jié)果。 #include union REGS regs; int Msinit( ) int recored; regs . x . ax = 0; /* 0# 功能,初始化鼠標(biāo)功能,初始化鼠標(biāo) */ int86(0 x33, ®s, ®s); /* 調(diào)調(diào)BIOS子程序子程序*/ recored = regs . x . ax; /* 調(diào)用結(jié)果返回在調(diào)用結(jié)果返回在AX寄存器中寄存器中 */下一頁下一頁 第12章 C語言綜合應(yīng)用程序舉例上一頁上一頁 if (recored=0) printf(“Mouse not found or Mouse driver n
35、ot installed.n“); return 0; /* 初始化不成功初始化不成功 */ else return recored; /* 初始化成功初始化成功 */ 例例2:編寫讀取鼠標(biāo)狀態(tài)和鼠標(biāo)位置的函數(shù)。編寫讀取鼠標(biāo)狀態(tài)和鼠標(biāo)位置的函數(shù)。 void Msget ( int *px , int *py , int *pbuttons ) regs . x . ax = 3; /* 調(diào)用調(diào)用3號(hào)功能測試鼠標(biāo)器號(hào)功能測試鼠標(biāo)器 */ int86(0 x33, ®s, ®s); *px = regs . x . cx; / * 返回鼠標(biāo)位置返回鼠標(biāo)位置 */ *py
36、 = regs . x . dx; /* 返回鼠標(biāo)位置返回鼠標(biāo)位置 */ *buttons = regs . x . bx; /* 返回鼠標(biāo)狀態(tài)返回鼠標(biāo)狀態(tài) */ 第12章 C語言綜合應(yīng)用程序舉例上一頁上一頁返回12.4 C12.4 C語言與匯編語言混合編程語言與匯編語言混合編程 由由C語言程序直接調(diào)用匯編語言程序的方法有兩種:語言程序直接調(diào)用匯編語言程序的方法有兩種: 在程序中嵌入?yún)R編代碼或直接調(diào)用匯編語言子程序。在程序中嵌入?yún)R編代碼或直接調(diào)用匯編語言子程序。12.4.1 12.4.1 匯編語言子程序的一般格式匯編語言子程序的一般格式 .MODEL 內(nèi)存模式內(nèi)存模式.DATA ;定義數(shù)據(jù);定
37、義數(shù)據(jù).CODEPUBLIC _子程序名子程序名 ;說明在;說明在C中調(diào)用的子程序名中調(diào)用的子程序名_子程序名子程序名 PROC 過程類型過程類型 ;子程序體;子程序體RET_子程序名子程序名 ENDP ;子程序定義結(jié)束;子程序定義結(jié)束 END ;程序結(jié)束;程序結(jié)束下一頁下一頁 第12章 C語言綜合應(yīng)用程序舉例上一頁上一頁說明:說明:1、匯編子程序和、匯編子程序和C語言的語言的內(nèi)存模式應(yīng)一致;內(nèi)存模式應(yīng)一致;2、 過程類型有過程類型有FAR和和NEAR兩種,表示兩種,表示調(diào)用程調(diào)用程序和被調(diào)用程序是否在同序和被調(diào)用程序是否在同一個(gè)段內(nèi);一個(gè)段內(nèi); 3、C語言對應(yīng)的匯編語言語言對應(yīng)的匯編語言中,
38、函數(shù)名和變量名前多中,函數(shù)名和變量名前多加了一個(gè)下劃線(加了一個(gè)下劃線(_),),因此在匯編語言中,子程因此在匯編語言中,子程序名前應(yīng)有下劃線。序名前應(yīng)有下劃線。 匯編語言子程序示例匯編語言子程序示例 .model small .datatime db 10 ;10毫秒毫秒.code public _delay ;延遲延遲10ms_delay proc mov bl , time delay: mov cx, 2801 wait: loop wait dec bl jnz delay ret_delay endp end下一頁下一頁 第12章 C語言綜合應(yīng)用程序舉例上一頁上一頁12.4.2 1
39、2.4.2 全局變量的傳遞全局變量的傳遞 C語言程序(語言程序(extern)和匯編語言程序()和匯編語言程序(public)可以)可以通過全局變量傳遞信息,其數(shù)據(jù)類型的對應(yīng)關(guān)系如下表通過全局變量傳遞信息,其數(shù)據(jù)類型的對應(yīng)關(guān)系如下表所示。所示。 由于由于C語言大小寫是有區(qū)別的,從而在與匯編語言混語言大小寫是有區(qū)別的,從而在與匯編語言混合編程時(shí),最好在合編程時(shí),最好在options菜單下的菜單下的Linker子項(xiàng)中將子項(xiàng)中將Case-Sensitive Link置成置成off狀態(tài)來取消狀態(tài)來取消其區(qū)別。其區(qū)別。 下一頁下一頁 第12章 C語言綜合應(yīng)用程序舉例上一頁上一頁12.4.3 12.4.3
40、 參數(shù)和返回值的傳遞參數(shù)和返回值的傳遞 vC語言程序和匯編語言程序的參數(shù)傳遞是通過堆棧來語言程序和匯編語言程序的參數(shù)傳遞是通過堆棧來完成的。所謂堆棧,實(shí)質(zhì)就是一種先進(jìn)后出的內(nèi)存區(qū)域,完成的。所謂堆棧,實(shí)質(zhì)就是一種先進(jìn)后出的內(nèi)存區(qū)域,且只在一端進(jìn)行出棧和入棧操作。且只在一端進(jìn)行出棧和入棧操作。 v對對C語言而言,參數(shù)進(jìn)棧的順序是從右到左。如在語言而言,參數(shù)進(jìn)棧的順序是從右到左。如在C語語言程序中有語句言程序中有語句power2(int para1,int para2),則執(zhí)行該,則執(zhí)行該語句時(shí)堆棧中的內(nèi)容如下圖語句時(shí)堆棧中的內(nèi)容如下圖所示,所示,通過通過sp便可得到參數(shù)便可得到參數(shù)值,從而完成參
41、數(shù)的數(shù)據(jù)傳遞。值,從而完成參數(shù)的數(shù)據(jù)傳遞。下一頁下一頁 第12章 C語言綜合應(yīng)用程序舉例上一頁上一頁舉例:設(shè)某舉例:設(shè)某C語言程序如下:語言程序如下: #include “stdio.h” int power2(int,int); main( ) printf(“2 的的4次方乘以次方乘以8為為:%d”, power2(8,4) ); v 當(dāng)匯編語言子程序有返回值時(shí),是通過當(dāng)匯編語言子程序有返回值時(shí),是通過ax和和dx寄存寄存器來進(jìn)行傳遞的。器來進(jìn)行傳遞的。 下一頁下一頁 第12章 C語言綜合應(yīng)用程序舉例上一頁上一頁匯編語言子程序如下:匯編語言子程序如下: .model small .code
42、 public _power2 _power2 proc push bp mov bp, sp mov ax, bp+4 ; 將第一個(gè)參數(shù)的值將第一個(gè)參數(shù)的值8送到送到ax中中 mov cx, bp+6 ; 將第二個(gè)參數(shù)的值將第二個(gè)參數(shù)的值4送到送到cx中中 shl ax, cl; 將將ax的內(nèi)容左移的內(nèi)容左移cl次次,每移一次表示乘每移一次表示乘2 pop bp ret _power2 endp end下一頁下一頁 第12章 C語言綜合應(yīng)用程序舉例上一頁上一頁12.4.4 12.4.4 匯編語言子程序的匯編及與匯編語言子程序的匯編及與C C程序的連接程序的連接 1、在集成環(huán)境下,進(jìn)行混合編程
43、的程序編譯連接、在集成環(huán)境下,進(jìn)行混合編程的程序編譯連接時(shí),需要先用宏匯編(時(shí),需要先用宏匯編(MASM.EXE)將匯編語言程)將匯編語言程序進(jìn)行匯編,生成序進(jìn)行匯編,生成OBJ文件。然后,將此文件。然后,將此OBJ文件文件加入到加入到C程序中。最后進(jìn)行連接,生成程序中。最后進(jìn)行連接,生成EXE文件。文件。 2、將、將OBJ文件加入到文件加入到C程序,對程序,對Turbo C而言,而言,非常簡單。先編輯一個(gè)工程文件(非常簡單。先編輯一個(gè)工程文件(*.prj),其內(nèi)容),其內(nèi)容是需要連接的匯編是需要連接的匯編OBJ文件和文件和C語言文件名列表,如:語言文件名列表,如: myc.c mymasm.
44、obj3、然后在、然后在Turbo C的集成環(huán)境中選擇的集成環(huán)境中選擇 project 主菜單主菜單中的中的 project name 項(xiàng),將上面項(xiàng),將上面編輯的工程文件名寫編輯的工程文件名寫入,便可進(jìn)行連接。入,便可進(jìn)行連接。 下一頁下一頁 第12章 C語言綜合應(yīng)用程序舉例上一頁上一頁12.4.5 12.4.5 內(nèi)嵌匯編指令的內(nèi)嵌匯編指令的C C 程序結(jié)構(gòu)程序結(jié)構(gòu) 在在C程序嵌入?yún)R編指令的格式為:程序嵌入?yún)R編指令的格式為: asm 例如:例如:int max(int a,int b) asm mov ax,a asm cmp ax,b asm jg ok asm mov ax,b ok:re
45、turn _ax ; /*_ax為為Turbo C定義的偽寄存器變量名定義的偽寄存器變量名*/下一頁下一頁 第12章 C語言綜合應(yīng)用程序舉例上一頁上一頁 在匯編語言代碼中使用的在匯編語言代碼中使用的C語言變量應(yīng)該初始化語言變量應(yīng)該初始化 且用且用ptr指明對應(yīng)的匯編語言類型;指明對應(yīng)的匯編語言類型; 偽指令如偽指令如 db 等不能嵌入;等不能嵌入; 在在_asm 塊中的注釋為匯編語言的注釋,即分號(hào);塊中的注釋為匯編語言的注釋,即分號(hào); 不應(yīng)在不應(yīng)在 _asm 塊中用塊中用 ret 指令返回,而應(yīng)用指令返回,而應(yīng)用C語言語言 的的return返回;返回; 匯編語言指令不需以分號(hào)(;)作語句結(jié)束;
46、匯編語言指令不需以分號(hào)(;)作語句結(jié)束; 也可用也可用“_asm ”的的 形式加一行匯編語言指令。形式加一行匯編語言指令。 下一頁下一頁 第12章 C語言綜合應(yīng)用程序舉例上一頁上一頁說明 #include iostream.hint asmmax(int a,int b) int maxn=0; /* 初始化初始化maxn */ _asm mov ax,word ptr a ; 將將a的值賦給的值賦給ax寄存器寄存器 mov dx,word ptr b ; 將將b的值賦給的值賦給dx寄存器寄存器 cmp ax,dx ; 比較比較ax和和dx的大小的大小 jg ok ; ax比比dx大則轉(zhuǎn)標(biāo)號(hào)大
47、則轉(zhuǎn)標(biāo)號(hào)ok處處 mov ax,dx ; 將將dx的值賦給的值賦給axok: _asm mov word ptr maxn,ax ; 將將ax的值賦給的值賦給maxn return maxn ; main( ) printf(“%d”,asmmax(10,50); return 0; 下一頁下一頁 第12章 C語言綜合應(yīng)用程序舉例上一頁上一頁例如例如12.4.6 12.4.6 內(nèi)嵌匯編指令的內(nèi)嵌匯編指令的C C 程序的編譯和連接程序的編譯和連接 對于對于Turbo C而言,內(nèi)嵌匯編指令的而言,內(nèi)嵌匯編指令的C程序要用程序要用TCC命命令行來實(shí)現(xiàn)編譯連接,其形式是:令行來實(shí)現(xiàn)編譯連接,其形式是:
48、 TCC “命令行選項(xiàng)命令行選項(xiàng)”中與中與內(nèi)嵌匯編指令程序內(nèi)嵌匯編指令程序有關(guān)的選項(xiàng)參考書有關(guān)的選項(xiàng)參考書本。本。例如例如: TCC I c:tcinclude L c:tclib B ml P1 P2.asm mylib.lib它表示:在它表示:在c:tcinclude目錄中找包含文件(目錄中找包含文件(-I);); 在在c:tclib目錄中找?guī)煳募夸浿姓規(guī)煳募ylib.lib(-L);); 用大模式(用大模式(-ml)編譯文件)編譯文件P1.c,調(diào)用,調(diào)用TASM對對 P2.asm進(jìn)行編譯,連接生成可執(zhí)行文件進(jìn)行編譯,連接生成可執(zhí)行文件P1.exe。 第12章 C語言綜合應(yīng)用程序舉例上
49、一頁上一頁返回12.5 12.5 綜合應(yīng)用程序示例綜合應(yīng)用程序示例 - - 漢字顯示技術(shù)漢字顯示技術(shù) 12.5.1 12.5.1 漢字顯示的基本原理漢字顯示的基本原理 1 1、國標(biāo)漢字字符集與區(qū)位碼國標(biāo)漢字字符集與區(qū)位碼 區(qū)位碼:每個(gè)漢字在漢字庫中有確定的區(qū)號(hào)和位區(qū)位碼:每個(gè)漢字在漢字庫中有確定的區(qū)號(hào)和位號(hào)。區(qū)號(hào)在前,位號(hào)在后,合成一個(gè)號(hào)。區(qū)號(hào)在前,位號(hào)在后,合成一個(gè)4 4位的十進(jìn)制數(shù)字,位的十進(jìn)制數(shù)字,這就是所謂的區(qū)位碼,用兩個(gè)字節(jié)存放,第一個(gè)字節(jié)這就是所謂的區(qū)位碼,用兩個(gè)字節(jié)存放,第一個(gè)字節(jié)表示區(qū)號(hào),第二個(gè)字節(jié)表示位號(hào)。只要知道了區(qū)位碼,表示區(qū)號(hào),第二個(gè)字節(jié)表示位號(hào)。只要知道了區(qū)位碼,就可
50、知道該漢字在字庫中的地址。就可知道該漢字在字庫中的地址。 下一頁下一頁 第12章 C語言綜合應(yīng)用程序舉例上一頁上一頁 每個(gè)漢字在字庫中以點(diǎn)陣字模形式存儲(chǔ),點(diǎn)陣有每個(gè)漢字在字庫中以點(diǎn)陣字模形式存儲(chǔ),點(diǎn)陣有16 x 16 16 x 16 、24 x 2424 x 24及及32 x 3232 x 32等多種。等多種。16 x 1616 x 16點(diǎn)陣點(diǎn)陣字庫中,每個(gè)點(diǎn)陣字模用字庫中,每個(gè)點(diǎn)陣字模用3232個(gè)字節(jié)來描述,其中的個(gè)字節(jié)來描述,其中的每個(gè)點(diǎn)使用一個(gè)二進(jìn)制位。當(dāng)需要顯示時(shí),把某個(gè)每個(gè)點(diǎn)使用一個(gè)二進(jìn)制位。當(dāng)需要顯示時(shí),把某個(gè)漢字的漢字的16 x 1616 x 16點(diǎn)陣信息直接送到顯示器上,值為點(diǎn)
51、陣信息直接送到顯示器上,值為1 1的點(diǎn)可以在屏上顯示一個(gè)亮點(diǎn);值為的點(diǎn)可以在屏上顯示一個(gè)亮點(diǎn);值為0 0的點(diǎn)則不亮,的點(diǎn)則不亮,這樣就可顯現(xiàn)出相應(yīng)的漢字。這樣就可顯現(xiàn)出相應(yīng)的漢字。國標(biāo)碼國標(biāo)碼:與區(qū)位碼之間存在著一種簡單的換算關(guān)系:與區(qū)位碼之間存在著一種簡單的換算關(guān)系:國標(biāo)碼的區(qū)號(hào)國標(biāo)碼的區(qū)號(hào) = = 區(qū)位碼的區(qū)號(hào)區(qū)位碼的區(qū)號(hào) + 32+ 32(或(或20H20H)國標(biāo)碼的位號(hào)國標(biāo)碼的位號(hào) = = 區(qū)位碼的位號(hào)區(qū)位碼的位號(hào) + 32+ 32(或(或20H20H) 例如例如,“計(jì)計(jì)”字的區(qū)位碼為字的區(qū)位碼為28382838(或(或1C26H1C26H),其),其國標(biāo)碼為國標(biāo)碼為60706070(
52、或(或3C46H3C46H)。)。 下一頁下一頁 第12章 C語言綜合應(yīng)用程序舉例上一頁上一頁下一頁下一頁 第12章 C語言綜合應(yīng)用程序舉例上一頁上一頁2 2、漢字內(nèi)碼漢字內(nèi)碼 漢字內(nèi)碼是漢字信息處理系統(tǒng)內(nèi)部標(biāo)示漢字的漢字內(nèi)碼是漢字信息處理系統(tǒng)內(nèi)部標(biāo)示漢字的編碼,也稱機(jī)內(nèi)碼。它與國標(biāo)碼也存在一種簡單的編碼,也稱機(jī)內(nèi)碼。它與國標(biāo)碼也存在一種簡單的對應(yīng)關(guān)系:對應(yīng)關(guān)系:機(jī)內(nèi)碼區(qū)號(hào)機(jī)內(nèi)碼區(qū)號(hào) = = 國標(biāo)碼的區(qū)號(hào)國標(biāo)碼的區(qū)號(hào) + 128+ 128(或(或80H80H)機(jī)內(nèi)碼位號(hào)機(jī)內(nèi)碼位號(hào) = = 國標(biāo)碼的位號(hào)國標(biāo)碼的位號(hào) + 128+ 128(或(或80H80H) 例如,例如,“啊啊”字的區(qū)位碼為字的
53、區(qū)位碼為16021602(1002H1002H),國),國標(biāo)碼為標(biāo)碼為3022H3022H,機(jī)內(nèi)碼為,機(jī)內(nèi)碼為B0A2HB0A2H。 下一頁下一頁 第12章 C語言綜合應(yīng)用程序舉例上一頁上一頁 在西文狀態(tài)下,對使用漢字的在西文狀態(tài)下,對使用漢字的C C語言程序采用如語言程序采用如下方法:讀出漢字的內(nèi)碼,將其轉(zhuǎn)換成字庫的區(qū)位下方法:讀出漢字的內(nèi)碼,將其轉(zhuǎn)換成字庫的區(qū)位碼,然后直接到字庫中去找出漢字字模。再用有關(guān)碼,然后直接到字庫中去找出漢字字模。再用有關(guān)的位操作和循環(huán)語句,對字模各個(gè)字節(jié)的每一位進(jìn)的位操作和循環(huán)語句,對字模各個(gè)字節(jié)的每一位進(jìn)行判斷。如果某位是行判斷。如果某位是1 1,則按設(shè)置的顏
54、色在屏幕的相,則按設(shè)置的顏色在屏幕的相應(yīng)位置畫點(diǎn),若該位為應(yīng)位置畫點(diǎn),若該位為0 0則不畫點(diǎn)。這樣就可按預(yù)先則不畫點(diǎn)。這樣就可按預(yù)先設(shè)置的顏色在相應(yīng)的位置顯示出該漢字來。設(shè)置的顏色在相應(yīng)的位置顯示出該漢字來。 下一頁下一頁 第12章 C語言綜合應(yīng)用程序舉例上一頁上一頁3 3、區(qū)位碼與內(nèi)碼的轉(zhuǎn)化關(guān)系及字模顯示技術(shù)區(qū)位碼與內(nèi)碼的轉(zhuǎn)化關(guān)系及字模顯示技術(shù) 漢字內(nèi)碼與區(qū)位碼存在著固定的轉(zhuǎn)換關(guān)系:漢字內(nèi)碼與區(qū)位碼存在著固定的轉(zhuǎn)換關(guān)系: 設(shè)某漢字內(nèi)碼的十六進(jìn)制數(shù)表示形式為設(shè)某漢字內(nèi)碼的十六進(jìn)制數(shù)表示形式為0 xkkjj0 xkkjj,則相應(yīng)區(qū)位碼的區(qū)號(hào)則相應(yīng)區(qū)位碼的區(qū)號(hào)qh qh 和位號(hào)和位號(hào) wh wh
55、分別為:分別為:qh=0 xkk - 0 xa0qh=0 xkk - 0 xa0; wh=0 xjj - 0 xa0wh=0 xjj - 0 xa0; 下一頁下一頁 第12章 C語言綜合應(yīng)用程序舉例上一頁上一頁若用十進(jìn)制數(shù)表示內(nèi)碼為若用十進(jìn)制數(shù)表示內(nèi)碼為c1c2,則則 qh=c1-160; wh=c2-160; 即區(qū)位碼即區(qū)位碼 qw 為:為: qw=100*(c1-160)+(c2-160);反之亦可由區(qū)位碼反之亦可由區(qū)位碼qw求得區(qū)號(hào)和位號(hào):求得區(qū)號(hào)和位號(hào): qh=qw/100; wh=qw-100*qh; 對于國標(biāo)對于國標(biāo)2312-802312-80漢字字庫,漢字庫分成漢字字庫,漢字庫分
56、成9494個(gè)區(qū),個(gè)區(qū),每個(gè)區(qū)有每個(gè)區(qū)有9494個(gè)位,每個(gè)位存放一個(gè)漢字,當(dāng)漢字點(diǎn)個(gè)位,每個(gè)位存放一個(gè)漢字,當(dāng)漢字點(diǎn)陣 為陣 為 1 61 6 1 61 6 時(shí) , 每 個(gè) 漢 字 的 字 模 大 小 為時(shí) , 每 個(gè) 漢 字 的 字 模 大 小 為(16(1616)/8=3216)/8=32個(gè)字節(jié)。因而該漢字在漢字庫中離個(gè)字節(jié)。因而該漢字在漢字庫中離起點(diǎn)的偏移位置(以字節(jié)為單位),可由如下表達(dá)起點(diǎn)的偏移位置(以字節(jié)為單位),可由如下表達(dá)式計(jì)算:式計(jì)算: offset=(94offset=(94* *(qh-1)+(wh-1)(qh-1)+(wh-1)* *32L; 32L; 下一頁下一頁 第1
57、2章 C語言綜合應(yīng)用程序舉例上一頁上一頁 注意注意,偏移量對于不同的漢字庫是不相同的。,偏移量對于不同的漢字庫是不相同的。下下面給出幾種常用漢字庫中地址碼面給出幾種常用漢字庫中地址碼offset的計(jì)算的計(jì)算公式:公式:ucdos中的字庫中的字庫CCLIB.DAT存放存放16x16點(diǎn)陣字模:點(diǎn)陣字模:offset=(qh-1)*94+(wh-1)*32L;CCDOS 2.13中的字庫中的字庫HZK16存放存放16x16點(diǎn)陣字模:點(diǎn)陣字模:offset=(qh-16)*94+wh-1+15*94)*32L;SPDOS5.0的簡體字庫的簡體字庫CCLIB.DAT存放存放16x16點(diǎn)陣點(diǎn)陣字模:字模:
58、offset=(qh-7)*94+wh-1)*32L;CCDOS 2.13中的字庫中的字庫hzk24存放存放24x24點(diǎn)陣字模:點(diǎn)陣字模:offset=(qh-16)*94+wh-1)*72L;下一頁下一頁 第12章 C語言綜合應(yīng)用程序舉例上一頁上一頁12.5.2 12.5.2 西文西文DOSDOS環(huán)境下的漢字顯示環(huán)境下的漢字顯示 1 1、漢字顯示方法漢字顯示方法 在西文在西文DOSDOS環(huán)境下,可以采用畫點(diǎn)或畫線的方法。環(huán)境下,可以采用畫點(diǎn)或畫線的方法。 利用畫點(diǎn)函數(shù)利用畫點(diǎn)函數(shù)putpixel()putpixel()顯示漢字顯示漢字 根據(jù)漢字字模點(diǎn)陣信息的各個(gè)字節(jié)每位的狀態(tài)來根據(jù)漢字字模點(diǎn)
59、陣信息的各個(gè)字節(jié)每位的狀態(tài)來判斷是否在相應(yīng)的位置上畫點(diǎn)。若該位為判斷是否在相應(yīng)的位置上畫點(diǎn)。若該位為1 1,則在相,則在相應(yīng)的位置上用函數(shù)應(yīng)的位置上用函數(shù)putpixel( )putpixel( )畫一點(diǎn);若是畫一點(diǎn);若是0 0則跳過。則跳過。這樣形成的亮點(diǎn)組合起來就是一個(gè)漢字的字形。這樣形成的亮點(diǎn)組合起來就是一個(gè)漢字的字形。下一頁下一頁 第12章 C語言綜合應(yīng)用程序舉例上一頁上一頁下一頁下一頁 第12章 C語言綜合應(yīng)用程序舉例上一頁上一頁 利用畫線函數(shù)利用畫線函數(shù)lineto()lineto()顯示漢字顯示漢字 根據(jù)漢字字模點(diǎn)陣信息可以確定組成漢字根據(jù)漢字字模點(diǎn)陣信息可以確定組成漢字1616
60、線線每條線的線型參數(shù),用每條線的線型參數(shù),用setlinestyle()setlinestyle()設(shè)置線型,設(shè)置線型,再由再由lineto()lineto()函數(shù)畫函數(shù)畫1616點(diǎn)長的線,重復(fù)點(diǎn)長的線,重復(fù)1616次這樣的次這樣的過程,畫過程,畫1616條不同的線型的直線,就可組成一個(gè)漢條不同的線型的直線,就可組成一個(gè)漢字。字。 設(shè)置線型函數(shù)設(shè)置線型函數(shù)setlinestyle(linestyle, upattern, thickness); 說明說明:參數(shù):參數(shù)linestyle 用于指定畫線的線型;參數(shù)用于指定畫線的線型;參數(shù)upattern 僅當(dāng)線型參數(shù)為僅當(dāng)線型參數(shù)為USERBIT_LINE時(shí)才起作用。時(shí)才起作用??捎每捎?6位二進(jìn)制、位二進(jìn)制、4位位1
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 出售蔬菜大棚合同范例
- 公司設(shè)備轉(zhuǎn)讓合同范例
- 2025年中國連鎖超市行業(yè)市場前景預(yù)測及投資方向研究報(bào)告
- 2025年貨廂門鎖項(xiàng)目可行性研究報(bào)告
- 某某鄉(xiāng)農(nóng)田水利灌溉維修合同范本
- 加工制作合同范本樣板
- 農(nóng)村買賣土地合同范本
- 債務(wù)分期合同范例
- 農(nóng)田地出租合同范例
- 個(gè)人簽銷售合同范本
- 項(xiàng)目獎(jiǎng)金分配獎(jiǎng)勵(lì)制度和方案完整版
- 上海中學(xué)國際部幼升小面試真題
- 贏在團(tuán)隊(duì)執(zhí)行力課件
- 慢性胰腺炎課件
- 北京理工大學(xué)應(yīng)用光學(xué)課件第四章
- 陰道鏡幻燈課件
- PCB行業(yè)安全生產(chǎn)常見隱患及防范措施課件
- DB32∕T 186-2015 建筑消防設(shè)施檢測技術(shù)規(guī)程
- 2022年福建泉州中考英語真題【含答案】
- 汽車座椅骨架的焊接夾具畢業(yè)設(shè)計(jì)說明書(共23頁)
- 露天礦山職業(yè)危害預(yù)先危險(xiǎn)分析表
評(píng)論
0/150
提交評(píng)論