免檒 2023-10-04 03:17 采纳率: 87.5%
浏览 9
已结题

关于一个指定星星图的程序

这里指定用for循环,为什么运行不了啊?

#include <stdio.h>
#include <math.h>
void main()
{
    int i, m, k;//分别为行,每行星星数,每行空格数;
    int n=0;//n只是作为限制数;
    printf("%d", n);//显示n;
    scanf_s("%d", n);//读入n;
    for (i = 1; i <= n; i++)//确定行数;
    {
        for (k = 1; k <= abs (i-3); k++)//确定每行空格数,这里用了(整数)绝对值函数
        {
            printf(" ");
        }

        for (m = 1; m <= 2 *abs (i-3)-1; m++)//确定每行星星数;
        {
            printf("*");
        }
        printf("\n");
    }
}

  • 写回答

3条回答 默认 最新

  • weixin_43321370 2023-10-04 13:16
    关注

    如果说要打印成
    “第一行一个星星空两格,第二行三个星星空一格,第三行五个星星不空格,第四行三个星星空一格,第五行一个星星空两格”
    则需要把输出空格和星型的for循环调换位置,并将控制星型输出的条件改为m <= 5 - 2abs (i-3)。
    想让当n不为5时也成立同样规律,需将控制星型输出的条件改为m <= n - 2
    abs (i-(n/2+1)),控制空格输出的条件改为k <= abs (i-(n/2+1))。

    #include <stdio.h>
    #include <math.h>
    int main()
    {
        int i, m, k;//分别为行,每行星星数,每行空格数;
        int n=0;//n只是作为限制数;
        printf("%d", n);//显示n;
        scanf_s("%d", &n);//读入n;
        for (i = 1; i <= n; i++)//确定行数;
        {
            for (m = 1; m <= n - 2*abs (i-(n/2+1)); m++)//确定每行星星数;
            {
                printf("*");
            }
            for (k = 1; k <= abs (i-(n/2+1)); k++)//确定每行空格数,这里用了(整数)绝对值函数
            {
                printf(" ");
            }
            printf("\n");
        }
       return 0;
    }
    
    

    运行结果如下
    输入5时:

    img

    输入9时:

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 10月12日
  • 已采纳回答 10月4日
  • 创建了问题 10月4日

悬赏问题

  • ¥15 岛津txt格式文件转nirs格式
  • ¥15 石墨烯磁表面等离子体
  • ¥15 angular 项目无法启动
  • ¥15 安装wampserver,图标绿色,但是无法进入软件
  • ¥15 C++ MFC 标准库 加密解密解惑
  • ¥15 两条数据合并成一条数据
  • ¥15 Ubuntu虚拟机设置
  • ¥15 comsol三维模型中磁场为什么没有“速度(洛伦兹项)”这一选项
  • ¥15 electron 如何实现自定义安装界面
  • ¥15 关于#linux#的问题:子进程C运行“ls –l”命令,且显示“C运行ls-l命令”(语言-c语言)