C语言,画吃豆人剖析
接上一篇文章,很多人還是搞不清楚ptr1[-1]是怎么回事,可以看看這篇文章,看完的同學還是多轉發的,讓更多的人看到。
一道90%都會做錯的指針題
偶然的一次機會在知乎上看到這個代碼,里面涉及的C語言點我覺得很酷,拿出來分享給大家,我認為技術的話,只要是跟嵌入式有關,跟C語言有關的,我都喜歡寫,大家有想了解的東西,也可以評論留言給我,希望給大家分享更多優質的內容,優質的閱讀體驗。
我們看一下吃豆人的圖片
看起來非???#xff0c;如果我們就用幾行代碼就能畫出吃豆人,這樣會不會更酷,好吧,我們不吹牛,先從第一步開始。
第一步就是先畫一個長方形,類似這樣的
#include <math.h> #include <stdio.h>int main(){double x,y;/*在 -1 和 1 的區間內畫出一個矩陣*/for(y =1;y>=-1;y-=0.05,putchar('\n'))for(x = -1;x<=1;x+=0.025)putchar('.);getchar(); } 輸出圖片如下:這個代碼應該不難吧,畫出了這個之后,下面就是比較困難的了,就是在這個長方形里面勾勒出那個圓形。
畫圓形的代碼應該也是不難的,畫圓形的代碼如下
輸出圖片如下:
完整代碼
#include <math.h> #include <stdio.h>int main(){double x,y;for(y =0.9;y>=-0.9;y-=0.05,putchar('\n'))for(x = -1;x<=1;x+=0.025)putchar(" ."[x*x + y*y < 1&& /*確定圓形的位置*/fabs(atan2(y,x)) > 0.5 &&/*fabs 求絕對值 畫吃豆人的嘴巴*/x*x + pow(y-0.5,2) > 0.02]);/*pow(x,y) x的y 字冪 畫吃豆人的眼睛*/getchar(); }分析一
putchar(" ."[])這個代碼我剛開起來有點拗眼,不知道寫的是什么,但是既然用到[],那就肯定是跟數組有關系的。
我寫了小代碼
#include <math.h> #include <stdio.h>int main(){putchar(" y"[1]);getchar(); }這個輸出如下
y其實我們這樣看還不很明朗的話,我們可以這樣看
#include <math.h> #include <stdio.h>int main(){char *pos = "xy";putchar(pos[1]);getchar(); }這個代碼輸出結果跟上面是一樣的,pos 也就是那個字符串的別名。
這樣我們就知道了
putchar(" ."[
這句是通過后面的值來輸出空格「 」 還是「 . 」。
分析二
繼續分析上面的三句關鍵代碼
x*x + y*y < 1&& /*確定圓形的位置*/ fabs(atan2(y,x)) > 0.5 &&/*fabs 求絕對值 畫吃豆人的嘴巴*/ x*x + pow(y-0.5,2) > 0.02]);/*pow(x,y) x的y 字冪 畫吃豆人的眼睛*/第一行是確定這個圓形。
第二行是用來確定吃豆人的嘴巴的,這個要有點數學功底才行,寫這個的時候,我的數學基本已經送給老師了。
第三行是用來畫吃豆人的眼睛的。
吃豆人的眼睛可以用下面這個代碼來演示下
#include <math.h> #include <stdio.h>int main(){double x,y;for(y =1;y>=-1;y-=0.05,putchar('\n'))for(x = -1;x<=1;x+=0.025)putchar(" ."[x*x + y*y < 1&& /*確定圓形的位置*/fabs(atan2(y,x)) > 0.5 &&/*fabs 求絕對值 畫吃豆人的嘴巴*/x*x+(y-0.5)*(y-0.5) > 0.02]);/*pow(x,y) x的y 字冪 畫吃豆人的眼睛*/getchar(); } x*x+(y-0.5)*(y-0.5)這行代碼決定小圓,大于號決定小圓的大小,邊界。
分析三
atan2這個函數很強大,我們學習三角函數的時候用的是tan,但是這個atan2用的是兩個參數,看我上面的圖片,atan2(0,1) = 0,atan2(y,x) ?第一個參數是 y ,第二個參數是 x。
最后運行如下圖
上文源代碼轉自:
https://www.zhihu.com/people/miloyip/activities
掃碼或長按關注
回復「?籃球的大肚子?」進入技術群聊
總結
以上是生活随笔為你收集整理的C语言,画吃豆人剖析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Html + Java登录验证码实现代码
- 下一篇: 【activiti6】设计器的前后端集成