分析:
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("\n");
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("\n");
运行程序测试:
#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("\n");
RowPrint(int n,int i) 函数提供两个参数,n、i 表示输出一个n行三角形的地 i 行,写入主函数测试。
#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;
最后运行通过。
public static void main(String[] args){
System.out.println(args“ *”);
System.out.println(args“ ***”);
System.out.println(args“ *****”...
public class Test {
public static void main(String[] args) {
// System.out.println(args[0]);
// System.out.println(args[1]);
for(int i=0;i<4;i++)...