李紅霞
摘要:通過介紹C語言程序中的窗口函數(shù)、彩色輸出函數(shù)、背景前景設(shè)置函數(shù)、清屏函數(shù)、屏幕定位函數(shù)等基本圖形函數(shù)的定義及用法,并采用程序設(shè)計實(shí)例進(jìn)行分析,解決如何使用C語言輸出彩色圖形的問題,對于C語言的深入學(xué)習(xí)具有一定的借鑒意義。
關(guān)鍵詞:C語言程序設(shè)計;屏幕定位;彩色輸出
中圖分類號:TP311 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2018)27-0073-02
C語言程序設(shè)計包含很豐富的知識,主要有順序結(jié)構(gòu)程序設(shè)計,選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)、以及數(shù)組、指針等內(nèi)容,我們一般所接觸到的程序的輸出結(jié)果都是黑色屏幕上顯示白色字符,也就是黑白效果,其實(shí),C語言中也可以彩色輸出。
使用C語言中的函數(shù)輸出彩色圖形,需要學(xué)習(xí)掌握窗口函數(shù)、彩色輸出函數(shù)、背景前景設(shè)置函數(shù)、清屏函數(shù)、屏幕定位函數(shù)等基本圖形函數(shù),缺少以上任意一種函數(shù),都有可能無法得到正確的輸出結(jié)果,從而導(dǎo)致在反復(fù)調(diào)試過程中增加了不必要的工作量,降低了編譯程序的可讀性和效率。
1 文本窗口的定義
C語言默認(rèn)的文本窗口為整個屏幕,共有80列25行的文本單元,C語言允許使用window( )函數(shù)定義屏幕上的一個矩形域作為窗口。
Window( )函數(shù)的調(diào)用格式為:Window(int left,int top, int right, int bottom);使用的頭文件為:“conio.h”,在使用該函數(shù)時加上文件包含命令:# include (conio.h)。C語言規(guī)定整個屏幕的左上角坐標(biāo)為(1,1),右下角坐標(biāo)為(80,25),并規(guī)定沿水平方向?yàn)閄軸,方向向右,沿垂直方向?yàn)閅軸,方向向下。例:要定義一個窗口左上角在屏幕(20,5)處,大小為5列、5行的窗口可寫為:window (20,5,25,10);
2 文本窗口內(nèi)的輸入輸出函數(shù)
2.1 文本窗口的輸出
文本窗口的輸出函數(shù)主要有三個,cprintf( ),格式為:cprintf(格式控制字符串,輸出表列),函數(shù)的功能是,輸出一個字符串或數(shù)值到窗口中,它與printf( )函數(shù)的用法完全一樣,所不同的就是cprintf( )函數(shù)的輸出受到窗口的限制,而printf( )函數(shù)的輸出窗口為整個屏幕。cputs( ),格式為:cputs( s );函數(shù)的功能是,輸出一個字符串到窗口上。putch( ),格式為:putch( c );函數(shù)的功能是,輸出一個字符到窗口內(nèi)。
2.2 文本窗口的輸入
窗口內(nèi)文本的輸入函數(shù)只有一個,其調(diào)用格式為:getchar( );使用該函數(shù)時要用文件包含命令:# include(stdio.h)
3 文本窗口的顏色設(shè)置
文本窗口的顏色設(shè)置主要包括背景色設(shè)置和字符顏色設(shè)置。
3.1 背景顏色的設(shè)置函數(shù)
設(shè)置背景顏色的函數(shù)名為:textbackground(),具體的使用格式為:Textbackground(int color);其中參數(shù)color對應(yīng)了不同的顏色,可根據(jù)其所對應(yīng)的顏色值設(shè)置背景顏色。
3.2 字符顏色的設(shè)置函數(shù)
函數(shù)名:textcolor(),格式為:Textcolor(int color);功能:根據(jù)參數(shù)color所對應(yīng)的顏色值設(shè)置字符顏色。例如:編寫程序在青色背景下用紅、黃、綠三種顏色輸出“I love C language!”,程序如下:
#include
main( )
{
clrscr();
textbackground(CYAN);
textcolor(RED);
cprintf(“I love C language?。躰”);
textcolor(YELLOW);
cprintf(“I love C language?。躰”);
textcolor(GREEN);
cprintf(“I love C language?。躰”);
}
使用以上兩個函數(shù)的幾點(diǎn)說明,(1)包含這兩個函數(shù)的頭文件均為“conio.h”。(2)這兩個函數(shù)均為有參函數(shù),參數(shù)為顏色值。例如,要設(shè)置青色的背景可以通過以下兩種方法:
textbackground(3);或textbackground(CYAN);
3.3 同時設(shè)置文本的字符顏色和背景顏色的函數(shù)
函數(shù)名:textattr(),調(diào)用的一般格式:textattr(int attr);功能:根據(jù)參數(shù)attr所對應(yīng)的值同時設(shè)置文本的字符顏色和背景顏色。其中參數(shù)attr的值表示顏色形式編碼的信息,編碼由八位(7,6,5,4,3,2,1,0位)組成,字節(jié)的低四位(3,2,1,0)用于設(shè)置字符的顏色,字節(jié)的6,5,4三位用于設(shè)置背景顏色,最高位(7位)設(shè)置為是否閃爍。例如,要設(shè)置一個藍(lán)底黃字,可以設(shè)置為textatter(YELLOW+(BLUE<<4));若設(shè)置一個閃爍的藍(lán)底黃字,設(shè)置方法為 textatter (128+YELLOW+(BLUE<<4)),在使用textatter函數(shù)時,背景顏色需要使用位運(yùn)算符,將左移運(yùn)算符向左邊移動4位,這樣才能保證背景顏色移動至正確的位置上。在主函數(shù)中調(diào)用textatter()函數(shù)時,需要使用頭文件“conio.h”。
4 有關(guān)屏幕定位的操作
在使用C語言進(jìn)行彩色圖形輸出過程中,如果想達(dá)到預(yù)期的效果,其中必要的一步操作就是需要進(jìn)行屏幕定位,否則會導(dǎo)致字符偏移,從而無法得到正確的運(yùn)行結(jié)果,因此,屏幕定位函數(shù)對于彩色圖形輸出來講是不可或缺的。同時,在程序編寫和調(diào)試過程中,由于無法保證程序編譯一次性輸出正確彩色圖形,需要進(jìn)行反復(fù)調(diào)試,此時清屏函數(shù)就顯得尤為重要,可以解決輸出彩色圖形因多次運(yùn)行后造成相互疊加的問題。
4.1 清除屏幕內(nèi)容的函數(shù)
清除屏幕內(nèi)容的函數(shù)主要有兩個,一個是clrscr(),該函數(shù)的主要功能是清除當(dāng)前窗口中的所有文本內(nèi)容,并使光標(biāo)定位在左上角(1,1)處。另一個是clreol(),該函數(shù)的主要功能是清除當(dāng)前窗口中從光標(biāo)起始處到行末的所有字符,而使光標(biāo)的位置不發(fā)生變化。
一般我們在編寫程序時,大多都會使用clrscr()函數(shù),如果不使用這個函數(shù),在程序多次運(yùn)行后,程序的運(yùn)行結(jié)果也就是輸出的彩色圖形就會疊加在同一個位置,導(dǎo)致圖形看上去很混亂,使用清屏函數(shù)后可以在每次調(diào)試運(yùn)行后都清晰地看到圖形。
4.2 光標(biāo)定位函數(shù)
光標(biāo)定位函數(shù)是gotoxy(x,y),該函數(shù)的主要功能是定位當(dāng)前光標(biāo)所在的位置,其中的x、y是指光標(biāo)相對于窗口而言定位處的坐標(biāo)。也就是說當(dāng)x、y的設(shè)置一旦超出窗口的大小,此函數(shù)將無法運(yùn)行。例如,編程輸出一個用*組成的四行的等腰三角形,要求每行的*的個數(shù)分別是1,3,5,7,程序如下:
#include
main( )
{
textcolor(RED);
cprintf(“%s\n”, “*”);
cprintf(“%s\n”, “***”);
cprintf(“%s\n”, “*****”);
cprintf(“%s\n”,”*******”);
}
運(yùn)行結(jié)果將是一個直角三角形,必須給每行都使用定位函數(shù)定位才能得到正確的圖形,若想得到題目要求的正確結(jié)果,程序必須使用定位函數(shù),程序如下:
#include
main( )
{
textcolor(RED);
gotoxy(1,1);
cprintf(“%s\n”, “*”);
gotoxy(1,2);
cprintf(“%s\n”, “***”);
gotoxy(1,3);
cprintf(“%s\n”, “*****”);
gotoxy(1,4);
cprintf(“%s\n”,”*******”);
}
將圖形函數(shù)綜合使用起來,字符模式下窗口內(nèi)容的有關(guān)操作示例(窗口定義、顏色設(shè)置、輸入輸出、屏幕定位)如下:
#include
#include
main( )
{ int x=3,y=2;
char ch1=‘A,ch2;
window(15,5,50,25);
textbackground(3);
textcolor(YELLOW);
clrscr( );
cprintf(“x=%d,y=%d,ch1=%c\n”,x,y,ch1);
gotoxy(16,6);
ch2=getch();
putch(ch2);}
5 基本圖形函數(shù)
在使用C語言編寫輸出圖形的程序中,除了要使用彩色輸出函數(shù)cprintf(),設(shè)置背景顏色函數(shù)textbackground(),設(shè)置字符顏色函數(shù)textcolor(),屏幕定位函數(shù)gotoxy(),清屏函數(shù)clrscr()等函數(shù)外,基本圖形函數(shù)很有很多。(1)putpixel,功能是用指定的像素畫一個按color所指定的顏色的點(diǎn),函數(shù)的格式是putpixel(int x,int y,int color);例如在坐標(biāo)(4,4)處畫一個紅點(diǎn),應(yīng)寫為:putpixel(4,4,RED)。(2)line,函數(shù)的功能是畫一條從某個點(diǎn)到另一個點(diǎn)的直線,函數(shù)的格式是line(int x1,int y1,int x2,int y2),例如畫一條從(4,5)到(10,8)的直線,應(yīng)寫為line(4,5,8,10)。(3)circle,函數(shù)的功能是以某個點(diǎn)為圓心,以某個數(shù)為半徑畫一個圓,函數(shù)的格式是circle(int x,int y,int radius),例如以(4,4)為圓心,以5為半徑畫一個圓,應(yīng)寫為circle(4,4,5)。(4)arc,函數(shù)的功能是以某個點(diǎn)為圓心,以某個數(shù)為半徑,用度表示畫一段圓弧線,函數(shù)的格式是arc(int x,int y,int stangle,int endangle,int radius)。(5)rectangle,函數(shù)的功能是以某個點(diǎn)為左上角,某個點(diǎn)為右下角,畫一個矩形,函數(shù)的格式為rectangle(int x1,int y1,int x2,int y2)。
基本圖形函數(shù)還有很多,比如求當(dāng)前點(diǎn)的顏色值函數(shù)getpixel,求x軸的最大值函數(shù)getmaxx,畫橢圓的函數(shù)ellipse,畫n邊形的函數(shù)drawpoly等,諸如此類的函數(shù)還有很多,都可以用來在C語言程序設(shè)計中編寫輸出圖形。
6 結(jié)束語
C語言是由函數(shù)組成的,C語言屏幕定位及彩色輸出中的函數(shù)也非常的豐富,窗口函數(shù),彩色輸出函數(shù),清屏函數(shù),背景色前景色設(shè)置函數(shù),定位函數(shù)等,只要掌握好各函數(shù)的使用方法,掌握好函數(shù)使用時所使用到的頭文件,按照C語言程序設(shè)計中的順序結(jié)構(gòu)的編程方法來編寫輸出彩色圖形就會很容易。
參考文獻(xiàn):
[1] 吳瓊,蔡仲儒.C語言圖形函數(shù)及應(yīng)用[J].考試周刊,2007(40):114-115.
[2] 林君. C語言圖形程序設(shè)計技巧與實(shí)例[M]. 北京: 海洋出版社, 2007(7).
[3] 邱力. C語言程序設(shè)計[M]. 北京: 清華大學(xué)出版社, 2004(7).
[通聯(lián)編輯:謝媛媛]