知识屋:更实用的电脑技术知识网站
所在位置:首页 > 编程技术 > C语言编程

c语言如何输出菱形方法步骤 c语言编程输出字母菱形

发布时间:2017-05-17 11:06:34作者:知识屋

c语言如何输出菱形方法步骤 c语言编程输出字母菱形 适有同学问起一些C语言题目,本想上网搜索了事,但网上的方法都是分为上下部分用两个嵌套for循环输出。我想有没有合起来输出的呢,这样符合简洁又美观的要求呢?答案是有的。


  题目:输出行列都相等的菱形,如5行5列:


  行列 12345


  1      *


  2     ***


  3    *****


  4     ***


  5      *


  分析:


  当行数等于总行数的一半时,'*'是递增的,递增为2。


  当行数大于总行数的一半时,'*'是递减的,递增为2。


  设有一个行列为n的菱形,


  我们用变量i作为行数,以0开始,i<n。


  k作为n菱第i行要输出的'*'个数。


  则i<=n的中值(用m表示,m=(n-1)/2)时,k递增,i>m时,k递减。


  因为k相对于m行对称,所以:


  当i>m时,i每增加i-m时的k值就和第m-i行的k值相等,即第i-m行和第m-(i-m)相对称。


  所以得出结果:


  当i<=m时,k=2i+1


  当i>m时,k=2(m-(i-m))+1,(m=(n-1)/2)。即k=2n-2i-1


  由于我们只需要输出'*'左边的空格即可,所以每行'*'左边的空格的个数为:(n-每行的k)/2。


  每行循环输出空格,再循环输出每行的'*',再输出回车,结束一行。


  这样我们就可以开始编程了。


  #include<stdio.h>


  int main()


  {


  int i,j,k,n;//定义四个变量:i是行,j每行*号前的空格数,k每行的*号数


  printf("please input odd n:");


  scanf("%d",&n);  //输入奇数n


  for (i=0;i<n;i++)  //循环所有行


  {


  if(n>=2*i+1)  //判断k值


  k=2*i+1;


  else


  k=2*n-2*i-1;


  for(j=(n-k)/2;j>0;j--)  //循环输出空格


  printf(" ");


  for(;k>0;k--)  //循环输出*号


  printf("*");


  printf("n");  //输出回车结束一行


  }


  本来呢题目就到止结束了,但上面的程序还不够完美


  比如说,别人输入n值为偶数怎么办?输入非数值呢?


  我们加一点东西进去:


  #include<stdio.h>


  int main()


  {


  int i,j,k,n=0;  //这里给n赋初值,即使输入非数值,n也可有确切的值。


  do{             //增加一个大循环,可以令n可以输入多次以观察不同的结果。


  printf("please input odd n, 0 to exit:");//当输入0的时候,退出大循环,结束程序。


  scanf("%d",&n);


  if (!(n%2))     //增加对输入偶数的判断。


  {


  printf("you input a even, please input again.n");


  continue;


  }


  for (i=0;i<n;i++)


  {


  if(n>=2*i+1)


  k=2*i+1;


  else


  k=2*n-2*i-1;


  j=(n-k)/2;


  for(;j>0;j--)


  printf(" ");


  for(;k>0;k--)


  printf("*");


  printf("n");


  }


  }while(n);


  return 0;


  }


(免责声明:文章内容如涉及作品内容、版权和其它问题,请及时与我们联系,我们将在第一时间删除内容,文章内容仅供参考)
收藏
  • 人气文章
  • 最新文章
  • 下载排行榜
  • 热门排行榜