简单的I / O功能w / C.

时间:2018-03-17 22:59:14

标签: c

我刚刚开始尝试通过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");
    }
}

2 个答案:

答案 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--;
        }
    }
}