c语言for循环打印由等边三角形组成的空心星号菱形,输入n,输出n排菱形,如果偶数,则中间两排星号

c语言for循环打印由等边三角形组成的空心星号菱形,输入n,输出n排菱形,如果偶数,则中间两排星号对齐

第1个回答  2016-10-17
#include "stdio.h"
#include "stdlib.h"
int main(void){
    int i,j,t,n,k;
    while(scanf("%d",&n)!=1 || n<1){
        printf("Input error, exit!\n");
        exit(0);
    }
    k=n&1,n=n/2+k;
    for(i=1;i<=n;i++){
        for(j=0;j<39-i;printf(" "),j++);
        for(t=(i<<1)-1,j=1;j<=t;j++)
            printf("%c",(j==1 || j==t || i==n && j&1 ? '*' : ' '));
        printf("\n");
    } 
    for(i=n-k;i>0;i--){
        for(j=0;j<39-i;printf(" "),j++);
       for(t=(i<<1)-1,j=1;j<=t;j++)
            printf("%c",(j==1 || j==t || i==n-k && !k && j&1 ? '*' : ' '));
        printf("\n");
    }
    return 0;
}

追问

好复杂,没有简单点的吗?,不用stdlib.h

追答

#include "stdio.h"
int main(void){

int i,j,t,n,k;
while(scanf("%d",&n)!=1 || n0;i--){
for(j=0;j<39-i;printf(" "),j++);
for(t=(i<<1)-1,j=1;j<=t;j++)
printf("%c",(j==1 || j==t || i==n-k && !k && j&1 ? '*' : ' '));
printf("\n");
}
return 0;
}

追问

要判断奇偶吗

j==1||j==t是什么意思

追答

你的题明明写着偶数怎么怎么的,明显偶数时和奇数时图形不一样,不判断怎么弄,无论是明判还是暗判,总得判!j==1||j==t是j为1或j为t时……

追问

这是原题

追答

你原来的题没有说要实心的,只有空心的,而且说偶数时“中间两排星号”!根据现在的要求修改如下:

实心——

#include "stdio.h"
int main(void){
int i,j,t,n,k;
    while(scanf("%d",&n)!=1 || n<1){
        printf("Input error, exit!\n");
        return 0;
    }
    k=n&1,n=n/2+k;
    for(i=1;i<=n;i++){
        for(j=0;j<39-i;printf(" "),j++);
        for(t=(i<<1)-1,j=1;j<=t;j++)
            printf("%c",'*');
        printf("\n");
    } 
    for(i=n-k;i>0;i--){
        for(j=0;j<39-i;printf(" "),j++);
       for(t=(i<<1)-1,j=1;j<=t;j++)
            printf("%c",'*');
        printf("\n");
    }
return 0;
}

空心——

   只要把以上实心代码中的两句printf("%c",'*');改为printf("%c",(j==1 || j==t ? '*' : ' '));就妥!超字符了,全代码发不上来,只好这样了……

追问

就是空心菱形⋯⋯题七啊⋯⋯

追答

那把实心图也发上来干啥!下面就是空心的:

#include "stdio.h"
int main(void){
    int i,j,t,n,k;
    while(scanf("%d",&n)!=1 || n<1){
        printf("Input error, exit!\n");
        return 0;
    }
    k=n&1,n=n/2+k;
    for(i=1;i<=n;i++){
        for(j=0;j<39-i;printf(" "),j++);
        for(t=(i<<1)-1,j=1;j<=t;j++)
            printf("%c",(j==1 || j==t ? '*' : ' '));
        printf("\n");
    } 
    for(i=n-k;i>0;i--){
        for(j=0;j<39-i;printf(" "),j++);
       for(t=(i<<1)-1,j=1;j<=t;j++)
            printf("%c",(j==1 || j==t ? '*' : ' '));
        printf("\n");
    }
    return 0;
}

本回答被提问者和网友采纳
相似回答