我想将以下内容打印到控制台

时间:2016-12-26 13:11:20

标签: c

我想将以下内容打印到控制台:

+++++
++++*
+++**
++***
+****
*****

我是编程的新学习者,因此遇到了一些困难。有人可以帮帮我吗?我试过这个,但是不对。我需要改变什么?

#include<stdio.h>
int main(){
    int i, j, k;
    for(i=0; i<5; i++){
        for(j=i; j<5; j++){
            for(k=0; k<j; k++){
                printf("*");
            }
            printf("+");
        }
        printf("\n");
    }
    return 0;
}   

3 个答案:

答案 0 :(得分:3)

您有正确的想法:使用三个for循环。

#include <stdio.h>

int main() {
    for (int i = 0; i < 6; i++) {
        for (int k = i; k < 5; k++) {
            printf("+");
        }
        for (int j = 0; j < i; j++) {
            printf("*");
        }
        printf("\n");
    }
    return 0;
}

测试

+++++
++++*
+++**
++***
+****
*****

Online demo

答案 1 :(得分:1)

首先,将其概括并将其包装在函数中。你想要一个有对角线的正方形。它必须是偶数个字符才能看起来正确。但+和*可以是任何字符,大小可以是6或一直到屏幕最大宽度。

所以

/* print a square with a diagonal
   N - the size of the sides of the square
   cha - character a (eg '+')
   chb - character b (eg '*')
 */      
void printdiagsquare(int N, char cha, char chb);

这是我们的原型,而这只是成功的一半。

现在我们需要检查N是偶数和正数,然后写入循环。

让我们先试试。

   if(N < 2 || (N % 2) == 1)
     printf(N must be even\n");

现在每行的主循环

    for(i=0;i<N;i++)
    {
      //printline code here
      printf("\n");
    }

现在测试一下。是否打印N个空行?

    main(void)
    {
       printdiagsquare(6, '+', '*');
    }

现在打印线条。

打印N-1'+'很容易。我们需要j作为计数器,因为我是外部的

   for(j=0;j<N-1;j++)
     printf("%c", cha);

但是我们需要概括,我需要在增加时打印6 ,, 5,4,3等等。

     So
     for(j=0;j<N-i-1;j++)
       printf("%c", cha);

我会留下最后一点让你做。盲目地输入一个函数是没有意义的。

答案 2 :(得分:1)

您可以针对 m-rows n-columns 尝试更优化的代码  仅在 2 for loop 中: -

 #include <stdio.h>
    int main(void) {
        int m = 6; // Rows
        int n = 5; // Cols
        int i,j,k;
        for (i = 0; i < m; i++) {
            k = i;       
            for (j = n; j >= 0; j--) {
                if(k>=j)
                printf("*");
                else
                printf("+");
            }
            printf("\n");
        }
        return 0;
    }