鱼C论坛

 找回密码
 立即注册
查看: 2156|回复: 4

[已解决]空心等腰梯形的问题

[复制链接]
发表于 2019-5-9 20:58:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 bin554385863 于 2019-5-9 21:00 编辑
  1. #include <stdio.h>
  2. /*打印一个上底和高都是a得空心等腰梯形*/
  3. #include "stdio.h"
  4. void main()
  5. {
  6.     int a, b, c, d, e;

  7.     scanf("%d", &a);

  8.     b = a;
  9.     for (c = 1; c <= a; c++)

  10.     {

  11.         for (d = 1; d <= a - c; d++)

  12.             printf(" ");

  13.         for (e = 1; e <= b; e++)

  14.             if (c == 1 || c == a)
  15.                 printf("*");

  16.             else if (e == 1 || e == b)
  17.                 printf("*");

  18.             else
  19.                 printf(" ");

  20.         b = b + 2;

  21.         printf("\n");
  22.     }
  23. }
复制代码

-----------------------------------------------------------------------------------
atfhn4.r4y' '--stdout=Microsoft-MIEngine-Out-vlgmwyhv.xtt' '--stderr=Microsoft-MIEngine-Error-i0sszpr0.g2p' '--pid=Microsoft-MIEngine-Pid-jwkqd2kq.jch' '--dbgExe=E:\MingGW\bin\gdb.exe' '--interpreter=mi'
5
    *****
   *       *
  *        *
*         *好吧,图形变形了,但确实是打印出来空心等腰梯形
*************
PS E:\Administrator\Documents\Visual Studio 2019>
---------------------------------------------------------------------------
谁能帮我分析下为什么上面的代码会打印出空心等腰梯形?看不懂.
最佳答案
2019-5-9 23:23:21
本帖最后由 jackz007 于 2019-5-9 23:27 编辑

      就是依靠这个循环语句让每行打印出不同的空格数,从而定位到第一个 '*' 字符的位置。
  1. 假设 a = 8
  2. for (c = 1 ; c <= a ; c ++) {                          // a = 8 = 总行数, 总共循环 8 次, c = 当前行号
  3.         for (d = 1 ; d <= a - c ; d ++) printf(" ") ;  // 第 1 行, c = 1 , 循环 7 次 打印 7 个空格
  4.                                                        // 第 2 行, c = 2 , 循环 6 次 打印 6 个空格
  5.                                                        // 第 3 行, c = 3 , 循环 5 次 打印 5 个空格
  6.                                                        // 第 4 行, c = 4 , 循环 4 次 打印 4 个空格
  7.                                                        // 第 5 行, c = 5 , 循环 3 次 打印 3 个空格
  8.                                                        // 第 6 行, c = 6 , 循环 2 次 打印 2 个空格
  9.                                                        // 第 7 行, c = 7 , 循环 1 次 打印 1 个空格
  10.                                                        // 第 8 行, c = 8 , 循环 0 次 打印 0 个空格
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-5-9 22:21:16 | 显示全部楼层
        你要提出具体的疑问,不能这么笼统,你不会连问题都问不出来吧?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-9 22:52:04 | 显示全部楼层
jackz007 发表于 2019-5-9 22:21
你要提出具体的疑问,不能这么笼统,你不会连问题都问不出来吧?

for (d = 1; d <= a - c; d++)
这一句我看不懂
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-9 23:23:21 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2019-5-9 23:27 编辑

      就是依靠这个循环语句让每行打印出不同的空格数,从而定位到第一个 '*' 字符的位置。
  1. 假设 a = 8
  2. for (c = 1 ; c <= a ; c ++) {                          // a = 8 = 总行数, 总共循环 8 次, c = 当前行号
  3.         for (d = 1 ; d <= a - c ; d ++) printf(" ") ;  // 第 1 行, c = 1 , 循环 7 次 打印 7 个空格
  4.                                                        // 第 2 行, c = 2 , 循环 6 次 打印 6 个空格
  5.                                                        // 第 3 行, c = 3 , 循环 5 次 打印 5 个空格
  6.                                                        // 第 4 行, c = 4 , 循环 4 次 打印 4 个空格
  7.                                                        // 第 5 行, c = 5 , 循环 3 次 打印 3 个空格
  8.                                                        // 第 6 行, c = 6 , 循环 2 次 打印 2 个空格
  9.                                                        // 第 7 行, c = 7 , 循环 1 次 打印 1 个空格
  10.                                                        // 第 8 行, c = 8 , 循环 0 次 打印 0 个空格
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2019-5-9 23:28:36 | 显示全部楼层
jackz007 发表于 2019-5-9 23:23
就是依靠这个循环语句让每行打印出不同的空格数,从而定位到第一个 '*' 字符的位置。

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-4 09:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表