首页 > 解决方案 > C中菱形中的线条图案

问题描述

我是 C 的初学者,为了实现菱形,我遇到了一个问题,我正在按照书中的指导练习进行操作,但我被卡住了,我必须实现模式:

在此处输入图像描述

根据练习,他们建议我使用运算符 % 来实现该模式 在此处输入图像描述

我对结构进行了编码,但是当我想实现 @.o.@ 模式时,我只是破坏了一切

#include<stdio.h>


int main(){
  int n, space;
  printf("Number of sides: ");
  scanf("%d", &n);
  space = n - 1;
  for (int i = 0; i < n; i++){
       
        for (int j = 0;j < space; j++){
            printf(" ");
        }

        // patern @.o should be in this loop
        for (int j = 0;j <= i*2; j++){
            printf("@");
        }

        printf("\n");
        space--;
  }
  space = 0;
  for (int i = n; i >= 0; i--){
        
        for (int j = 0; j < space; j++){
            printf(" ");
        }
        // patern @.o should be in this loop
        for (int j = 0;j < (i*2)-1;j++){
            printf("@");
        }

        printf("\n");
        space++;
    }

}

如果有人能给我一个提示或帮助,我真的很感激,我在过去的两周里被困在这里。谢谢你。

标签: c

解决方案


这就是你需要的

#include<stdio.h>



int main(){
  int n, space,i,j;
  char pattern[]={'@','.','o','.'};
  int position;
  printf("Number of sides: ");
  scanf("%d", &n);
  space = n - 1;
  for (i = 0; i < n; i++){

        position=0;
        for (j = 0;j < space; j++){
            printf(" ");
        }

        // patern @.o should be in this loop
        for (j = 0;j <= i; j++,position++)
            printf("%c",pattern[position%sizeof(pattern)]);

        position-=2;
        for(;j<=2*i;j++,position--)
            printf("%c",pattern[position%sizeof(pattern)]);

        printf("\n");
        space--;
  }
}

某些情况下的输出:

./test
Number of sides: 10
         @
        @.@
       @.o.@
      @.o.o.@
     @.o.@.o.@
    @.o.@.@.o.@
   @.o.@.o.@.o.@
  @.o.@.o.o.@.o.@
 @.o.@.o.@.o.@.o.@
@.o.@.o.@.@.o.@.o.@

./test
Number of sides: 5
    @
   @.@
  @.o.@
 @.o.o.@
@.o.@.o.@

./test
Number of sides: 2
 @
@.@

对于钻石:

#include<stdio.h>



int main(){
  int n, space,i,j;
  char pattern[]={'@','.','o','.'};
  int position;
  printf("Number of sides: ");
  scanf("%d", &n);
  space = n - 1;
  for (i = 0; i < n; i++){

        position=0;
        for (j = 0;j < space; j++){
            printf(" ");
        }

        for (j = 0;j <= i; j++,position++)
            printf("%c",pattern[position%sizeof(pattern)]);

        position-=2;
        for(;j<=2*i;j++,position--)
            printf("%c",pattern[position%sizeof(pattern)]);

        printf("\n");
        space--;
  }

space = 0;
  for (int i = n-1; i >= 0; i--){

        for (int j = 0; j < space; j++){
            printf(" ");
        }
        position=0;

        for (j = 0;j <= i; j++,position++)
            printf("%c",pattern[position%sizeof(pattern)]);

        position-=2;
        for(;j<=2*i;j++,position--)
            printf("%c",pattern[position%sizeof(pattern)]);

        printf("\n");
        space++;
    }
}

和输出

 ./test
Number of sides: 10
         @
        @.@
       @.o.@
      @.o.o.@
     @.o.@.o.@
    @.o.@.@.o.@
   @.o.@.o.@.o.@
  @.o.@.o.o.@.o.@
 @.o.@.o.@.o.@.o.@
@.o.@.o.@.@.o.@.o.@
@.o.@.o.@.@.o.@.o.@
 @.o.@.o.@.o.@.o.@
  @.o.@.o.o.@.o.@
   @.o.@.o.@.o.@
    @.o.@.@.o.@
     @.o.@.o.@
      @.o.o.@
       @.o.@
        @.@
         @

推荐阅读