经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C 语言 » 查看文章
C语言实现打印星号图案
来源:jb51  时间:2022/11/17 8:48:42  对本文有异议

C语言 打印星号图案

打印一个上半部分为等腰三角形,下半部分为倒等腰三角形星号图案:思想为创建一层大的循环表示行数,然后里面一层循环表示空格的数目,一层表示星号的数目,假设有n行,i表示第i行,空格数为(n-i),星号数为(2*i-1);下半部分从第n行开始,逐渐减少,其他同上半部分。

如有写的不对,望指教。

代码如下:

  1. #define _CRT_SECURE_NO_WARNINGS 1
  2. #include<stdio.h>
  3. #include<stdlib.h>
  4. int main()
  5. {
  6. int i, j;
  7. int n;
  8. printf("输入想要打印的上半部分的行数:\n");//上半部分和下半部分是对应的
  9. scanf("%d", &n);
  10. for (i = 1; i <= n; i++)
  11. {
  12. for (j = 1; j <= n - i; j++)
  13. {
  14. putchar(' ');
  15. }
  16. for (j=1; j <= 2 * i - 1; j++)
  17. {
  18. putchar('*');
  19. }
  20. putchar('\n');
  21. }
  22. for (i = n; i >= 1; i--)
  23. {
  24. for (j= 1; j <= n - i; j++)
  25. {
  26. putchar(' ');
  27. }
  28. for (j = 1; j <= 2 * i - 1; j++)
  29. {
  30. putchar('*');
  31. }
  32. putchar('\n');
  33. }
  34. system("pause");
  35. return 0;
  36. }

图为:

C语言 循环打印星号图形*

用两层循环

  • 外层循环 控制行(行数、换行)
  • 内层循环 控制列( 列数、列的符号  )

第一种效果图:

为什么是j<=i*2呢?

  • 第一行以0计算,第一行星数为0
  • 第二行为1计算,第二行星数为2

.。。。。

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5. int i,j;
  6. //外层控制行数和换行
  7. for(i=0;i<5;i++)
  8. {
  9. //内存循环控制列数和星数量
  10. for(j=0;j<=i*2;j++)
  11. {
  12. printf("*");
  13. }
  14. printf("\n");
  15. }
  16. return 0;
  17. }

第二种效果图:

为什么是4-i呢

  • 第一行i=0时,j是4
  • 第二行i=1时,j=3

.。。。。

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5. int i,j;
  6. //外层控制行数和换行
  7. for(i=0;i<5;i++)
  8. {
  9. //内存循环控制列数和星数量
  10. for(j=0;j<=4-i;j++)
  11. {
  12. printf("*");
  13. }
  14. printf("\n");
  15. }
  16. return 0;

第三种效果图:

为什么是输入空格的是j<=3-i呢

  • 第一行i=0,有五行,第一行应该有4个空格,所以i从0开始话

。。。。。

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5. int i,j;
  6. //外层控制行数和换行
  7. for(i=0;i<5;i++)
  8. {
  9. //内存循环控制列数和星数量
  10. for(j=0;j<=3-i;j++)
  11. {
  12. printf(" ");
  13. }
  14. for(j=0;j<=i*2;j++)
  15. {
  16. printf("*");
  17. }
  18. printf("\n");
  19. }
  20. return 0;

第四种效果图:

为什么是j<i和8-i*2,自己根据上面三种图的思路慢慢画出来吧

  1. int i,j;
  2. for(i=0;i<5;i++)
  3. {
  4. for(j=0;j<i;j++)
  5. {
  6. printf(" ");
  7. }
  8. for(j=0;j<=8-i*2;j++)
  9. {
  10. printf("*");
  11. }
  12. printf("\n");
  13. }
  14. return 0;

第五种效果图:

三四结合就是第五种

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5. int i,j;
  6. //外层控制行数和换行
  7. for(i=0;i<5;i++)
  8. {
  9. //内存循环控制列数和星数量
  10. for(j=0;j<=3-i;j++)
  11. {
  12. printf(" ");
  13. }
  14. for(j=0;j<=i*2;j++)
  15. {
  16. printf("*");
  17. }
  18. printf("\n");
  19. }
  20. for(i=0;i<5;i++)
  21. {
  22. for(j=0;j<i;j++)
  23. {
  24. printf(" ");
  25. }
  26. for(j=0;j<=8-i*2;j++)
  27. {
  28. printf("*");
  29. }
  30. printf("\n");
  31. }
  32. return 0;

再来个另类的第六种

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. void main()
  4. {
  5. int num,i,j;
  6. printf("请输入一个数字:");
  7. scanf("%d",&num);
  8. //上半部分
  9. for(i = 0;i <= num;i++)
  10. {
  11. for(j = 0;j < num-i;j++)
  12. {
  13. printf("%d",num-i);
  14. }
  15. printf("\n");
  16. }
  17. printf("\n");
  18. //下半部分
  19. for(i = 0;i < num;i++)
  20. {
  21. for(j = 0;j <= i;j++)
  22. {
  23. printf("%d",i+1);
  24. }
  25. printf("\n");
  26. }

以上为个人经验,希望能给大家一个参考,也希望大家多多支持w3xue。

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号