目前正在修CS-50课程,想知道是否有人能帮我。我应该创建一个程序,要求用户身高在1-23之间(并不断提示用户,直到给出一个有效的答案)--我能够编码的部分。
#include <cs50.h>
#include <stdio.h>
int main(void)
{
int height;
do
{
printf("please give me a height between 1-23: ");
height = GetInt();
}
while (height < 1 || height > 23);
}
do-while循环似乎实现了它的目的。现在,程序,给定可变的“高度”,现在需要创建一个该高度的金字塔。金字塔的底部与终端的左下角对齐,其最后一行以2个散列结尾:
高度为4的样本金字塔:
##
###
####
#####
但是对于金字塔1-23的任何高度,代码都必须是通用的。
这是我很难做的事情(实际上是做一个代码来画这个)。
我注意到,对于每一行,都需要散列的数量(如果我们将最上面的行称为“row 1”,后面的行称为“row 2”等等)。。。是
行号+1。至于所需的空间量,可以用高度行号来表示。
如果有人能向我解释如何使用C编写这个程序,我将不胜感激!:)
最佳答案
这里有一种实现方法。基本上,你需要自下而上建造金字塔。一旦你看到循环结构,这个任务就很简单了,只需要把打印正确数量的空格和哈希符号的数学运算记下来就很难了:
#include <stdio.h>
int main(void)
{
int height, i, j;
do
{
printf("please give me a height between 1-23: ");
height = GetInt();
}
while (height < 1 || height > 23);
printf("\n");
for (i = 0; i < height; i++) {
for (j = 0; j < height - i - 1; j++)
printf(" ");
for (j = 0; j < i + 2; j++)
printf("#");
printf("\n");
}
}
有关发生什么以及为什么需要每个循环的详细说明:
外部for循环:变量
i
对应于金字塔中的一行。i
的值对于后两个循环中的每一个都将保持不变第一个内部for循环:对于任何行,都需要
height - i - 2
空格。您可以解决这个问题,因为总行宽将height
,并且任何行都有i + 2
哈希符号,所以需要有height - (i + 2) = height - i - 1
空格。所以基本上,这个循环只打印所需的空间。您可以使用变量j
第二个内部for循环:这个循环类似于第一个内部循环,但是现在需要打印散列标记。在循环开始时,重置
j
并计数到所需的哈希标记数关于c - 制作哈希金字塔,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31529124/