C#实践教程(第2版)
上QQ阅读APP看书,第一时间看更新

3.7 实验指导3-1:输出等腰梯形

使用一种符号,如‘@’、‘#’、‘*’或‘$’等,输出一个等腰梯形,在梯形的中间垂直轴线使用另一种符号,达到如下所示的效果。

     *****$*****
    ******$******
   *******$*******
  ********$********
 *********$*********

通过实现效果看得出,图形是有规律地循环输出,需要用到循环语句。而图像由两部分构成:

□ 一部分是符号,构成梯形的主体。

□ 另一部分是空格,用来控制格式,使输出为等腰梯形。

但两部分不能分开,每一行都要有符号和空格,因此两部分的关系是并列的,可以用两个变量表示两部分的字符串。

整体的效果:梯形由5行构成,每一行又分为对称的两部分。以对称轴左侧为例,符号每一行多一个,符号数目与空格数目的和为10。两边的符号数目和即为10减去空格数,乘以2。中间轴的另一个符号需要使用条件语句,当进行到中间时改变符号,并接着进行下一个循环。

因此,对该图形的输出,首先需要确定整体循环的次数,5行的图形循环5次。

接着是内部的循环,先看空格:空格每一行少一个,总数需要递减。循环数要跟整体循环关联,否则每次循环数一样,将输出矩形的空格。因此只需将总循环数递减,即可使空格数目与总循环数相等。

再看符号,符号与空格数的关系已经明确,即(10_空格数)×2,但因中间有其他符号,可以使用条件语句在循环至中间时改变符号,并接着执行下一个循环,需要使用跳转语句continue。

每个循环都需要将变量字符串累加,但每次循环前,若字符串不为空字符,则输出结果与设想不同。因此在每一行结束时,变量字符串需要清空。

定义每一行的字符串变量trapezoid;定义空格部分字符串变量trapezoid1;定义字符部分字符串变量trapezoid2,具体代码如下:

string trapezoid="";
string trapezoid1 = "";
string trapezoid2 = "";
for (int i = 5; i >0; i--)
{
    for (int j = i; j >0;j-- )
    {
        trapezoid1 = trapezoid1 + " ";
    }
    for (int k =( 10 - i)*2; k >= 0; k--)
    {
        if (k == 10 - i)
        {
            trapezoid2 = trapezoid2 + "$";
            continue;
        }
        trapezoid2 = trapezoid2 + "*";
    }
    trapezoid = trapezoid1 + trapezoid2;
    Console.WriteLine(trapezoid);
    trapezoid = "";
    trapezoid1 = "";
    trapezoid2 = "";
}

执行结果如图3-27所示。

图3-27 等腰梯形