無條件分枝

前頁 目錄 下頁

我們可以使用 goto 語句(無條件分枝語句)跳到程序中的標記。在 C++ 及 Pascal 中,標記是用一個標識符(即標記的名稱),然後一個冒號(:)來表示;不過,在 Pascal 中的標記必須要用保留字 label 來宣告,而 C++ 中的標記是不用宣告的。

以下的程序利用了一個無條件分枝去繪出一個以星號(*)組成的倒三角形,不過行數必須是十行或以下。

程序二十二︰使用無條件分枝
C++ 版本 Pascal 版本
#include <iostream.h>
main()
{
  int i, j, n;

  cout << "n? ";
  cin >> n;
  for (i = 1; i <= n; i++) {
    if (i > 10)
     
goto finished;
    for (j = n; j >= i; j--)
      cout << "* ";
    cout << endl;
  }
finished:
  cout << "Finished!" << endl;


  return 0;
}
program prog_22(input, output);
label finished;
var
  i, j, n: integer;
begin
  write('n? ');
  readln(n);
  for i := 1 to n do begin
    if i > 10 then
     
goto finished;
    for j := n downto i do
      write('* ');
    writeln
  end;
finished:
  writeln('Finished!')

end.
輸出範例一(紅色的文字由使用者輸入)︰
n? 8
* * * * * * * *
* * * * * * *
* * * * * *
* * * * *
* * * *
* * *
* *
*
Finished!
輸出範例二(紅色的文字由使用者輸入)︰
n? 15
* * * * * * * * * * * * * * *
* * * * * * * * * * * * * *
* * * * * * * * * * * * *
* * * * * * * * * * * *
* * * * * * * * * * *
* * * * * * * * * *
* * * * * * * * *
* * * * * * * *
* * * * * * *
* * * * * *
Finished!

即使無條件分枝用起來很方便,我們應避免使用。事實上,要寫一個沒有無條件分枝的程序不會太困難。例如,上列程序中有陰影的部份可以像下列程序一般改寫︰

程序二十三︰不使用無條件分枝把程序二十二重寫
C++ 版本 Pascal 版本
#include <iostream.h>
main() {
  int i, j, n;

  cout << "n? ";
  cin >> n;
  i = 1;
  while ((i <= n) && (i <= 10)) {
    for (j = n; j >= i; j--)
      cout << "* ";
    cout << endl;
    i++;
  }
  cout << "Finished!" << endl;

  return 0;
}
program prog_23(input, output);
var
  i, j, n: integer;
begin
  write('n? ');
  readln(n);
  i := 1;
  while (i <= n) and (i <= 10) do begin
    for j := n downto i do
      write('* ');
    writeln;
    i := i + 1
  end;
  writeln('Finished!')
end.

前頁 目錄 下頁