- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是我第一次在这里发帖,希望我做对了。
基本上我需要帮助试图找出我使用 C 为类编写的一些代码。该程序的目的是向用户询问 0 到 23 之间的数字。然后,根据用户输入的数字,半金字塔将被打印出来(就像老式马里奥游戏中的那些)。我是编程的初学者,仅靠运气就得到了我的代码的答案,但现在我真的不知道我的 for 循环是如何提供金字塔图的。
#include <stdio.h>
int main ( void )
{
int user_i;
printf ( "Hello there and welcome to the pyramid creator program\n" );
printf ( "Please enter a non negative INTEGER from 0 to 23\n" );
scanf ( "%d", &user_i );
while ( user_i < 0 || user_i > 23 )
{
scanf ( "%d", &user_i );
}
for ( int tall = 0; tall < user_i; tall++ )
{
// this are the two for loops that happened by pure magic, I am still
// trying to figure out why are they working they way they are
for ( int space = 0; space <= user_i - tall; space++ )
{
printf ( " " );
}
for ( int hash = 0; hash <= tall; hash++ )
{
printf ( "#" );
}
// We need to specify the printf("\n"); statement here
printf ( "\n" );
}
return 0;
}
最佳答案
我将解释我如何理解这段代码的过程,直到我自己可以舒服地使用它。我会假装没有读你的描述,所以我从头开始。该过程分为几个阶段,我将在进行时编号。我的目标是提供一些使程序更易于阅读的通用技术。
第 1 阶段:了解粗略结构
第一步是大致了解程序的作用,而不会陷入细节的困境。让我们开始阅读 main 函数的主体。
int main(void) {
int user_i;
printf("Hello there and welcome to the pyramid creator program\n");
printf("Please enter a non negative INTEGER from 0 to 23\n");
scanf("%d", &user_i);
scanf
函数将整数设置为等于用户输入的内容。不幸的是,从提示或代码中不清楚整数的用途是什么。让我们继续阅读。
while (user_i < 0 || user_i > 23) {
scanf("%d", &user_i);
}
for (int tall = 0; tall < user_i; tall++) {
user_i
再次出现,我们得到另一个整数
tall
介于
0
之间和
user_i
.让我们再看一些代码。
for (int space = 0; space <= user_i - tall; space++) {
printf(" ");
}
space
发生了什么的细节。或者为什么我们有
user_i - tall
出现,但让我们注意, foo 循环的主体只是打印一个空格。所以这个 for 循环只是有打印一堆空格的效果。让我们看看下一个内部 for 循环。
for (int hash = 0; hash <= tall; hash++) {
printf("#");
}
printf("\n");
}
return 0;
}
user_i
的值获得,第二个部分,外层 for 循环,必须是这个值用来绘制金字塔的地方。接下来让我们试着弄清楚
user_i
方法。
user_i
的含义
user_i
控制有多少外循环迭代,因此打印多少新行,看起来
user_i
控制创建的金字塔的高度。为了获得确切的关系,让我们假设
user_i
有值
3
,然后
tall
将采用值 0、1 和 2,因此循环将执行 3 次,金字塔的高度将为 3。另请注意,如果
user_i
将增加一,然后循环将再次执行,金字塔将高一。这意味着
user_i
必须是金字塔的高度。让我们将变量重命名为
pyramidHeight
在我们忘记之前。我们的主要功能现在看起来像这样:
int main(void) {
int pyramidHeight;
printf("Hello there and welcome to the pyramid creator program\n");
printf("Please enter a non negative INTEGER from 0 to 23\n");
scanf("%d", &pyramidHeight);
while (pyramidHeight < 0 || pyramidHeight > 23) {
scanf("%d", &pyramidHeight);
}
for (int tall = 0; tall < pyramidHeight; tall++) {
for (int space = 0; space <= pyramidHeight - tall; space++) {
printf(" ");
}
for (int hash = 0; hash <= tall; hash++) {
printf("#");
}
printf("\n");
}
return 0;
}
getValidHeight
.这样做后,注意金字塔高度在
main
中不会改变。方法,因此我们可以将其声明为
const int
.我们的代码现在看起来像这样:
#include <stdio.h>
const int getValidHeight() {
int pyramidHeight;
printf("Hello there and welcome to the pyramid creator program\n");
printf("Please enter a non negative INTEGER from 0 to 23\n");
scanf("%d", &pyramidHeight);
while (pyramidHeight < 0 || pyramidHeight > 23) {
scanf("%d", &pyramidHeight);
}
return pyramidHeight;
}
int main(void) {
const int pyramidHeight = getValidHeight();
for (int tall = 0; tall < pyramidHeight; tall++) {
for (int space = 0; space <= pyramidHeight - tall; space++) {
printf(" ");
}
for (int hash = 0; hash <= tall; hash++) {
printf("#");
}
printf("\n");
}
return 0;
}
pyramidHeight - tall
空格,但这里我们有
space <= pyramidHeight - tall
真正类似的情况是
space < pyramidHeight - tall
.因为我们有
<=
而不是
<
,我们得到一个额外的迭代,其中
space
等于
pyramidHeight - tall
.因此我们看到实际上
pyramidHeight - tall + 1
打印空格。同样
tall + 1
散列被打印。
#include <stdio.h>
const int getValidHeight() {
int pyramidHeight;
printf("Hello there and welcome to the pyramid creator program\n");
printf("Please enter a non negative INTEGER from 0 to 23\n");
scanf("%d", &pyramidHeight);
while (pyramidHeight < 0 || pyramidHeight > 23) {
scanf("%d", &pyramidHeight);
}
return pyramidHeight;
}
void printSpaces(const int numSpaces) {
for (int i = 0; i < numSpaces; i++) {
printf(" ");
}
}
void printHashes(const int numHashes) {
for (int i = 0; i < numHashes; i++) {
printf("#");
}
}
int main(void) {
const int pyramidHeight = getValidHeight();
for (int tall = 0; tall < pyramidHeight; tall++) {
printSpaces(pyramidHeight - tall + 1);
printHashes(tall + 1);
printf("\n");
}
return 0;
}
main
时功能,我不用担心细节如何
printSpaces
实际上打印空格。我已经忘记它是否使用
for
循环或
while
环形。这让我的大脑腾出时间去思考其他事情。
main
功能现在易于阅读。我们已经准备好开始考虑它的实际作用了。 for 循环的每次迭代都会打印一定数量的空格,然后是一定数量的散列,然后是新行。由于空格是先打印的,所以它们都会在左边,这就是我们想要得到它给我们的图片。
tall
的值为零对应于金字塔的顶行。
numSpaces
和
numHashes
用于在迭代中打印的空格和哈希数。由于这些变量的值在一次迭代中不会改变,我们可以将它们设为常量。也让我们更改名称
tall
(这是一个形容词,因此对于整数来说是个坏名字)到
distanceFromTop
.我们新的 main 方法看起来像这样
int main(void) {
const int pyramidHeight = getValidHeight();
for (int distanceFromTop = 0; distanceFromTop < pyramidHeight; distanceFromTop++) {
const int numSpaces = pyramidHeight - distanceFromTop + 1;
const int numHashes = distanceFromTop + 1;
printSpaces(numSpaces);
printHashes(numHashes);
printf("\n");
}
return 0;
}
numSpaces
和
numHashes
它们是什么?
numSpaces
的公式和
numHashes
.
numHashes
开始因为它更容易理解。我们要
numHashes
当与顶部的距离为零时为 1,我们希望
numHashes
距离顶部的距离增加一,所以正确的公式是
numHashes = distanceFromTop + 1
.
numSpaces
.我们知道,每次与顶部的距离增加,一个空格就会变成一个散列,因此就少一个空格。因此
numSpaces
的表达式应该有一个
-distanceFromTop
在里面。但是顶行应该有多少个空格?由于第一行已经有一个哈希值,所以有
pyramidHeight - 1
需要做的散列,所以必须至少有
pyramidHeight - 1
空格,以便它们可以转换为哈希值。在代码中我们选择了
pyramidHeight + 1
顶行中的空格,比
pyramidHeight - 1
多两个,因此具有将整个图片向右移动两个空格的效果。
main
中的行数功能
main
中 for 循环的嵌套功能,并使程序的关键逻辑一目了然。
关于c - 这个 C for 循环如何打印文本艺术金字塔?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21211205/
我想简化/减少我的代码,所以我尝试将具有重复参数的类的初始化放在它们自己的扩展类中。这是一个基于 Pyramid & Cornice 的 REST API。 我如何初始化 pyramid.httpex
我正在尝试构建一个由 4 个 DIV 组成的金字塔。布局如下所示: ------ | #1 | ------ ---------------- | #2 | #3 | #
我是 3d 绘图的新手。我只想用 5 个点 build 一个金字塔,然后从中切出一个平面。我的问题是我不知道如何填充边。 points = np.array([[-1, -1, -1],
我需要创建金字塔 slider 。 正如您在我当前的实现中看到的那样,我需要有一个位于其余元素顶部的中心图像。它们形成金字塔结构。图像也被放置在彼此下面,这种效果打破了一切,因为我需要转换它们(中心图
我一直在玩我在这里找到的演示:http://codepen.io/singhiskng/pen/dqiGj 我正在尝试制作一个 4 边形金字塔。
在jsp中实现如图所示的金字塔, 代码如下: 大致思路如下: 1、先画出前5行。因为 i+空格数=总行数,所以第一行的空格数是 总行数-i(第几行),然后画出 *,*的数目=2*i-11;
我在尝试找出一种使用用户输入创建金字塔的方法时遇到了很大的麻烦。它应该是这样的。 Enter a number between 1 and 9: 4 O O O O OOOO OOOO OOOO OO
我一直在寻找解决厄运金字塔的办法。到目前为止,我得出的结论如下: router.use('/create', function(res,req,next) { try { v
我刚刚开始处理。因此,我想创建一个函数,允许任何用户输入边数来创建 3D 金字塔。我正在使用处理 3。我需要一些帮助。提前致谢。我编写了一段目前有效的代码,但我想概括它。任何建议/提示将不胜感激。提前
我使用 JavaScript 创建了一个金字塔以下是我迄今为止使用 for 循环尝试的代码: function showPyramid() { var rows = 5; var ou
我被告知数据库超时(连接、交互、等待)设置为 30 秒。该数据库上有一个网站,人们往往会闲置超过 30 秒。 使用sqlalchemy,我需要在继续查询之前检查mysql连接是否仍然有效,否则站点会出
另一个棘手的问题。你在这里看到的是我的物理金字塔,它由 3 个 LED 构成,在 1 个平面上形成一个三角形,另一个 LED 在中间中心,比其他 3 个高约 18 毫米。第 4 个使三角形成为金字塔。
目标: 我正在尝试生成类似于下面给出的格式的金字塔。这需要一个基本的 Java 程序来接受用户输入、将数字转换为字符串、使用嵌套循环并生成格式化输出。下面是使用 8 行的所需输出示例。 Enter t
我的数据是多维组合数据(所有维度总和为 1 或 100)。我已经学会了如何使用三个变量来创建二维三元图。 我想添加第四个维度,使我的情节看起来像这样。 我愿意使用 python 或 R。我现在正在使用
我的数据是多维组合数据(所有维度总和为 1 或 100)。我已经学会了如何使用三个变量来创建二维三元图。 我想添加第四个维度,使我的情节看起来像这样。 我愿意使用 python 或 R。我现在正在使用
我是一名优秀的程序员,十分优秀!