我刚刚开始尝试通过Wikibooks上的教程学习C语言。我已经阅读了here列出的C页,我正在尝试进行练习。关于循环的第二个问题,我遇到了问题:其中我试图创建一个函数来输出由*字符行组成的三角形,其中高度为 2n-1 width是 n 。我的第一个想法是创建一个嵌套循环,其外部将为行号创建一个变量,并将其与最大高度进行比较。内部循环将创建一个变量,该变量基本上用作该特定行内*字符的索引。我的问题是我不知道如何处理最大宽度减小后的线条。谁能指出我正确的方向?这是我的代码:
#include <stdio.h>
void triangle(int);
int main() {
int width;
printf("%s", "Please enter a width for your triangle: ");
scanf("%d", & width);
triangle(width);
return 0;
}
void triangle(int width) {
for (int line = 1; line <= (2 * width) - 1; line++) {
for (int i = 0; i < line && i < width; i++) {
printf("%s", "*");
}
printf("%s", "\n");
}
}
答案 0 :(得分:1)
试试这个:
void triangle(int width) {
int line, i, rev = 0;
for (line = 1; line < width; ++line) {
for (i = 0; i < line && i < width; i++) {
printf("*");
}
printf("\n");
}
for (; line; --line) {
for (i = 0; i < line && i < width; i++) {
printf("*");
}
printf("\n");
}
}
答案 1 :(得分:1)
如果您想在一对嵌套for循环中执行此操作,请尝试:
void triangle(int width) {
int i, j, height, tmp;
height = 2 * width - 1;
tmp = 1;
for (i = 0; i < height; i++) {
for (j = 0; j < tmp; j++) {
putchar('*');
}
putchar('\n');
if (i < height / 2) {
tmp++;
} else {
tmp--;
}
}
}