C语言 百分网手机站

C语言怎样输出菱形

时间:2020-09-03 18:41:17 C语言 我要投稿

C语言怎样输出菱形

  C语言怎样输出菱形你知道吗?上网搜索一下,但网上的方法都是分为上下部分用两个嵌套for循环输出。下面是小编为大家带来的C语言怎样输出菱形的知识,欢迎阅读。

  C语言怎样输出菱形

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

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

  行列 12345

  1 *

  2 ***

  3 *****

  4 ***

  5 *

  分析:

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

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

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

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

  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

  int main()

  {

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

  printf("please input odd n:");

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

  for (i=0;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

  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

  {

  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;

  }


【C语言怎样输出菱形】相关文章:

C语言输出菱形的方法11-24

C语言怎么输出一个菱形10-04

关于c语言约瑟夫问题输出序号算法11-21

怎样学习c++c语言编程09-22

C语言字符数组的几种输出方式11-22

C语言字符串的输入输出10-04

C语言的字符串输出puts()函数10-04

用C语言输出九九乘法表10-05

C语言怎样创建windows窗口11-21

C++输入和输出的概念10-04