如何在C中打印十字架到控制台?

时间:2016-11-26 17:07:12

标签: c

我刚开始学习信息技术,目前我正忙于编程工作。

我必须在C中编写一个代码,它向控制台显示一个十字架,十字架的大小由初始输入决定。

所以控制台输出应如下所示:

size?: 5(user input)

xooox

oxoxo

ooxoo

oxoxo

xooox

(用空格替换os)

我现在已经到了这个目的:

#include <stdio.h>

int main(void)
{
    int n;

    printf("size?: ");
    scanf("%d",&n);

    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            if( (i==j) )
                printf("*");
            else 
                printf(" ");
        }
        printf("\n");
    }

    return 0;
}  

但是这只显示了十字架的一个对角线,我认为相反的对角线可以在if之后由另一个条件创建,但是我对于那个条件可能会丢失。

4 个答案:

答案 0 :(得分:2)

你肯定是在正确的轨道上!不要放弃。

考虑这个问题的方法是考虑循环计数器。你已经找到了一半。如果行和列相同,则需要输出*。那么另一个条件是什么?好吧,想想倒数。如果该行与向后计数的列相同,我们还需要*

我不想为你做功课,所以我会推迟编写代码,但希望能给你提示你需要做什么。

答案 1 :(得分:0)

如果您需要帮助,您还必须检查另一侧的列:

#include <stdio.h>
int n;

int main(void) {
    printf("size?: ");
    scanf("%d",&n);
    for(int i = 1; i <= n; i++) {
        for(int j = 1; j <= n; j++) {
            if (i == j || i == n - j + 1) printf("*");
            else printf(" ");
        }
        printf("\n");
    }       
    return 0;
}  

修改:有建议i + j == n + 1,但我相信i == n - j + 1更有意义,因为:

  • i是您当前的行
  • j是您当前的专栏
  • n是您的方块的大小(最大行/最大列)
  • i == n - j + 1表示在*
  • 上绘制max - current + 1

答案 2 :(得分:0)

if( (i==j) )替换为if( (i==j)||(i+j)==n+1 ),即:

#include <stdio.h>

int main(void)
{
  int n;

  printf("size?: ");
  scanf("%d",&n);

  for(int i=1;i<=n;i++)
  {
    for(int j=1;j<=n;j++)
     {
      if( (i==j)||(i+j)==n+1 )
       printf("*");
      else 
       printf(" ");
     }
     printf("\n");
  }



   return 0;
 } 

答案 3 :(得分:0)

首先,C编译器不喜欢

for (int i = 0; i < n; i++)

他们喜欢

int i = 0;
for (i = 0; i < n; i++)

但是如果你使用的是C ++编译器,你可能不会遇到这个问题。

现在;回到解决手头的问题!

在线:

if( (i==j) )

使用此条件,您将绘制点(1,1),(2,2),(3,3)......

你想在(1,n),(2,n - 1),(3,n - 2)......上绘制点...

所以你需要为这个if语句添加第二个条件:

if ( (i==j) || (i == (n - j) + 1 ) )

如果你想要的话,你可以稍微简化一下......

if ( (i==j) || (i == n - j + 1 ) )

你去吧!它现在打印一个十字架,就像你在问题中描述的那样。