问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

用C语言如何打出三角形

创作时间:
作者:
@小白创作中心

用C语言如何打出三角形

引用
1
来源
1.
https://docs.pingcode.com/baike/1189031


用C语言绘制三角形的几种方法:使用循环结构、递归函数和条件判断。本文将详细介绍用C语言绘制三角形的各种方法,包括简单的星号三角形、等腰三角形、倒立三角形和空心三角形等。这些方法从基础到进阶,适合不同层次的C语言学习者参考。

一、使用循环结构

1. 简单的星号三角形

使用循环结构绘制简单的星号三角形是最基础的方法之一。我们可以通过嵌套循环来实现。

#include <stdio.h>

int main() {
    int i, j, rows;
    printf("请输入行数:");
    scanf("%d", &rows);
    for(i = 1; i <= rows; i++) {
        for(j = 1; j <= i; j++) {
            printf("* ");
        }
        printf("\n");
    }
    return 0;
}

这段代码让用户输入行数,然后通过嵌套的for循环来打印星号三角形。外层循环控制行数,内层循环控制每行的星号数量。

2. 等腰三角形

绘制等腰三角形稍微复杂一些,需要处理空格和星号的排列。

#include <stdio.h>

int main() {
    int i, j, k, rows;
    printf("请输入行数:");
    scanf("%d", &rows);
    for(i = 1; i <= rows; i++) {
        for(j = i; j < rows; j++) {
            printf(" ");
        }
        for(k = 1; k <= (2*i-1); k++) {
            printf("*");
        }
        printf("\n");
    }
    return 0;
}

这段代码通过三个嵌套循环来绘制等腰三角形,第一个循环负责打印空格,第二个和第三个循环负责打印星号。

二、使用递归函数

递归函数是一种更高级的实现方式,可以使代码更加简洁且具有一定的挑战性。

1. 递归打印简单三角形

#include <stdio.h>

void printTriangle(int rows, int currentRow) {
    if(currentRow > rows) {
        return;
    }
    for(int i = 0; i < currentRow; i++) {
        printf("* ");
    }
    printf("\n");
    printTriangle(rows, currentRow + 1);
}
int main() {
    int rows;
    printf("请输入行数:");
    scanf("%d", &rows);
    printTriangle(rows, 1);
    return 0;
}

在这段代码中,我们定义了一个递归函数printTriangle,它根据传入的行数递归打印星号三角形。

2. 递归打印等腰三角形

#include <stdio.h>

void printSpaces(int count) {
    for(int i = 0; i < count; i++) {
        printf(" ");
    }
}
void printStars(int count) {
    for(int i = 0; i < count; i++) {
        printf("*");
    }
}
void printTriangle(int rows, int currentRow) {
    if(currentRow > rows) {
        return;
    }
    printSpaces(rows - currentRow);
    printStars(2 * currentRow - 1);
    printf("\n");
    printTriangle(rows, currentRow + 1);
}
int main() {
    int rows;
    printf("请输入行数:");
    scanf("%d", &rows);
    printTriangle(rows, 1);
    return 0;
}

在这段代码中,我们定义了两个辅助函数printSpacesprintStars,然后通过递归函数printTriangle打印等腰三角形。

三、结合条件判断

1. 打印不同类型的三角形

结合条件判断可以使程序更加灵活,可以根据用户输入打印不同类型的三角形。

#include <stdio.h>

void printSimpleTriangle(int rows) {
    for(int i = 1; i <= rows; i++) {
        for(int j = 1; j <= i; j++) {
            printf("* ");
        }
        printf("\n");
    }
}
void printIsoscelesTriangle(int rows) {
    for(int i = 1; i <= rows; i++) {
        for(int j = i; j < rows; j++) {
            printf(" ");
        }
        for(int k = 1; k <= (2*i-1); k++) {
            printf("*");
        }
        printf("\n");
    }
}
int main() {
    int rows, choice;
    printf("请输入行数:");
    scanf("%d", &rows);
    printf("选择要打印的三角形类型:\n");
    printf("1. 简单三角形\n");
    printf("2. 等腰三角形\n");
    scanf("%d", &choice);
    if(choice == 1) {
        printSimpleTriangle(rows);
    } else if(choice == 2) {
        printIsoscelesTriangle(rows);
    } else {
        printf("无效选择。\n");
    }
    return 0;
}

这段代码让用户选择要打印的三角形类型,然后根据选择调用不同的函数。

2. 灵活的三角形打印

使用条件判断和灵活的输入输出,可以根据用户需求打印更复杂的三角形。

