已閱讀5頁(yè),還剩6頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
打印菱形問題代碼整理(五種解法)整理了下下這兩天關(guān)于輸出菱形的代碼,希望可以打開大家的思路舉一反三對(duì)初學(xué)者來(lái)說是制勝的法寶,希望可以加精讓更多的人學(xué)習(xí)。PS:除了解法四、解法五是我寫的,其他是引用廣陵絕唱和雨中飛燕的代碼。如果代碼作者對(duì)我的引用感到不快,請(qǐng)給我站內(nèi)信,我會(huì)刪掉如果有時(shí)間我再把菱形大小做成可以控制的/*問題:輸出如下一個(gè)菱形* * * * */*解法一: 常規(guī)思路解法 code by 廣陵絕唱*/#includeint main(void)int i,j;for(i=1;i=4;+i) for(j=1;j=10-i;+j)printf( ); printf(*); for(j=1;j=1;-i) for(j=1;j=10-i;+j)printf( ); printf(*); for(j=1;j=2*i-3;+j)printf( ); if(i=1)break; printf(*); puts( );getch();/*解法二: 基于條件判斷輸出不同字符 code by 雨中飛燕*/#include #define ABS(a)(a0?-a:a)#define N 3int main() int i,j; for(i=-N;putchar(n),i=N;+i)for(j=-N;j=N;+j) if(ABS(i)+ABS(j)=N)putchar(*);else putchar( ); return 0;/*解法三: 基于格式字符串 code by 雨中飛燕*/#include #define ABS(a)(a0?-a:a)#define J ABS(i)#define N 3int main() int i;char*p=*; for(i=-N;i=N;+i) printf(%*s%*sn,J+1,p,(N-J)*2,&pJ=N); return 0;/*解法四: 基于格式字符串 code by moonwalker說明:開始沒有想到好的辦法,用了這個(gè)超常的字符串讀取字符*/#includeint main() int i,m; for(i=1,m=1;i8;i+,m=i-(i/4)*(i%4)*2)printf(%*s%*sn,4-m, +m-1,2*m-1,*0* *0*0*+m*(m-1); return 0;/*解法五: 基于格式字符串 code by moonwalker說明:解法四的改進(jìn)版,只用一個(gè)字符串可以實(shí)現(xiàn)*/#includeint main() int i,m; char *p =*; for(i=1,m=1;i8;i+,m=i-(i/4)*(i%4)*2)printf(%s%*sn,p+m,2*m-2,p-2*m+8); return 0; 閑著無(wú)聊俺也寫了一個(gè):程序代碼: #include #defineABS(x)(x)0?(x):(-(x)#defineN10int main()int i,j;for(i=0;i2*N-1;i+)j=ABS(N-i-1);printf(%*c%-*cb*n,j+1, ,2*(N-j)-1,*);return 0;偶也玩一個(gè)main(o,O,Q)o=1&(o=(O=scanf(%d,&Q)-1)+2,Q+=2),printf(%*c%*cn,Q-o+2,42,2*o-4,o-2?42:0),(O=o=Q-1?1:O)?main(o-1,O,Q):main(o+1,O,Q);請(qǐng)用TC玩遞歸main有意思嗎?不過是隱藏for循環(huán)中的顯式迭代把程序變難看而已.程序代碼: #include #defineABS(x)(x)0?(x):(-(x)#defineN10int main(int i)return i2*N? printf(%*c%-*cb*n,ABS(N-i)+1, ,2*(N-ABS(N-i)-1,*),main(+i): 0;可以輸入隨意數(shù)的代碼:(vc+6.0編譯通過)#includeint main(void)int i, j, number;printf(Input your number: );scanf(%i, &number);for(i = 0; i (2*number-1); +i)if( i number -1)for(j = 0; j (2*number-1); +j)if( j = number-1 - i| j = number-1 + i )printf(*);elseprintf( );printf(n);else if( i = number -1)for( j = 0; j (2*number-1); +j)if( j = number-1-i| j = number-1 +i )printf(*);elseprintf( );printf(n);elsefor( j = 0; j (2*number-1); +j)if( (i - number) = (j-1) | (i - number) = ( 2*number-3 - j) )printf(*);elseprintf( );printf(n);return 0;兩個(gè)小時(shí)寫的兩行代碼(打印菱形問題)看有人問輸出菱形塊的問題,用格式字符串寫了這兩行花了整整兩個(gè)多小時(shí),看來(lái)還是不夠熟練辛苦成果忍不住拿來(lái)秀一下,明天來(lái)把注釋加上/*今天加上注釋(printf函數(shù)*的使用)算法說明:把printf函數(shù)作為一個(gè)m的函數(shù)f(m),用兩個(gè)字符串拼成每行要輸出的格式,一個(gè)字符串是空格字符組成,另一個(gè)存放*號(hào),因?yàn)樽址麩o(wú)法重用,所以每個(gè)字段都加上了字符串結(jié)束符。為了方便思考,所有的位置控制都用m控制。而m是循環(huán)變量i的一個(gè)映射。這個(gè)映射就想了有一個(gè)小時(shí)。對(duì)于i從1到7,m分別是1,2,3,4,3,2,1借助整數(shù)除法不進(jìn)行四舍五入的特性,終于找到下面一個(gè)式子表示這個(gè)折線:m=i-(i/4)(i mod 4)2*/#includeint main() int i,m; for(i=1,m=1;i8;i+,m=i-(i/4)*(i%4)*2)printf(%*s%*sn,4-m, +m-1,2*m-1,*0* *0*0*+m*(m-1); return 0;嗯,我也覺得,主要是因?yàn)檫@個(gè)字符串不能重用,/0實(shí)在是太丑了,呵呵如果重用的情況可以整齊一點(diǎn)點(diǎn)#includeint main()int i,j;for(i=1,j=13;i7;i+,j-,j-)printf(%*sn,11+i,* * * * * * * *+j);return 0;我在1樓寫了一些說明*是printf函數(shù)的一個(gè)修飾符,用于用變量控制輸出寬度例如printf(%*s,10,string);表示輸出字符串占用長(zhǎng)度為10,好處是你可以用變量i來(lái)替代10,這樣你的輸出長(zhǎng)度可以變化了剛看了你的第5個(gè)解法,看起來(lái)很簡(jiǎn)潔,唯一不懂的就是(%s%*sn,p+m,2*m-2,p-2*m+8)能解釋一下括號(hào)內(nèi)用逗號(hào)隔開的4段起什么作用? 三個(gè)參數(shù)param1:對(duì)應(yīng)%s,是常量字符串指針加偏移param2: 對(duì)應(yīng)%*s中的*,指定param3輸出的位數(shù)param3: 對(duì)應(yīng)%*s中的s,類同param1其實(shí)每行也是用兩個(gè)字符串拼的,你改成下面這樣看看printf(%sn,p+m);#include /4行版本#define p(x) putchar(x)int main(void)/實(shí)心菱形版本for(int n=(scanf(%d,&n),n/2),t=0,d=1;t=0;t+=(t-n)?d:d=-1)for(int a=0,b=1;a=0|(p(10)&0);a+=(a-n)?b:b=-1)(a=n-t)?p(42):p(32);return 0;輸入寬度,然后就會(huì)輸出對(duì)應(yīng)的菱形(請(qǐng)不要用TC編譯)#includestdio.h#includemath.hmain()int i,j,m=6;for(i=-m;i=m;i+)for(j=-m,puts();j=m;j+)/ puts()起換行作用!abs(i)+abs(j)=m?printf(*):printf( );#includevoid main()int i,j,k,l;printf(enter max line:); /*輸入最大行數(shù)*/scanf(%d,&j);for (i=-j/2;i=j/2;i+) if (i0) l=-i;else l=i;for (k=0;k0) l=-i;else l=i;for (k=0;k(l+j/2)*2+1;k+)printf(*); /*輸出每一行的星號(hào)*/printf(n); /*輸出第一行的回車*/getch();/*只需要一重循環(huán)的代碼*/#include int main(void)char star30=*n,blank30= ;int i=1,k=3,flag=0;doprintf(%s%s,blank+29-i-k,star+28-i);(flag=0 & i0);return 0;/*把上面也改成四行版本,請(qǐng)用CPP編譯器,勿在TC下編譯!并且只需要一重循環(huán)!*/#include int main(void)char star30=*n,blank30= ;for(int i=1,k=3,flag=0;i0;(flag=0 & i7)?(i+=2,k-=3):(flag=1,i-=2,k+=3) printf(%s%s,blank+29-i-k,star+28-i);return 0;/幫你寫了一個(gè),謹(jǐn)作參考程序代碼: #include#include#define N 20int main(void) int i,n; char f=*; printf(Input n:n); while(scanf(%d,&n)=1 & n=N) n/=2;for(i=-n;abs(i)=n;+i)printf(%*c%.*sn,abs(i)+1, ,(n+1-abs(i)*2-1,f); return 0;9樓的代碼通用性不好用燕姐的方法. 這是我第一次來(lái)bccn學(xué)習(xí)燕姐的第一個(gè)代碼 程序代碼: #includeint main()/ freopen(path,r+,stdin); int n; while(scanf(%d,&n)!=EOF) / 打印實(shí)心的for(int i=n/2;i=-n/2;-i,putchar(n) for(int j=-n/2;j=n/2;+j)(abs(i)+abs(j)=-n/2;-i,putchar(n) for(int j=-n/2;j=n/2;+j)(abs(i)+abs(j)=n/2)?putchar(*):putchar( );putchar(n); return 0;#include stdio.hvoid main() int pass1,pass2;/*遍歷*/ int k1,k2;/*空格*/ int x1,x2;/*星號(hào)*/ int s;/*邊長(zhǎng)*/ int b;/*邊距*/ printf(ninput 邊長(zhǎng) :); scanf(%d,&s); printf(ninput 邊距 :); scanf(%d,&b); for(pass1=1;pass1=s;pass1+)for(k1=1;k1=(-1)*pass1+s+b;k1+)printf( );for(x1=1;x1=pass1;x1+)printf(* );printf(n); for(pass2=1;pass2=s-1;pass2+)for(k2=1;k2=pass2+b;k2+)printf( );for(x2=1;x2=(-1)*pass2+s;x2+)printf(* );printf(n); 回復(fù) 樓主 yumen07#include stdio.hmain()int i,j,k;for(i=1;i=8;i+) if(i=4) k=6-i;for (j=1;j=k;j+)printf( ); for(j=1;j=i;j+)printf(* ); printf(n); elsefor(j=1;j=i-2;j+)printf( );for(j=1;j9
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度石油化工設(shè)備采購(gòu)合同補(bǔ)充協(xié)議范本3篇
- 二零二五年度vi設(shè)計(jì)創(chuàng)意制作合同范本2篇
- 二零二五版環(huán)境安全風(fēng)險(xiǎn)評(píng)估與治理合同3篇
- 合同管理在2025年度招投標(biāo)中的合規(guī)性分析3篇
- 二零二五版企業(yè)內(nèi)部技術(shù)人員掛靠合作合同范本3篇
- 二零二五年度高壓電氣設(shè)備采購(gòu)及安裝合同2篇
- 二零二五版寶鋼集團(tuán)勞動(dòng)合同員工加班費(fèi)及休息日工作安排3篇
- 二零二五年度車輛質(zhì)押擔(dān)保合同樣本2篇
- 二零二五版公路貨運(yùn)合同道路運(yùn)輸許可證管理與審查規(guī)范3篇
- 二零二五年度綠色環(huán)保房地產(chǎn)商品房買賣合同書3篇
- 10日益重要的國(guó)際組織第三課時(shí)中國(guó)與國(guó)際組織(教學(xué)設(shè)計(jì))2023-2024學(xué)年統(tǒng)編版道德與法治六年級(jí)下冊(cè)
- Unit 1 同步練習(xí)人教版2024七年級(jí)英語(yǔ)上冊(cè)
- 工程管理重大風(fēng)險(xiǎn)應(yīng)對(duì)方案
- 直播帶貨助農(nóng)現(xiàn)狀及發(fā)展對(duì)策研究-以抖音直播為例(開題)
- 腰椎間盤突出疑難病例討論
- 《光伏發(fā)電工程工程量清單計(jì)價(jià)規(guī)范》
- 2023-2024學(xué)年度人教版四年級(jí)語(yǔ)文上冊(cè)寒假作業(yè)
- (完整版)保證藥品信息來(lái)源合法、真實(shí)、安全的管理措施、情況說明及相關(guān)證明
- 營(yíng)銷專員績(jī)效考核指標(biāo)
- 陜西麟游風(fēng)電吊裝方案專家論證版
- 供應(yīng)商審核培訓(xùn)教程
評(píng)論
0/150
提交評(píng)論