怎麼用C語言編碼出一個豬頭的形狀?
我想要用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 自帶的控制台運行,把那個黑色的窗口最大化,然後就能在屏幕里看見豬頭啦(
推薦閱讀: