怎么样用c语言编写一个菱形for循环编写菱形

两个for循环打印菱形【C语言】
两个for循环打印菱形【C语言】
  输入数字,打印菱形。
  这是一道编程题,更是一道数学题。平常会以for循环打印输出,仔细想想,用两个for完全可以实现。
  以数字5为例:
  方法一(以循环为主打印)
  #include &stdio.h&
  void print(int n)
  int i,j;
  for(i=1; i&=n; i++)
  for(j=1; j&=n-i; j++)
  printf(" ");
  for(j=n-i+1; j&n+i; j++)
  printf("*");
  printf("\n");
  for(i=n-1; i&=1; i--)
  for(j=1; j&=(n-i); j++)
  printf(" ");
  for(j=n-i+1; j&n+i; j++)
  printf("*");
  printf("\n");
  void main()
  printf("---------开始打印符号---------\n");
  printf("请输入数字:");
  scanf("%d",&n);
  print(n);
  printf("---------结束打印符号---------\n");
  方法二:(两个for,根据条件判断实现)
  #include &stdio.h&
  //输出格式
  void print(char ch) {
  putchar(ch);
  //星号
  void printstar(int n)
  int i,j;&&& //行,列
  for(i=0; i&2*n-1; i++)
  for(j=0; j&2*n-1; j++)
  if(i&n)
  if(j&=n-i-1&&j&n+i)
  print('*');
  print(' ');
  if(j&=i-n+1&&j&3*n-i-2)
  print('*');
  print(' ');
  print('\n');
  void main()
  printf("---------开始打印符号---------\n");
  printf("请输入数字:");
  scanf("%d",&n);
  printstar(n);
  printf("---------结束打印符号---------\n");
  说明:(2n-1)―(n-i-1)= n+i
  (2n-1)― (-(n-i-1))= 3n-i-2
  以18为例
H3C认证Java认证Oracle认证
基础英语软考英语项目管理英语职场英语
.NETPowerBuilderWeb开发游戏开发Perl
二级模拟试题一级模拟试题一级考试经验四级考试资料
软件测试软件外包系统分析与建模敏捷开发
法律法规历年试题软考英语网络管理员系统架构设计师信息系统监理师
高级通信工程师考试大纲设备环境综合能力
路由技术网络存储无线网络网络设备
CPMP考试prince2认证项目范围管理项目配置管理项目管理案例项目经理项目干系人管理
职称考试题目
招生信息考研政治
网络安全安全设置工具使用手机安全
生物识别传感器物联网传输层物联网前沿技术物联网案例分析
Java核心技术J2ME教程
Linux系统管理Linux编程Linux安全AIX教程
Windows系统管理Windows教程Windows网络管理Windows故障
数据库开发Sybase数据库Informix数据库
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&如何用c语言编程题输出菱形图形?
- 24小时内回复!
如何用c语言编程题输出菱形图形?
要求:输入数字n.要求对样输出对应的菱形 比如 输入1输出*输入2输出*****输入3输出*************代码如下:#include int main(){int i, j,printf(&输入行数(正数):&);scanf(&%d&,&day);for(i=0;i{for(j=0;j&2*i+1;j++)printf(&*&);printf(&\n&);}for(i=day&1;day--){for(j=1;j&=2*(day-1)-1;j++)printf(&*&);printf(&\n&);}}结果如图:
#include "stdio.h"
void PrintDiamend(int n){&int i,j,k;&if(n==0)&&n=1;&for(i=1;i&=n;i++)&{&&for(j=i;j&n;j++)&&&printf(" ");&&for(k=1;k&i+1;k++)&&&printf("*");&&for(k=1;k&i;k++)&&&printf("*");&&printf("\n");&}
&for(i=1;i&n;i++)&{&&for(j=0;j&i;j++)&&&printf(" ");&&for(k=i;k&n;k++)&&&printf("*");&&for(k=i;k&n-1;k++)&&&printf("*");&&printf("\n");&}}
int main(){&PrintDiamend(4);&return 0;}&
略懂社热议
略懂社热议
等待您来回答
该问题来自:
智芯锐电子技术社区是国内最大的单片机兴趣爱好者的互动交流社区,提供大量的单片机资料视频教程。
编程领域专家
&SOGOU - 京ICP证050897号之前看到网上的一些文章介绍如何打印菱形,但是和我当时题目要求的却不一样,网上的代码输出出来时每个相邻菱形并没有带空格。
我现在所介绍的是每个相邻菱形间都带有空格的代码。
习题及代码如下:
用*输出边长为n的实心菱形。
& &&printf(&请输入一个整数:&);
& & int n = 0;
& & scanf(&%d&,&n);
//打印行数,注意必须是奇数行所以是2n-1
& & for (int i = 1; i &= 2*n - 1; i++)
//abs()是绝对值函数,每行的空格数=|n-行数|。注意这里的空格数指的是*号之前的空格数!!
& & & & for (int j = 1; j &= abs(n - i); j++)
& & & & & & printf(& &);
//每行的“*”=n-|n-i|。注意因为除了第一行和最后一行外,其余行都需要打印多个*,所以只需要在*后面加入空格即可。
& & & & for (int k = 1; k &= n - abs(n -i); k++)
& & & & & & printf(&* &);
& & & & printf(&\n&);共有 4734 人关注过本帖
标题:写了个输出菱形的C程序,请大家指教
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
结帖率:99.34%
&&问题点数:0&&回复次数:6&&&
写了个输出菱形的C程序,请大家指教
我是新手,写了个输出菱形的程序。大家看看这个思路怎么样.给点意见。
#include &stdio.h&
void&&&main()
&&& int&&&//定义循环变量
&&& int&&&//定义菱形最大边
&&& printf(&请输入一个整数:&);
&&& scanf(&%d&,&n);
&&& printf(&\n&);
&&& if ((n%2==0)||n&=0)
&&&&&&&&printf(&错误的输入,n必须是正奇数!重新输入:\n&);
&&& {&&& for (i=1;i&=(n+1)/2;i++)
&&&&&&&&&&&int j1 ,j2 ,j3 ;
&&&&&&&&&&&for (j1=1;j1&=(n+1)/2-i;j1++)
&&&&&&&&&&&&&&&printf(& &);
&&&&&&&&&&&for (j2=1;j2&=(2*i-1);j2++)
&&&&&&&&&&&&&&&printf(&*&);
&&&&&&&&&&&for (j3=1;j3&=(n+1)/2-i;j3++)
&&&&&&&&&&&&&&&printf(& &);
&&&&&&&&&&&printf(&\n&);
&&&&&&&&for (i=(n+3)/2;i&=n;i++)
&&&&&&&&&&&&int k1 ,k2 ,k3 ;
&&&&&&&&&&&&for (k1=1;k1&=i-(n+1)/2;k1++)
&&&&&&&&&&&&&&& printf(& &);
&&&&&&&&&&&&for (k2=1;k2&=2*(n-i)+1;k2++)
&&&&&&&&&&&&&&& printf(&*&);
&&&&&&&&&&&&for (k3=1;k3&=i-(n+1)/2;k3++)
&&&&&&&&&&&&&&& printf(& &);
&&&&&&&&&&&&printf(&\n&);
&&& return&&0;
搜索更多相关主题的帖子:
等 级:新手上路
帖 子:13
#include &stdio.h&
&void main()
&{ int i,j,k,z,a;
&&&printf(&Please input a number:&);
&&&scanf(&%d&,&a);
&&&for(i=-a;i&=a;i++)
&&&&&{z=i&0?i:-i;
&&&&&& for(j=1;j&=z;j++)
&&&&&&&&printf(& &);
&&&&&& for(k=1;k&=2*a-2*z+1;k++)
&&&&&&&&printf(&*&);
&&&&&&&&printf(&\n&);
&&& getchar();
#include&stdio.h&
&&& int i,j,k,n;
&&& printf(&input n:&);
&&& scanf(&%d&,&n);
&&& for(i=1;i&=n;i++)
&&&&&&&&for(j=1;j&=n-i;j++)
&&&&&&&&&&&&printf(& &);
&&&&&&&&for(k=1;k&=2*i-1;k++)
&&&&&&&&&&&&printf(&*&);
&&&&&&&&printf(&\n&);
&&& for(i=1;i&=n-1;i++)
&&&&&&&&for(j=1;j&=i;j++)
&&&&&&&&&&&&printf(& &);
&&&&&&&&for(k=1;k&=2*(n-i)-1;k++)
&&&&&&&&&&&&printf(&*&);
&&&&&&&&printf(&\n&);
看看这俩种思路。。。
来 自:earth
等 级:论坛游民
帖 子:73
专家分:66
用的着这么复杂吗?就是三个寄存器变量不就够了吗?一个控制行的变化,两个控制列的变化,还有哈!为什么偶数就不行?
来 自:佛山
等 级:论坛游民
帖 子:13
专家分:12
#include &stdio.h&
#include &conio.h&
&&int i,j,a,n,x,d;
&&scanf(&%d&,&d);(这里输入菱形的总行数)
&&x=(d+1)/2;
&&for (i=-x;i&=x;i++)
&&{ if(i&=0)
&&& n=(i+x);
&&& n=(-i+x);
&&& for (a=1;a&=10-n;a++)
&&& printf(&&&&);
&&&for (j=1;j&=n*2-1;j++)
&&& printf(&* &);
&&&printf(&\n&);
&&& getch();
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
我看了各位的意见发现了自己程序的不足:
(1):j3,k3变量是多余的,也就是说菱形右边的对称空格是可以不用程序输出!
(2):ji和k1,j2和k2有同样的效果,这样定义重复!
(3):以菱形总长定义n程序较半长定义n繁琐,而且半长定义不需要累述奇偶的问题!
经比较2楼 给出的第一个方案是最好的,简洁没漏洞.
4楼的方案中常数10给得突兀,想了半天。后来发现是可以修改的。而且是10时输入d较大时菱形左角插入显示屏边框里了。改成1000时显示不了菱形。能解释下吗?
我把自己的程序改进了下,大家看看可以不?
void&&main()
&&& int&&i ,j ,k,//i控制行,j 控制空格列, k控制*列
&&& printf(&请输入正整数n:&);
&&& scanf(&%d&,&n);
&&& if(n&0)
&&&&&&&&printf(&错误的输入!!请重新输入:\n&);
&&&&&&&&for (i=1;i&=n+1;i++)&&&//输出上半三角形
&&&&&&&&&&&&for (j=n+1;j&i;j--)
&&&&&&&&&&&&&&& printf(& &);
&&&&&&&&&&&&for (k=1;k&=2*i-1;k++)
&&&&&&&&&&&&&&& printf(&*&);
&&&&&&&&&&&&printf(&\n&);
&&&&&&&&for (i=n;i&=1;i--)&&&//输出下半三角形
&&&&&&&&&&&&for (j=1;j&=n-i+1;j++)
&&&&&&&&&&&&&&& printf(& &);
&&&&&&&&&&&&for (k=1;k&=2*i-1;k++)
&&&&&&&&&&&&&&& printf(&*&);
&&&&&&&&&&&&printf(&\n&);
&&&&&&&&getchar();
[ 本帖最后由 有容就大 于
10:27 编辑 ]
                                                       
等 级:论坛游民
帖 子:18
专家分:24
我想尽请问下菱形的输出原理是什么?哪位高手回下?
来 自:佛山
等 级:论坛游民
帖 子:13
专家分:12
回复 6楼 lvmp520
就是利用循环语句控制在第几行第几列输出什么符号,然后组成菱形!
大概就这样,希望能帮到你!
版权所有,并保留所有权利。
Powered by , Processed in 0.025771 second(s), 8 queries.
Copyright&, BCCN.NET, All Rights Reserved用for循环打印菱形(转)(人家是怎么编程的)
用for循环打印菱形(转)(人家是怎么编程的)
日 星期二 下午 12:17 初学编程的时候(学到循环)遇到一个比较典型的问题:就是如何打印菱形,如下图: & & * & &*** &&***** ******* ********* ******* &&***** & &*** & & * 我们当然不能用printf来一行行打印,这样多笨,再说也为了理解for循环的意思,我 们干脆用for 循环来打印菱形。我们先来思考一个简单点的问题,比如要打印: * ** *** **** ***** 我们怎么用for来实现呢?可以用一个for循环来打印多少行,一个for来打印星号就可以了。给出源程序如下: #include &stdio.h& //#include &conio.h&
main() { & &int i,j;
& &//clrscr(); & &for(i=1;i&=5;i++){ & && &for(j=1;j&=i;j++) & && &printf(&*&); & && &printf(&\n&);} } 也就是说一个for做了一件事情,虽然我们的菱形复杂得多,但我们认真在纸上划划分析一下,就不难发现规律:从第一行到第5行,星号得数目一直在增加,而到了第6行却开始减少。而且星号和两边的空格减少都是有规律可循的。再分析一下,我们要打印每 行星号前面的空格不难,打印后面的空格却麻烦,但我们可以通过打印前面的空格和控 制好星号的数目来完成菱形的打印(忽略每行星号后的空格),眉头一皱,计上心来:) 完成这个任务分两步:一是打印前5行,用两个for来控制星号和空格;二是打印后4行, 同样是用两个for来控制星号和空格。一共是6个for! 进一步缕清思路,在前5行,i from 1 to 5(用来控制行),j from 4 to 0(用来控制 空格,因为要先打印空格),k from 1 to 9(用来控制星号,变化规律是从1到9);再来写后面的4行:m from 1 to 4,n from 1 to 4,o from 7 to 1。再求精:前5行,分 析变化规律:
i& && && && &j& && && &&&k 1& && && && &4& && && &&&1 2& && && && &3& && && &&&3 3& && && && &2& && && &&&5 4& && && && &1& && && &&&7 5& && && && &0& && && &&&9
& && && && && &
我们要找,当i=1时,j=4,k=1......再用数学的方法思考:使当i等于1的时候j等于4, i等于2的时候j等于3......i等于5的时候,j等于0。比如我们可以用2n+2=4(n=1),下个呢?因为我们要找递归关系(所以习惯用n )2n+2-3=3(n=2),2n+2-6=2(n=3),2n+2-9=1 (n=4),2n+2-12=0(n=5)满足了i和j的关系!再发现:(2n+2)后的每个数都是有规律的! 0,3,6,9,12!都是3的倍数!我们终于找到了递归关系:(2n+2)-3(n-1),n属于[1, 5],化简得5-n。以此类推,完成了所有的递归关系!你疑惑地问,我不用2n+2找递归 关系,用n+3找,或者用3n+1,或用4n,你可以试试,结果都是一样地,那用哪个最方便?当然是(n+3)-2(n-1) n属于[1,5],记住咱们地推论了!费那么大工夫,终于完成 了如下的源程序: main() { & &int i,j,k,m,n,o;
& &clrscr();
& &for(i=1;i&=5;i++){& && && && &
& && &for(j=1;j&=5-i;j++) & && && & printf(& &); & && &for(k=1;k&=2*i-1;k++) & && && & printf(&*&); & && &printf(&\n&);}/*打印前5行*/
& &for(m=1;m&=4;m++){ & && &for(n=1;n&=m;n++) & && && & printf(& &); & && &for(o=1;o&=9-2*m;o++) & && && & printf(&*&); & && &printf(&\n&);}/*打印后4行*/ }
我们看变量的定义多了,去掉m,n,o:
#include &stdio.h& //#include &conio.h& main() { & &int i,j,k;
& &//clrscr();
& &for(i=1;i&=5;i++){ & && &for(j=1;j&=5-i;j++) & && && & printf(& &); & && &for(k=1;k&=2*i-1;k++) & && && & printf(&*&); & && &printf(&\n&);}
& &for(i=1;i&=4;i++){ & && &for(j=1;j&=i;j++) & && && & printf(& &); & && &for(k=1;k&=9-2*i;k++) & && && & printf(&*&); & && &printf(&\n&);} }
*****************上面所有的源程序在turbo c 2.0编译下通过!*********************************** 我当初学的时候可是迷茫了很久啊,现在终于懂了!对于打印菱形什么的,我再也不会迷茫了! 总结:我们通过这个程序学到了什么? 一是不要看老谭(谭浩强)写的程序而非要和他 写的一模一样!我们要自己动脑找规律。不要迷信他人,我们自己慢慢也能写出程序!以后读任何人的程序都是一样,先自己想程序的要实现的功能,自己写写看,实在不行 再看他的程序,如果一次理解不了就多来几回!一直到我们自己对这个程序的思想能把 握了为止! 二是数学思想的应用,数学的确太重要了,后悔当初没把数学学得更好,以 后找个时间恶补数学吧!
昵称: whailin &时间:
昵称: whailin &时间:
昵称: submit &时间:
昵称: keailyf &时间:
昵称: whailin &时间:
昵称: justicesun &时间:
昵称: 521vicky20 &时间:
昵称: koin &时间:
昵称: 只想当高手 &时间:
昵称: hedgelog &时间:

我要回帖

更多关于 用c语言编写菱形图案 的文章

 

随机推荐