C語(yǔ)言中求解圖形的問題
C語(yǔ)言求解圖形問題
什么是圖形問題?
由字符,特殊符號(hào)或數(shù)字組成的各種形狀的圖形問題。
怎么求解圖形問題?
用循環(huán),確定輸出圖形的行數(shù)和每行上的列數(shù),確定每行第一個(gè)字符輸出的空格數(shù),找出每行上字符變化的規(guī)律。
圖形輸出常用模塊:
for(i=1;i<=行數(shù);i++) { ? ? ?for(j=1;j<=第i行前導(dǎo)空格數(shù);j++) ? ? ? ? ? ? ?printf(""); ? ? ?for(k=1;k<=第i行字符串;k++) ? ? ? ? ? ? ?printf(第i行,第j行字符); ? ? ?printf("\n"); }? ??
1.輸出一個(gè)數(shù)字三角形。
代碼如下:
#include <stdio.h> #include <stdlib.h> int main() { int i,j,k; ? for(i=1;i<=5;i++) ? {for(j=1;j<=5-i;j++) ? ? ? printf(" "); ? ?for(k=1;k<=2*i-1;k++) ? ? ? printf("%d",k); ? ?printf("\n"); ? } ? ? return 0; }
2.輸出一個(gè)菱形。
代碼如下:
#include <stdio.h> int main() { ? int i,j ,k; ? ? ? for(i=1;i<=4;i++) ? ? ? ?{ ? ? ? ? ? for(j=1;j<=5-i;j++) ? ? ? ? ? ? ? printf(" "); ? ? ? ? ? for(k=1;k<=2*i-1;k++)? ? ? ? ? ? ? ? printf("*"); ? ? ? ? ? ? ?printf("\n"); ? ? ? ? } ? ? ? ? for(i=1;i<=3;i++) ? ? ? ? ?{ ? ? ? ? ? ? for(j=1;j<=i+1;j++) ? ? ? ? ? ? ? ? printf(" "); ? ? ? ? ? ? for(k=1;k<=7-2*i;k++) ? ? ? ? ? ? ? ? printf("*"); ? ? ? ? ? ? ? printf("\n"); ? ? ? ? ? } ? ? ? ? ? ?return 0; ?}
C語(yǔ)言常用圖形函數(shù)
屏幕顏色的設(shè)置和清屏函數(shù)
① 設(shè)置背景色:
void setbkcolor(int color);
② 設(shè)置前景色:
void setcolor(int color);?
③ 清除圖形屏幕內(nèi)容,使用清屏函數(shù),其調(diào)用格式如下:
void cleardevice( ); ?
注:清除前景圖形,不清除背景。
基本圖形函數(shù)
① 畫點(diǎn)函數(shù):
將點(diǎn)(x, y)置成color色:void putpixel(int x, int y, int color);
獲得當(dāng)前點(diǎn)(x, y)的顏色值:int getpixel(int x, int y);
例:使(20, 50)的像素點(diǎn)置成紅色輸出。
putpixel(20, 50, RED);
② 有關(guān)坐標(biāo)位置的函數(shù):
- 返回x軸的最大值:int getmaxx( );
- 返回y軸的最大值:int getmaxy( );
- 返回游標(biāo)在x軸的位置:int getx( );
- 返回游標(biāo)在y軸的位置:int gety( );
- 移動(dòng)游標(biāo)到(x, y)點(diǎn):void moveto(int x, int y);
- 將游標(biāo)從現(xiàn)行位置(x, y)移動(dòng)到(x+dx, y+dy)的位置,移動(dòng)過程中不畫點(diǎn):void moverel(int dx, int dy);
③ 畫線函數(shù):
畫一條從點(diǎn)(x0, y0)到(x1, y1)的直線:
void ?line(int x0, int y0, int x1, int y1);
畫一條從現(xiàn)行游標(biāo)到點(diǎn)(x, y)的直線:
void ?lineto(int x, int y);
畫一條從現(xiàn)行游標(biāo)(x, y)到按相對(duì)增量確定的點(diǎn)(x+dx, y+dy)的直線:void linerel(int dx, int dy);
④ 畫圓弧類函數(shù):
以(x, y)為圓心,radius為半徑,畫一個(gè)圓:
void ?circle(int x, int y, int radius);
以(x, y)為圓心,radius為半徑,從stangle開始到endangle結(jié)束(用度表示),畫一段圓弧線,逆時(shí)針方向:
void ?arc(int x, int y, int stangle, int endangle, int radius);
以(x, y)為中心,xradius、yradius為x軸和y軸半徑,從角stangle開始,endangle結(jié)束,畫一段橢圓線,
當(dāng)stangle=0,endangle=360時(shí),畫出一個(gè)完整的橢圓:
void ellipse(int x, int y, int stangle, int endangle, int xradius, int yradius);
⑤ 畫多邊形類函數(shù):
以(x1, y1)為左上角,(x2, y2)為右下角,畫一個(gè)矩形框:
void rectangle(int x1, int y1, int x2, inty2);
畫一個(gè)頂點(diǎn)數(shù)為numpoints,各頂點(diǎn)坐標(biāo)由整型數(shù)組polypoints給出的多邊形。polypoints必須至少有2倍頂點(diǎn)數(shù)個(gè)元素。
每個(gè)頂點(diǎn)坐標(biāo)都定義為x、y,且x在前。當(dāng)畫一個(gè)封閉多邊形時(shí),numpoints的值取實(shí)際多邊形的頂點(diǎn)數(shù) +1,且數(shù)組polypoints中第一個(gè)和最后一個(gè)點(diǎn)的坐標(biāo)相同:void drawpoly(int numpoints, int *polypoints);
設(shè)置線型和線寬
① 線型:C語(yǔ)言能夠使用的線型如表所示。
② 線寬:C語(yǔ)言能夠使用的線寬如表所示。
③ setlinestyle函數(shù):
- 功能:用于設(shè)置當(dāng)前繪圖所用的線型和寬度。
- 原型:setlinestyle(int style, unsigned pattern, int width)
- 參數(shù)style:用來指定所畫直線的類型,取值見線型表,缺省為實(shí)線;
- 參數(shù)width:用來指定所畫直線的粗細(xì),以像素為單位,取值見線寬表,缺省值為1個(gè)像素寬。
- 參數(shù)pattern:該參數(shù)在用戶自定義線型時(shí)使用。如果使用線型表中前4種系統(tǒng)預(yù)定義的線型,則該參數(shù)取值0。pattern是一個(gè)16位二進(jìn)制數(shù),每一位代表一個(gè)像素,該位為1時(shí)顯示,為0時(shí)不顯示。
例如:希望設(shè)置的線型為前12位不顯示,后4位顯示。
此時(shí),pattern值為15,調(diào)用方法為setlinestyle(4, 15, 1)。
填充圖形函數(shù)
① setfillstyle函數(shù):
- 功能:為各種圖形函數(shù)設(shè)置填充模式和顏色。
- 原型:setfillstyle(int pattern, int color);
- 參數(shù):color指定填充所用的顏色;pattern用于指定填充模式,取值見下表。
② floodfill函數(shù)
- 功能:用于對(duì)一指定的封閉區(qū)域進(jìn)行填充,其填充模式和顏色由setfillstyle函數(shù)指定。
- 原型:floodfill(int x, int y, int border);
- 參數(shù):x、y指位于填充區(qū)域內(nèi)任意一點(diǎn)的坐標(biāo),該點(diǎn)作為填充的起始點(diǎn);border為填充區(qū)域的邊界顏色。
- 注意:使用該函數(shù)必須保證要填充的區(qū)域是完全封閉的,否則,該形狀外面的區(qū)域也將被填充。
③ setfillpattern函數(shù)
- 功能:實(shí)現(xiàn)用戶自定義的填充模式。
- 原型:setfillpattern(char *pattern, int color);
- 參數(shù):color指定用戶自定義填充模式的顏色;pattern指向8個(gè)字節(jié),一個(gè)字節(jié)對(duì)應(yīng)8個(gè)像素,8*8個(gè)像素,每一位有亮暗兩種(亮為1,暗為0),通過一個(gè)指向8個(gè)字節(jié)的指針判斷。
圖形存取處理函數(shù)
測(cè)試要保存左上角為(x1, y1),右下角為(x2, y2)的圖形屏幕區(qū)域內(nèi)的全部?jī)?nèi)容需多少個(gè)字節(jié):
unsigned imagesize(int x1, int y1, int x2, int y2);?
將左上角為(x1, y1),右下角為(x2, y2)的圖形屏幕區(qū)域內(nèi)的圖像保存在內(nèi)存中,指針為mapbuf:
void getimage(int x1, int y1, int x2, int y2, void ?*mapbuf);
將圖像輸出到左上角為點(diǎn)(x, y)的位置上,其中參數(shù)op規(guī)定如何釋放內(nèi)存中的圖像,具體值如表:
void putimage(int x, int y, void * mapbuf, int op);?
文本輸出函數(shù) 在現(xiàn)行位置輸出字符串指針textstring所指的文本:
void outtext(char *textstring);
在規(guī)定的(x, y)位置輸出字符串指針textstring所指的文本,其中x和y為象元坐標(biāo):
void outtextxy(int x, int y, char *textstring);
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
C語(yǔ)言實(shí)現(xiàn)通訊錄管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)通訊錄管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-01-01cmake跨平臺(tái)構(gòu)建工具的學(xué)習(xí)筆記
CMake是一個(gè)跨平臺(tái)的安裝/編譯工具,通過CMake我們可以通過簡(jiǎn)單的語(yǔ)句來描述所有平臺(tái)的安裝/編譯過程,下面這篇文章主要給大家介紹了關(guān)于cmake跨平臺(tái)構(gòu)建工具的相關(guān)資料,需要的朋友可以參考下2023-02-02C++ getcwd函數(shù)獲取項(xiàng)目運(yùn)行路徑方法詳解
在Linux下做QT項(xiàng)目時(shí),需要獲取項(xiàng)目的運(yùn)行路徑,于是用getcwd函數(shù)進(jìn)行獲取,然后在Windows下進(jìn)行測(cè)試,發(fā)現(xiàn)獲取到的是程序的項(xiàng)目路徑,即代碼文件路徑,然后再Linux QT中測(cè)試,獲取到的又是運(yùn)行路徑,這就很納悶了。經(jīng)過再三測(cè)試,終于發(fā)現(xiàn)了原因2022-10-10Qt簡(jiǎn)單編程實(shí)現(xiàn)UDP通訊
UDP數(shù)據(jù)報(bào)協(xié)議是一個(gè)面向無連接的傳輸層報(bào)文協(xié)議,它簡(jiǎn)單易用,不存在?TCP協(xié)議“粘包”的問題,下面我們就來看看如何使用qt簡(jiǎn)單實(shí)現(xiàn)UDP通訊吧2024-04-04C++實(shí)現(xiàn)LeetCode(87.攪亂字符串)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(87.攪亂字符串),本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07一文詳解C++中動(dòng)態(tài)內(nèi)存管理
這篇文章主要介紹了一文詳解C++中動(dòng)態(tài)內(nèi)存管理,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)孩子沒需要的朋友可以才可以參考一下2022-07-07