C 程序,如何使用循环在较大的形状上打印形状?
C Program, How to print shapes on a larger shape using loops?
刚开始学C,想求助一下
我目前正在使用 *s 在更大的形状上打印几个不同的形状。
我正在使用 2 个 for 循环,外循环打印出底数 shape/map(例如 10 x 5 矩形),内循环打印出另一个形状(例如 2 x 3 矩形)基本形状。
这是我现在拥有的:
使用以下代码:
void createMapAndAddFeature(int x, int y, int xloc, int yloc, int feat_x_dim, int feat_y_dim)
{
for (int i = 0; i < y; i++)
{
for (int j = 0; j < x; j++)
{
//starting from which row
//xloc refers to which column, yloc refers to which row.
//e.g. xloc = 0, plots on 1st column. yloc = 2, plots on 3rd row
if (yloc == i && xloc == j) {
printf(" *"); //indicates at which coordinate to start plotting
}
else {
printf(" ."); // . is the full shape
}
}
printf("\n");
}
}
x 和 y 位置帮助我确定我应该开始绘制形状的位置,因此我在地图中有一个 *。
现在,我卡在需要在地图上创建形状的部分,例如,使用尺寸 2 和 3,这将导致以下输出:
有人知道如何实现吗?
我需要另一个嵌套的 for 循环吗?或者另一个 "if else" 语句在基本形状上绘制 2x3 形状?
此外,我该怎么做才能同时绘制多个形状?
例如,另一个 2x2 正方形:
我想我需要更多 "if else" 条件来检查循环中的现有 *s,然后绘制后续的新形状,以便它与现有形状重叠。如有错误请指正
非常感谢任何帮助和建议。提前致谢。
(对我而言)最简单的方法是遍历 space 中的所有点,并对每个点进行分类:
- 如果在最外边,打印一个
*
(可选)
- 如果它在内部特征上,打印一个
*
- 否则打印一个
.
这是一个快速尝试:
#include <stdio.h>
static void printFigure(int width, int height, int fx, int fy, int fwidth, int fheight)
{
for (int y = 0; y < height; ++y)
{
for (int x = 0; x < width; ++x)
{
char out;
/* if (x == 0 || y == 0 || x == width - 1 || y == height - 1)
out = '*';
*/ if(x >= fx && y >= fy && x < (fx + fwidth) && y < (fy + fheight))
out = '*';
else
out = '.';
putchar(out);
}
putchar('\n');
}
}
int main(void) {
printFigure(10, 5, 0, 2, 2, 3);
return 0;
}
这会打印:
..........
..........
**........
**........
**........
注释掉的部分实现了第一个(可选)的想法,标记外边框。我最初认为这是一个目标,但意识到我误读了。决定保留代码,因为它可能具有指导意义。
你当然可以做一个循环并从 "pixel index" 计算 x
和 y
,但我不认为这对像这样的简单东西更好。
刚开始学C,想求助一下
我目前正在使用 *s 在更大的形状上打印几个不同的形状。
我正在使用 2 个 for 循环,外循环打印出底数 shape/map(例如 10 x 5 矩形),内循环打印出另一个形状(例如 2 x 3 矩形)基本形状。
这是我现在拥有的:
使用以下代码:
void createMapAndAddFeature(int x, int y, int xloc, int yloc, int feat_x_dim, int feat_y_dim)
{
for (int i = 0; i < y; i++)
{
for (int j = 0; j < x; j++)
{
//starting from which row
//xloc refers to which column, yloc refers to which row.
//e.g. xloc = 0, plots on 1st column. yloc = 2, plots on 3rd row
if (yloc == i && xloc == j) {
printf(" *"); //indicates at which coordinate to start plotting
}
else {
printf(" ."); // . is the full shape
}
}
printf("\n");
}
}
x 和 y 位置帮助我确定我应该开始绘制形状的位置,因此我在地图中有一个 *。
现在,我卡在需要在地图上创建形状的部分,例如,使用尺寸 2 和 3,这将导致以下输出:
有人知道如何实现吗?
我需要另一个嵌套的 for 循环吗?或者另一个 "if else" 语句在基本形状上绘制 2x3 形状?
此外,我该怎么做才能同时绘制多个形状?
例如,另一个 2x2 正方形:
我想我需要更多 "if else" 条件来检查循环中的现有 *s,然后绘制后续的新形状,以便它与现有形状重叠。如有错误请指正
非常感谢任何帮助和建议。提前致谢。
(对我而言)最简单的方法是遍历 space 中的所有点,并对每个点进行分类:
- 如果在最外边,打印一个
*
(可选) - 如果它在内部特征上,打印一个
*
- 否则打印一个
.
这是一个快速尝试:
#include <stdio.h>
static void printFigure(int width, int height, int fx, int fy, int fwidth, int fheight)
{
for (int y = 0; y < height; ++y)
{
for (int x = 0; x < width; ++x)
{
char out;
/* if (x == 0 || y == 0 || x == width - 1 || y == height - 1)
out = '*';
*/ if(x >= fx && y >= fy && x < (fx + fwidth) && y < (fy + fheight))
out = '*';
else
out = '.';
putchar(out);
}
putchar('\n');
}
}
int main(void) {
printFigure(10, 5, 0, 2, 2, 3);
return 0;
}
这会打印:
..........
..........
**........
**........
**........
注释掉的部分实现了第一个(可选)的想法,标记外边框。我最初认为这是一个目标,但意识到我误读了。决定保留代码,因为它可能具有指导意义。
你当然可以做一个循环并从 "pixel index" 计算 x
和 y
,但我不认为这对像这样的简单东西更好。