第一种
#!/bin/bash
read -p "请输入菱形长度:" len
for i in `seq 1 $len` #输出菱形上半部分
do
for ((j=$len-1;j>=$i;j--))
do
echo -n " " #打印空格对齐图案
done
for((m=1;m<=$i;m++))
do
echo -n "* " #打印*号
done
echo
done
for i in `seq 1 $len` #输出菱形的下半部分,下半部分要比上半部分少一行
do
for((j=1;j<=$i;j++))
do
echo -n " " #打印空格对齐图案
done
for((n=$len-1;n>=$i;n--))
do
echo -n "* " #打印*号
done
echo
done
输出结果如下图所示:
第二种
#!/bin/bash
read -p "请输入菱形长度:" len #输出菱形上半部分
for i in `seq 1 $len`
do
for ((j=$len-1;j>=$i;j--))
do
echo -n " " #打印空格对齐图案
done
let num=2*i-1
for m in `seq 1 $num`
do
echo -n "*" #打印*号
done
echo
done
for i in `seq 1 $len` #输出菱形的下半部分,下半部分要比上半部分少一行
do
for ((j=1;j<=$i;j++))
do
echo -n " " #打印空格对齐图案
done
let num="2*(len-i)-1"
for n in `seq 1 $num`
do
echo -n "*" #打印*号
done
echo
done
输出结果如下图所示:
总结
- 在本次的两个案例中,所用的算法的是一样的,只是表现形式不太一样。要想把这个图形设计工整,就是要处理好空格与※之间的关系,从而通过循环求得,并且分成两部分赖考虑:在第一部分中,当我们输入len之后,第一行是由len-1个,和一个※号,组成随着行数的增加,空格随之减少,二※号不停增加。从而我们就可以得到两个循环取值范围。for ((j= l e n − 1 ; j > = len-1;j>= len−1;j>=i;j–))表示空格的循环,for((m=1;m<= i ; m + + ) ) 表 示 ※ 号 的 循 环 。 在 第 二 部 分 中 , 只 有 l e n − 1 行 , 随 着 行 数 的 减 少 , 空 格 不 断 增 加 , 而 ※ 号 却 在 不 停 的 减 少 。 从 而 我 又 可 以 得 到 两 者 的 循 环 的 取 值 范 围 。 f o r ( ( j = 1 ; j < = i;m++))表示※号的循环。在第二部分中,只有len-1行,随着行数的减少,空格不断增加,而※号却在不停的减少。从而我又可以得到两者的循环的取值范围。for((j=1;j<= i;m++))表示※号的循环。在第二部分中,只有len−1行,随着行数的减少,空格不断增加,而※号却在不停的减少。从而我又可以得到两者的循环的取值范围。for((j=1;j<=i;j++))表示空格的循环;for((n= l e n − 1 ; n > = len-1;n>= len−1;n>=i;n–))表示※号的循环。