编写程序输出*组成的菱形图案

刚开始学c语言,这道题目不会写,不知道怎么控制空格数量,求大佬帮忙解答

#include<stdio.h>
int main ( )
{
    int x = 9;//计数使用使打印空格方便
    for ( int i = 0; i < 9; i++ )//代表9行,循环9次
    {
        for ( int j = x; j>0; j-- )//打印空格,每次空格减少一个
        {
            printf(" ");
        }
        x--;//使打印的空格每次减少一个
        for ( int m = 0; m <=i*2; m++ )//打印 * 每次增加两个
        {
            printf ("*");
        }

        printf ( "\n");//换行

    }
    //开始打印倒三角   如果上面打印9行,下面要么比上面多一行,要么少一行 我这里是少一行,下面8行
    int l = 2;
    for ( int i = 8; i >0; i-- )//打印8行
    {
        for ( int j = 0; j<l; j++ )//打印空格
        {
            printf (" ");
        }
        l++;
        for ( int m = 0;m<i*2-1 ; m++ )//打印*
        {
            printf("*");
        }
        printf ("\n");
    }
    getchar ( );
    return 0;
}

#include <stdio.h>

/*
    打印菱形
       *
      ***
     *****     
    *******
     *****
      ***
       *
    分析
    1.菱形一定是奇数行
    2.每一行的字符数是相等(星号+空格),等于总行数
    3.计算上面一半的星号的出现规律
        第n行星号个数=n*2-1 
        第n行的空格个数=(总行数-(n*2-1) )/2,每行只要打印左边空格
*/ 
void main(){
    int line; //菱形的总行数
    int mid;//菱形上半部分的行数
    int star;//每行的星号数
    int space;//每行的空格数 
    int i,j;
    printf("请输入菱形的行数(奇数):");
    scanf("%d",&line);
    mid = line/2+1;//上半部分的总行数
    for(i=1;i<=mid;i++){
        star = 2*i-1; //第i行星号个数 
        space = (line-star)/2;//第i行星号左边的空格数 
        //打印空格 
        for(j=1;j<=space;j++){
            printf(" ");
        }
        //打印星号
        for(j=1;j<=star;j++){
            printf("*");
        }  
        //换行
        printf("\n");
    }
    //打印下半部分 
    for(i=mid-1;i>=1;i--){
        star = 2*i-1; //第i行星号个数 
        space = (line-star)/2;//第i行星号左边的空格数 
        //打印空格 
        for(j=1;j<=space;j++){
            printf(" ");
        }
        //打印星号
        for(j=1;j<=star;j++){
            printf("*");
        }  
        //换行
        printf("\n");
    }     
     
}