A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. #include <stdio.h>
  2. int main()
  3. {
  4.     //空心菱形
  5.     int n = 0;
  6.     while(n <= 0 )
  7.     {
  8.         printf("请输入一个正整数:\n");
  9.         scanf("%d",&n);
  10.     }
  11.     for(int i = 0 ; i < n ; i++) //控制行数
  12.     {
  13.         int number = 2 * (n - i - 1);//每行前面应该空多少个空格,经查看规律,每增加一行,减少两个空格,第一行的空格数是总行数减该行数的二倍,此处ni初始值为0,所以要再减去1;
  14.         for(int j = 0 ; j < number ; j++)//控制每行前段应该输出的空格数
  15.         {
  16.             printf(" ");
  17.         }
  18.         printf("*");//输出一个*
  19.         int count = 4 * i + 1 ;//定义一个count变量,存放中间空格数,中间空格数是行数减1的四倍,再加1.但此处行数初始化值是0,所以不再减1
  20.         for(int k = 0; k < count - 2 ; k++)//输出每行中间的空格数
  21.         {
  22.             printf(" ");
  23.         }
  24.         if(i > 0)//首行不输入最后一个*
  25.             printf("*");//输出最后的*
  26.         printf("\n");//换行
  27.     }
  28.     for(int i = 0 ; i < n -1 ;i++)//控制行数,要比上面的少一行
  29.     {
  30.         for(int j = 0 ; j < 2 * i + 2 ; j++)//控制每行前段应该输出多少空格,第一行输出2个,第二行输出4个,此处i初始值为0所以要加2.
  31.         {
  32.             printf(" ");
  33.         }
  34.         printf("*");//输出一个*
  35.         int count = 4 * ((n - (i + 1)) - 1 ) + 1;//定义一个变量存放每行总的*个数,每行*的个数是该行行数减1的四倍再加1.此处i的初始值为0,i+1代表第几行,而图形是反着的,所以n-(i+1)代表倒过来的行数。行数减1的四倍再加1,即为该行的*的个数
  36.         for(int k = count - 2 ; k > 0 ; k--)//count-2代表把每一行首尾的*去掉
  37.         {
  38.             printf(" ");
  39.         }
  40.         if(i < n - 2 )//末行不输出最后一个*
  41.             printf("*");//输出最后一个*
  42.         printf("\n");
  43.     }
  44.    

  45.    
  46.     //实心菱形
  47.    
  48.     //    int n = 0;
  49.     //    while(n <= 0 )
  50.     //    {
  51.     //        printf("请输入一个正整数:\n");
  52.     //        scanf("%d",&n);
  53.     //    }
  54.     for(int i = 0; i < n ; i++)//控制上半部分行数
  55.     {
  56.         for(int j = 2 * ( n - i - 1 ) ; j > 0 ; j--)//控制每行前端要输出的空格数,应该输出空格数是总行数减去对应行数的2倍,此处i初始值为0,所以要减去1
  57.         {
  58.             printf(" ");
  59.         }
  60.         int count = 4 * i + 1;//每行有行数的4倍减去1个*,此处i的初始值为1
  61.         for(int k = 1; k <= count ; k++)
  62.         {
  63.             printf("*");
  64.         }
  65.         printf("\n");
  66.     }
  67.     for(int i = 0 ;i < n - 1; i++)//控制下半部分行数
  68.     {
  69.         for(int j = 1 ; j <= 2 * (i + 1) ; j++)//控制每行前端输出的空格数,第一行输出2个空格,第二行输出4个空格,是行数的2倍,此处i的初始值为0,所以要加1
  70.         {
  71.             printf(" ");
  72.         }
  73.         int count = 4 * ( (n - (i + 1)) - 1  ) + 1;//定义一个变量存放每行总的*个数,每行*的个数是该行行数减1的四倍再加1.此处i的初始值为0,i+1代表第几行,而图形是反着的,所以n-(i+1)代表倒过来的行数。行数减1的四倍再加1,即为该行的*的个数
  74.         for(int k = 0; k < count ; k++)
  75.         {
  76.             printf("*");
  77.         }
  78.         printf("\n");
  79.     }
  80.    
  81.    
  82.     //    间隔菱形
  83.     //
  84.     //    int n = 0;
  85.     //    while(n <= 0 )
  86.     //    {
  87.     //        printf("请输入一个正整数:\n");
  88.     //        scanf("%d",&n);
  89.     //    }
  90.     for(int i = 0; i < n; i++)//控制上半部分行数
  91.     {
  92.         for(int j =  2 * (n - i - 1); j > 0 ; j--)
  93.         {
  94.             printf(" ");
  95.         }
  96.         int count = (4 * i + 1)/2;//定义一个变量,存放应该输出的*和空格数,因为对于实心菱形来说每行有行数减1的四倍加1个*,此处i初始值为0;因为多出一个空格,所以要加1除以2.
  97.         for(int k = 0; k <= count; k++)//控制输出的*和空格的个数
  98.         {
  99.             printf("*");
  100.             printf(" ");
  101.         }
  102.         printf("\n");
  103.     }
  104.     for(int i = 0; i < n - 1 ;i++ )//控制下半部分图形
  105.     {
  106.         for(int j = 0; j < 2 * (i + 1); j++)//控制每行前端输出的空格数,第一行输出两个,第二行输出4个,i的初始值为0
  107.         {
  108.             printf(" ");
  109.         }
  110.         int count = (4 * ( (n - (i + 1)) - 1) + 1 + 1) / 2;//控制每行输出*和空格的个数:行数减去1的四倍加上1是全部为*的个数,然后再加上1,结果再除以2就是*和空格的个数
  111.         for(int k = 0 ; k < count; k++)//控制每行中间输出的*和空格的个数,
  112.         {
  113.             printf("*");
  114.             printf(" ");
  115.         }
  116.         printf("\n");
  117.         
  118.     }

  119.    
  120.     return 0;
  121. }

复制代码

1 个回复

正序浏览
附图运行结果。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马