我刚开始学习信息技术,目前我正忙于编程工作。
我必须在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之后由另一个条件创建,但是我对于那个条件可能会丢失。
答案 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 ) )
你去吧!它现在打印一个十字架,就像你在问题中描述的那样。