打印菱形问题代码整理.doc_第1页
打印菱形问题代码整理.doc_第2页
打印菱形问题代码整理.doc_第3页
打印菱形问题代码整理.doc_第4页
打印菱形问题代码整理.doc_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

打印菱形问题代码整理(五种解法)整理了下下这两天关于输出菱形的代码,希望可以打开大家的思路举一反三对初学者来说是制胜的法宝,希望可以加精让更多的人学习。PS:除了解法四、解法五是我写的,其他是引用广陵绝唱和雨中飞燕的代码。如果代码作者对我的引用感到不快,请给我站内信,我会删掉如果有时间我再把菱形大小做成可以控制的/*问题:输出如下一个菱形* * * * */*解法一: 常规思路解法 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说明:开始没有想到好的办法,用了这个超常的字符串读取字符*/#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说明:解法四的改进版,只用一个字符串可以实现*/#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; 闲着无聊俺也写了一个:程序代码: #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;偶也玩一个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);请用TC玩递归main有意思吗?不过是隐藏for循环中的显式迭代把程序变难看而已.程序代码: #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;可以输入随意数的代码:(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;两个小时写的两行代码(打印菱形问题)看有人问输出菱形块的问题,用格式字符串写了这两行花了整整两个多小时,看来还是不够熟练辛苦成果忍不住拿来秀一下,明天来把注释加上/*今天加上注释(printf函数*的使用)算法说明:把printf函数作为一个m的函数f(m),用两个字符串拼成每行要输出的格式,一个字符串是空格字符组成,另一个存放*号,因为字符无法重用,所以每个字段都加上了字符串结束符。为了方便思考,所有的位置控制都用m控制。而m是循环变量i的一个映射。这个映射就想了有一个小时。对于i从1到7,m分别是1,2,3,4,3,2,1借助整数除法不进行四舍五入的特性,终于找到下面一个式子表示这个折线: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;嗯,我也觉得,主要是因为这个字符串不能重用,/0实在是太丑了,呵呵如果重用的情况可以整齐一点点#includeint main()int i,j;for(i=1,j=13;i7;i+,j-,j-)printf(%*sn,11+i,* * * * * * * *+j);return 0;我在1楼写了一些说明*是printf函数的一个修饰符,用于用变量控制输出宽度例如printf(%*s,10,string);表示输出字符串占用长度为10,好处是你可以用变量i来替代10,这样你的输出长度可以变化了刚看了你的第5个解法,看起来很简洁,唯一不懂的就是(%s%*sn,p+m,2*m-2,p-2*m+8)能解释一下括号内用逗号隔开的4段起什么作用? 三个参数param1:对应%s,是常量字符串指针加偏移param2: 对应%*s中的*,指定param3输出的位数param3: 对应%*s中的s,类同param1其实每行也是用两个字符串拼的,你改成下面这样看看printf(%sn,p+m);#include /4行版本#define p(x) putchar(x)int main(void)/实心菱形版本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;输入宽度,然后就会输出对应的菱形(请不要用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:); /*输入最大行数*/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(*); /*输出每一行的星号*/printf(n); /*输出第一行的回车*/getch();/*只需要一重循环的代码*/#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;/*把上面也改成四行版本,请用CPP编译器,勿在TC下编译!并且只需要一重循环!*/#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;/帮你写了一个,谨作参考程序代码: #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楼的代码通用性不好用燕姐的方法. 这是我第一次来bccn学习燕姐的第一个代码 程序代码: #includeint main()/ freopen(path,r+,stdin); int n; while(scanf(%d,&n)!=EOF) / 打印实心的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;/*星号*/ int s;/*边长*/ int b;/*边距*/ printf(ninput 边长 :); 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); 回复 楼主 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. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论