• 打印图形输出三角形 *


    题目要求:

    • 输入数字打印三角形排列的*图案
    • 实现可以多组输入
    • 实现输出菱形图案

    如图:

    写在前面:题目要求输出 * 三角形图案,一般题目如果不做特殊要求直接用打印函数输出题设要求即可。

    分析:n为用户输入

    第一行:n-1个空格      1个*
    第二行:n-2个空格      3个*(2×2-1)
    .
    .
    第n行:n-n个空格        2×n-1(2×行-1)

    总结:空格的数量和*的数量只于行有关

     根据这一特性我们可写出两个函数,分别打印向上的三角形图案和向下的三角形图案。

    #include <stdio.h>
    
    void PrintUp(int n)//给出行数打印上三角
    {
        for(int i = 1; i <= n; i++)//i表示当前行号
        {
            for(int j = 0; j < n - i; j++)//打印空格
            {
                printf(" ");
            }
            for(int j = 0; j < 2*i-1; j++)//打印*
            {
                printf("*");
            }
            printf("
    ");
        }
    }
    
    void PrintDown(int n)//给出行数打印下三角
    {
        for(int i = n; i >= 0; i--)//i表示当前行号
        {
            for(int j = 0; j < n - i; j++)//打印空格
            {
                printf(" ");
            }
            for(int j = 0; j < 2*i-1; j++)//打印*
            {
                printf("*");
            }
            printf("
    ");
        }
    }

    运行程序测试:

    #include <stdio.h>
    int main()
    {
    
        int n;      //用户输入
      
        while(scanf("%d",&n) != EOF)//多组输入
        {
            PrintUp(n);
            PrintDown(n);
        }
        
        return 0;
    }

    运行结果:

    可是结果并非我们设想的那样输出菱形,而是输出了两个底边贴靠在一起的三角形图案。(这里提供一种方法,可以通过移动打印函数的光标,把PrintUp(n);函数打印过后的光标向上移动一行,使PrintDown(n);的第一行与上一个函数的最后一行重合即可)说明我们在设计函数的时候设计的不够完整,功能太过单一,实用性不强。因此我们需要重新设计函数以实现题目要求输出菱形。

    用两个三角形拼接是肯定不行了,那么就设计一个通用性强一点的,设计一个能输出制定的某行的函数。只需要提取之前函数的代码重新封装即可。

    void RowPrint(int n,int i)//给出行数打印一行
    {
        for(int j = 0; j < n - i; j++)//打印空格
        {
            printf(" ");
        }
        for(int j = 0; j < 2*i-1; j++)//打印*
        {
            printf("*");
        }
        printf("
    ");
    }

    RowPrint(int n,int i) 函数提供两个参数,ni 表示输出一个n行三角形的地 行,写入主函数测试。

    #include <stdio.h>
    int main()
    {
    
        while(scanf("%d",&n) != EOF)
        {
            for(int i = 1; i <= n; i++)//第一行到第n行
            {
                RowPrint(n,i);
            }
            for(int i = n-1; i > 0; i--)//第n-1行到第一行
            {
                RowPrint(n,i);
            }
        }
    
        return 0;
    }

    最后运行通过。

  • 相关阅读:
    HDU 3389 Game (阶梯博弈)
    HDU1536&&POJ2960 S-Nim(SG函数博弈)
    HDU 2089 不要62(数位DP)
    ACdream 1210 Chinese Girls' Amusement(高精度)
    CodeForces 659D Bicycle Race (判断点是否为危险点)
    HDU 4549 (费马小定理+矩阵快速幂+二分快速幂)
    手动删除Win7系统服务列表中残留服务的操作步骤
    C++学习37 string字符串的访问和拼接
    C++学习36 string类和字符串
    C++学习35 模板中的函数式参数
  • 原文地址:https://www.cnblogs.com/TaoR320/p/12680169.html
Copyright © 2020-2023  润新知