#include <stdio.h>

void printTriangle(int rows, char type) {
    if(type == 'S') {
        for(int i = 1; i <= rows; i++) {
            for(int j = 1; j <= i; j++) {
                printf("* ");
            }
            printf("\n");
        }
    } else if(type == 'I') {
        for(int i = 1; i <= rows; i++) {
            for(int j = i; j < rows; j++) {
                printf(" ");
            }
            for(int k = 1; k <= (2*i-1); k++) {
                printf("*");
            }
            printf("\n");
        }
    } else {
        printf("无效类型。\n");
    }
}
int main() {
    int rows;
    char type;
    printf("请输入行数:");
    scanf("%d", &rows);
    printf("请输入三角形类型(S表示简单,I表示等腰):");
    scanf(" %c", &type);
    printTriangle(rows, type);
    return 0;
}

这段代码允许用户选择三角形类型,并且通过字符输入来进行类型区分,使得代码更加灵活和可扩展。

四、综合应用:基于用户输入的多功能三角形绘制器

为了进一步提升程序的实用性,我们可以综合以上方法,创建一个多功能的三角形绘制器。

1. 绘制器的实现

#include <stdio.h>

void printSimpleTriangle(int rows) {
    for(int i = 1; i <= rows; i++) {
        for(int j = 1; j <= i; j++) {
            printf("* ");
        }
        printf("\n");
    }
}
void printIsoscelesTriangle(int rows) {
    for(int i = 1; i <= rows; i++) {
        for(int j = i; j < rows; j++) {
            printf(" ");
        }
        for(int k = 1; k <= (2*i-1); k++) {
            printf("*");
        }
        printf("\n");
    }
}
void printTriangle(int rows, char type) {
    switch(type) {
        case 'S':
            printSimpleTriangle(rows);
            break;
        case 'I':
            printIsoscelesTriangle(rows);
            break;
        default:
            printf("无效类型。\n");
    }
}
int main() {
    int rows;
    char type;
    char repeat;
    do {
        printf("请输入行数:");
        scanf("%d", &rows);
        printf("请输入三角形类型(S表示简单,I表示等腰):");
        scanf(" %c", &type);
        printTriangle(rows, type);
        printf("是否继续绘制三角形?(Y/N):");
        scanf(" %c", &repeat);
    } while(repeat == 'Y' || repeat == 'y');
    return 0;
}

这段代码让用户可以多次绘制三角形,并在每次绘制后询问是否继续,极大提高了程序的交互性和灵活性。

2. 进一步优化和扩展

我们可以进一步优化和扩展这个程序,例如增加更多类型的三角形,或允许用户自定义星号的符号等。

#include <stdio.h>

void printSimpleTriangle(int rows, char symbol) {
    for(int i = 1; i <= rows; i++) {
        for(int j = 1; j <= i; j++) {
            printf("%c ", symbol);
        }
        printf("\n");
    }
}
void printIsoscelesTriangle(int rows, char symbol) {
    for(int i = 1; i <= rows; i++) {
        for(int j = i; j < rows; j++) {
            printf(" ");
        }
        for(int k = 1; k <= (2*i-1); k++) {
            printf("%c", symbol);
        }
        printf("\n");
    }
}
void printTriangle(int rows, char type, char symbol) {
    switch(type) {
        case 'S':
            printSimpleTriangle(rows, symbol);
            break;
        case 'I':
            printIsoscelesTriangle(rows, symbol);
            break;
        default:
            printf("无效类型。\n");
    }
}
int main() {
    int rows;
    char type, symbol;
    char repeat;
    do {
        printf("请输入行数:");
        scanf("%d", &rows);
        printf("请输入三角形类型(S表示简单,I表示等腰):");
        scanf(" %c", &type);
        printf("请输入使用的符号:");
        scanf(" %c", &symbol);
        printTriangle(rows, type, symbol);
        printf("是否继续绘制三角形?(Y/N):");
        scanf(" %c", &repeat);
    } while(repeat == 'Y' || repeat == 'y');
    return 0;
}

通过允许用户自定义符号,我们进一步提升了程序的灵活性和用户体验。

总结

通过本文,我们详细探讨了用C语言绘制三角形的几种方法。使用循环结构是最常见和最基础的方法,而使用递归函数则更高级且具有一定挑战性。结合条件判断可以使程序更加灵活,综合应用则展示了如何创建一个多功能的三角形绘制器。希望这些方法和示例代码能帮助你更好地理解和应用C语言来绘制三角形。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号