我想要用C語言,用星號輸出一個豬頭的形狀。。


#include &

int main() {
puts(
" * *
"
" * * * * *
"
" * * ****** * *
"
" * * * * *
"
" * * ** * * *
"
" * * ********* * *
"
"* * * * *
"
" * * *
"
" ** ******* ***************
"
" * ** * * *
"
" * * * * * *
"
"* * ****** * *
"
" * * * * *
"
" * * * * *
"
" * * ****** ** **
"
" * * * ** * ");
return 0;
}


如果你是想學寫代碼,這麼簡單的內容,還是自己練習寫寫吧。

如果你是想要畫出的結果,那麼送你個現成的,啥都能畫,效果如下。

https://www.snapfiles.com/screenshots/asciigenerator.htm?

www.snapfiles.com


簡單有效萌萌噠的豬頭 (~ ̄(OO) ̄)ブ

printf("╭︿︿︿╮
");
printf("{/ @ @ /}
");
printf(" ( (oo) )
");
printf(" ︶︶︶
"); // 評論區有個朋友說漏加分號了,大意了啊,忘了加

=============無敵的分割線================

下面分享一個通過在點陣圖上使用橢圓和圓繪製一個豬頭 的代碼:

全新版本的豬頭

#include&
#include&
#include& #include &

#define HEAD_SIZE 54
#define addr(x, y) (((int)(y+0.5)*256+(int)(x+0.5))*3)
#define set_pixel(pixels, x, y, c) (*(int*)((pixels)[addr((x),(y))]) = (c))
#define PI 3.1415926 //修改了之前PI定義錯誤

void draw_ellipse(char* pixels, int x, int y, int radius, float factor, int color) {
float step = PI * 0.002;
color = color | 0xFF000000;
for (int i = 0; i &< 1000; i++) { set_pixel(pixels, x + cos(step * i) * radius, y + sin(step * i) * radius * factor, color); } } void draw_circle(char* pixels, int x, int y, int radius, int color) { draw_ellipse(pixels, x, y, radius, 1, color); } void fill_circle(char* pixels, int x, int y, int radius, int color) { color = color | 0xFF000000; for (int i = 0; i &< 256; i++) for (int j = 0; j &< 256; j++) { if (((i - x) * (i - x) + (j - y) * (j - y)) &<= radius * radius) set_pixel(pixels, i, j, color); } } int main(void) { int size = 256; int file_size = size * size * 3 + HEAD_SIZE; char* bmp_data = malloc(file_size); memcpy(bmp_data, "BMx36 x3 x36 x28 1 1 1 x18 ", HEAD_SIZE); char* pixels = bmp_data + HEAD_SIZE; memset(pixels, 0xFF, file_size - HEAD_SIZE); //頭 draw_ellipse(pixels, 128, 128, 100, 0.85, 0xAAAAAA); // 眼睛 draw_circle(pixels, 90, 170, 8, 0xAAAAAA); fill_circle(pixels, 90, 170, 3, 0x666666); draw_circle(pixels, 168, 170, 8, 0xAAAAAA); fill_circle(pixels, 168, 170, 3, 0x666666); // 鼻子 draw_ellipse(pixels, 128, 95, 60, 0.5, 0xAAAAAA); draw_ellipse(pixels, 98, 95, 10, 1.1, 0xAAAAAA); draw_ellipse(pixels, 158, 95, 10, 1.1, 0xAAAAAA); // 耳朵 draw_ellipse(pixels, 200, 220, 20, 1.5, 0xAAAAAA); draw_ellipse(pixels, 56, 220, 20, 1.5, 0xAAAAAA); FILE* bmp_file = NULL; fopen_s(bmp_file, "pig_head.bmp", "wb+"); fwrite(bmp_data, file_size, 1, bmp_file); fclose(bmp_file); return 0; }

==============

評論區有朋友提到vs編譯報錯的問題,進行相應的修改


可以將問題修改為如何列印出黑白圖案(C語言描述)?而不僅僅是豬頭。

簡單描述一下解決問題的機制。

首先是找到一張想要轉換的圖片。(廢話)

第二步將其使用MATLAB等軟體轉換成二進位編碼(我們只能考慮是黑白圖片,每個1表示黑色。每個0表示白色)。對於彩色圖片,轉換成黑白後,我們將像素點RGB編碼為000的編碼為0,其它所有灰階編碼為1。當然實際肯定有更好的辦法。

比方說是一個8*6像素圖片。也就是 6*8/8=6位元組。

0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0

這是全白的情況。將一張漢字「十」的圖片表示出來,那麼就是:

0 0 0 1 0 0 0 0

0 0 0 1 0 0 0 0

1 1 1 1 1 1 1 1

0 0 0 1 0 0 0 0

0 0 0 1 0 0 0 0

0 0 0 1 0 0 0 0

轉換後的數字直接按順序進行儲存為二進位文件。假設存儲並命名為test.bin。


接下來是一些操作系統的系統調用。我嘗試用C來簡單描述一下。

FILE *p;

p=fopen("test.bin","rb");

//打開並對二進位文件只讀

if (p==NULL)

exit(EXIT_FAILURE );

//報錯並調用exit()後退出程序

..............

char a[100];

//用來保存圖片數字信息

int n;

//變數n用來存儲fread()返回值進行一些判斷

n=fread(a,1,6*8/8,p);

現在數組a中有了圖片的信息。將數組每8個元素列印一行後換行即可。表示黑色的字元可以用星號「*」。

理解運行機制後,我們可以把圖片像素擴大到320*240。當然,我們可以調用fwrite( )對圖片進行人為修改。


#include &

int main() { ? ? ? ? ? ? ??system("pause"); ? ? ? ? ? ? ??return 0;}

用 Windows 自帶的控制台運行,把那個黑色的窗口最大化,然後就能在屏幕里看見豬頭啦(


推薦閱讀:
相关文章