C语言,循环问题,画菱形

img


#include <stdio.h>           
int main( )    
{    
    int i,j,n;  //n代表上三角行数   
    scanf("%d",&n);
    //先输出上三角    
    for(i=1;i<=n;++i) //输出n行    
    {    
        //输出第i行    
        for(j=1; j<=n-i; ++j) //输出n-i个空格    
            printf(" ");    
        for(j=1; j<=2*i-1; ++j) //输出2*i-1个星号    
            printf("*");    
        printf("\n");    
    }    
    //下面输出下三角    
    for(i=1;i<=n-1;++i) //输出n-1行     
    {    
        //输出第i行    
        for(j=1; j<=i; ++j) //输出i个空格    
            printf(" ");    
        for(j=1; j<=2*(n-i)-1; ++j) //输出2*i-1个星号    
            printf("*");    
        printf("\n");    
    }    
    return 0;       
} 
#include <stdio.h>
#include <stdlib.h>

int main(){
    int line;  // 菱形总行数
    int column;  // 菱形总列数
    int i;  // 当前行
    int j;  // 当前列

    printf("请输入菱形的行数(奇数):");
    scanf("%d", &line);
    if(line%2==0){  // 判断是否是奇数
        printf("必须输入奇数!\n");
        exit(1);
    }
    column = line;  // 总行数和总列数相同

    for(i=1; i<=line; i++){  // 遍历所有行
        if(i<(line+1)/2+1){  // 上半部分(包括中间一行)
            for(j=1; j<=column; j++){  // 遍历上半部分的所有列
                if( (column+1)/2-(i-1)<=j && j<=(column+1)/2+(i-1) ){
                    printf("*");
                }else{
                    printf(" ");
                }
            }
        }else{  // 下半部分
            for(j=1; j<=column; j++){  // 遍历下半部分的所有列
                if( (column+1)/2-(line-i)<=j && j<=(column+1)/2+(line-i) ){
                    printf("*");
                }else{
                    printf(" ");
                }
            }
        }
        printf("\n");
    }

    return 0;
}