C语言的一个问题,是要求打印一个图形,但我程序写了之后运行不起来,来问下怎么搞?

 打印一个类似这样的图形,用C语言写程序。  

     *                         
    ***                      
   *****                     
  *******                 
 *********      
  *******
   *****
    ***
     *

这是我的程序:

#define _CRT_SECURE_NO_DEPRECATE
#include<stdio.h>
int main()
{
    int line = 0; 
    scanf("%d", &line);
    // 打印上半部分
    int i = 0;
    for (i = 0; i < line; i++)
    {
        int j = 0;
        //打印空格
        for (j = 0; j < line-i; j++)
        {
            printf(" ");

        }
        //打印符号*
        for (j = 0; j < 2 * i + 1; j++)
        {
            printf("*");
        }
        printf("\n");
    }
    //打印下半部分
    for (i = 0; i < line - 1; i++)
    {
        int j = 0;
        for (j = 0; j < i + 2; j++)
        { 
            printf(" ");
        }
        for (j = 0; j < 2 * (line - i) - 1; i++);
        {
            printf("*");
        }
        printf("\n");

    }
    return 0;
}

运行之后发现在输入一个数组之后,就不再运行后面的程序了,我刚学1个月的C语言,目前在做题,想问下这个程序哪里出问题了。

写错了一点点,下半部分打印中, for (j = 0; j < 2 * (line - i) - 1; i++);这句有三个问题:

一是for后面加分号是错的,加分号后循环体就等于没有了

二是最后i++错了,应该是j++,显然for循环是控制j的变化,i是固定的

三是j的结束条件line-i要改为line-i-1,下半部分比上半部分少一个完整*号行

#include<stdio.h>
int main()
{
    int line = 0; 
    scanf("%d", &line);
    // 打印上半部分
    int i = 0;
    for (i = 0; i < line; i++)
    {
        int j = 0;
        //打印空格
        for (j = 0; j < line-i; j++)
        {
            printf(" ");
        }
        //打印符号*
        for (j = 0; j < 2 * i + 1; j++)
        {
            printf("*");
        }
        printf("\n");
    }
    //打印下半部分
    for (i = 0; i < line - 1; i++)
    {
        int j = 0;
        for (j = 0; j < i + 2; j++)
        { 
            printf(" ");
        }
        for (j = 0; j < 2 * (line - i-1) - 1; j++)
        {
            printf("*");
        }
        printf("\n");
    }
    return 0;
}

 

        for (j = 0; j < 2 * (line - i) - 1; i++);

这行错误有三个,

应该是j++,你写成i++

for()后面多了个 ;

line - i还要再 -1

 

改成

        for (j = 0; j < 2 * (line - i -1) - 1; j++)

代码如下:{如果对你有帮助,可以给我个采纳吗,谢谢!! 点击我这个回答右上方的【采纳】按钮}。

#include<stdio.h>
int main()
{
    int line = 0;
    scanf("%d", &line);
    // 打印上半部分
    int i = 0;
    for (i = 0; i < line; i++)
    {
        int j = 0;
        //打印空格
        for (j = 0; j < line-i; j++)
        {
            printf(" ");

        }
        //打印符号*
        for (j = 0; j < 2 * i + 1; j++)
        {
            printf("*");
        }
        printf("\n");
    }
    //打印下半部分
    for (i = 0; i < line - 1; i++)
    {
        int j = 0;
        for (j = 0; j < i + 2; j++)
        {
            printf(" ");
        }
        for (j = 0; j < 2 * (line - i -1) - 1; j++)
        {
            printf("*");
        }
        printf("\n");

    }
    return 0;
}

 

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps: 问答会员年卡【8折】购 ,限时加赠IT实体书,即可 享受50次 有问必答服务,了解详情>>>https://t.csdnimg.cn/RW5m

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^