C for循环中的基本增加/减少问题
只是在网上上一门课,试着做一个类似倒三角的作业。我可以在python中实现这一点,但由于某种原因,在C中它对我不起作用,特别是for循环的一部分,其中应该减少k值。在其他空白项目中也尝试过,只是为了验证问题,但到目前为止,它对我不起作用。递增(j循环)有效,但出于某种原因递减(k循环)无效(同样适用于所有语法选项:k=k-1;k-=1;k--) 不知道哪里会出问题C for循环中的基本增加/减少问题,c,C,只是在网上上一门课,试着做一个类似倒三角的作业。我可以在python中实现这一点,但由于某种原因,在C中它对我不起作用,特别是for循环的一部分,其中应该减少k值。在其他空白项目中也尝试过,只是为了验证问题,但到目前为止,它对我不起作用。递增(j循环)有效,但出于某种原因递减(k循环)无效(同样适用于所有语法选项:k=k-1;k-=1;k--) 不知道哪里会出问题 int main(void){ int height, i, j, k; bool check = false; wh
int main(void){
int height, i, j, k;
bool check = false;
while (check == false)
{
height = get_int("Height: ");
if (height >= 1 && height <= 8)
{
for (i = 0; i < height; i++)
{
for (k = height -2; k >=0; k--)
{
printf(".");
}
for (j = 0; j <= i; j++)
{
printf("#");
}
printf("\n");
}
check = true;
}
}}
这是实际输出
....#
....##
....###
....#####
....######
在第二个循环中,
k
需要是=i
,而不是=0
。我用5
替换了get\u int
int main(void){
int height, i, j, k;
bool check = false;
while (check == false)
{
height = 5;
if (height >= 1 && height <= 8)
{
for (i = 0; i < height; i++)
{
for (k = height -2; k >= i; k--)
{
printf(".");
}
for (j = 0; j <= i; j++)
{
printf("#");
}
printf("\n");
}
check = true;
}
}}
在第二个循环中,
k
需要是=i
,而不是=0
。我用5
替换了get\u int
int main(void){
int height, i, j, k;
bool check = false;
while (check == false)
{
height = 5;
if (height >= 1 && height <= 8)
{
for (i = 0; i < height; i++)
{
for (k = height -2; k >= i; k--)
{
printf(".");
}
for (j = 0; j <= i; j++)
{
printf("#");
}
printf("\n");
}
check = true;
}
}}
构建输出时,变量<代码>高度代码>永远不会更改。你总是从k=3开始。您希望输出的
的数量如何变化
打印
时,请尝试使用变量i
在构建输出时,变量高度永远不会改变。你总是从k=3开始。您希望输出的
的数量如何变化
打印
时,请尝试使用变量i
只需将for循环语句更改为
for (k = height - 1; k >=i; k--)
k索引必须从'height'-1开始,到i变量结束
因此,对于height=5,第一个内部for循环将执行5次,当i增加1时,内部for循环将执行负1次,依此类推。只需将for循环语句更改为
for (k = height - 1; k >=i; k--)
k索引必须从'height'-1开始,到i变量结束
因此,对于height=5,第一个内部for循环将执行5次,当i增加1时,内部for循环将执行负1次,依此类推。k的值正在减小,但k的for循环运行的范围保持不变,因为输入变量height没有改变。因此,它总是打印4个(高度-2+1)点。要了解更多信息,请参见以下步骤:
input->height 5
i = 0, printing four dots for k = 3,2,1,0. printing one '#' for j=0
i = 1, printing four dots for k = 3,2,1,0. printing two '#' for j=0,1
i = 2, printing four dots for k = 3,2,1,0. printing three '#' for j=0,1,2
i = 3, printing four dots for k = 3,2,1,0. printing four '#' for j=0,1,2,3
i = 4, printing four dots for k = 3,2,1,0. printing five '#' for j=0,1,2,3,4
输入->高度5
i=0,为k=3,2,1,0打印四个点。为j=0打印一个“#”
i=1,为k=2,1,0打印三个点。为j=0,1打印两个“#”
i=2,为k=1,0打印两个点。为j=0,1,2打印三个“#”
i=3,为k=0打印一个点。为j=0,1,2,3打印四个“#”
i=4,为k=打印零点。为j=0,1,2,3,4打印五个“#”
k的值正在减小,但是k的for循环运行的范围保持不变,因为输入变量height没有改变。因此,它总是打印4个(高度-2+1)点。要了解更多信息,请参见以下步骤:
input->height 5
i = 0, printing four dots for k = 3,2,1,0. printing one '#' for j=0
i = 1, printing four dots for k = 3,2,1,0. printing two '#' for j=0,1
i = 2, printing four dots for k = 3,2,1,0. printing three '#' for j=0,1,2
i = 3, printing four dots for k = 3,2,1,0. printing four '#' for j=0,1,2,3
i = 4, printing four dots for k = 3,2,1,0. printing five '#' for j=0,1,2,3,4
输入->高度5
i=0,为k=3,2,1,0打印四个点。为j=0打印一个“#”
i=1,为k=2,1,0打印三个点。为j=0,1打印两个“#”
i=2,为k=1,0打印两个点。为j=0,1,2打印三个“#”
i=3,为k=0打印一个点。为j=0,1,2,3打印四个“#”
i=4,为k=打印零点。为j=0,1,2,3,4打印五个“#”
发布的解决方案似乎比可能的更复杂。您只需将所有行打印到所需的高度,然后在每行的开头找到一种方法,以减少打印的'。
#include <stdio.h>
void draw_triangles(int height, char upper_left, char bottom_right)
{
if (height < 1 || height > 8)
return;
for (int row = 0; row < height; ++row)
{
// Calculate how many chars are in the left side of each row
int edge = height - row - 1;
for ( int i = 0; i < edge; ++i )
putchar(upper_left);
for ( int i = edge; i < height; ++i)
putchar(bottom_right);
putchar('\n');
}
}
int main(void)
{
// Let's test it
for (int i = 0; i <= 10; ++i)
{
printf("%d:\n", i);
draw_triangles(i, '.', '#');
puts("");
}
}
#包括
空心绘制三角形(整数高度,字符左上角,字符右下角)
{
如果(高度<1 | |高度>8)
返回;
对于(int行=0;行<高度;++行)
{
//计算每行左侧的字符数
int edge=高度-第1行;
对于(int i=0;i 对于(int i=0;i而言,发布的解决方案似乎比可能的更复杂。您只需将所有行打印到要求的高度,然后在每行的开头找到打印数量减少的。
#include <stdio.h>
void draw_triangles(int height, char upper_left, char bottom_right)
{
if (height < 1 || height > 8)
return;
for (int row = 0; row < height; ++row)
{
// Calculate how many chars are in the left side of each row
int edge = height - row - 1;
for ( int i = 0; i < edge; ++i )
putchar(upper_left);
for ( int i = edge; i < height; ++i)
putchar(bottom_right);
putchar('\n');
}
}
int main(void)
{
// Let's test it
for (int i = 0; i <= 10; ++i)
{
printf("%d:\n", i);
draw_triangles(i, '.', '#');
puts("");
}
}
#包括
空心绘制三角形(整数高度,字符左上角,字符右下角)
{
如果(高度<1 | |高度>8)
返回;
对于(int行=0;行<高度;++行)
{
//计算每行左侧的字符数
int edge=高度-第1行;
对于(int i=0;i 对于(int i=0;我请给我们输入/输出示例。j
循环依赖于i
,而k
循环则不依赖。似乎k
循环也应该依赖于i
。每行上的输出数相同。
。请同时添加Python代码…否则我们无法比较差异。@Draginko请使用问题的编辑功能添加新信息。请给我们输入/输出示例。j
loop依赖于i
,而k
循环则不依赖。似乎k
循环也应该依赖于i
。有每行上输出相同数量的。
(height-1
)。请同时添加Python代码……否则我们无法比较差异。@Draginko请使用问题的编辑功能添加新信息。非常感谢……我发现有两种可能的方法可以解决此问题,一种是将0更改为I,另一种是初始化k=height-I-2……它们之间的差异是什么?或者只需要to以某种方式将变量i包含到循环中?如果算法保持不变……您可以使用