Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

C言語のgoto文を解説!平方根を計算するサンプルプログラム

このCプログラムは、5つの数値に対して平方根を計算する例です。変数countには、読み込んだ数値の個数が記録されます。countが5以下である間は、goto read;文によって制御がラベル「read」の位置へ移り、処理を繰り返します。countが5を超えると、終了メッセージを表示してプログラムを停止します。

goto文とは

goto文は、通常のプログラム実行の流れ(順次実行)から外れ、制御をプログラム内の別の場所へ強制的に移すために使用されます。ラベルで指定した位置にジャンプすることで、ループ処理やエラー処理などを実現できます。

C言語のgoto文を解説!平方根を計算するサンプルプログラム

プログラム

以下は、goto文を使用したCプログラムの例です。

#include <math.h>
main(){
   double x, y;
   int count;
   count = 1;
   printf("Enter FIVE real values in a LINE \n");
   read:
   scanf("%lf", &x);
   printf("\n");
   if (x < 0)
      printf("Value - %d is negative\n",count);
   else{
      y = sqrt(x);
      printf("%lf\t %lf\n", x, y);
   }
   count = count + 1;
   if (count <= 5)
      goto read;
   printf("\nEnd of computation");
}

プログラムのポイント

  • ラベル「read」を付けた位置から、scanfによる入力と平方根の計算が繰り返されます。
  • 入力値が負の場合はsqrt関数が使えないため、「負の値である」ことを示すメッセージを表示します。
  • countが5以下の間だけgoto read;で戻るため、合計5回の入力処理が行われます。

実行結果

上記のプログラムを実行すると、次のような出力が得られます。

Enter FIVE real values in a LINE
2.3 -4.5 2 6.8 -44.7
2.300000 1.516575
Value - 2 is negative
2.000000 1.414214
6.800000 2.607681
Value - 5 is negative
End of computation

まとめ

このようにgoto文を使うことで、for文やwhile文を使わずに繰り返し処理を実装できます。ただし、現代のC言語プログラミングでは、goto文の乱用はコードの可読性や保守性を損なうため、原則としてfor文やwhile文などの制御構造を使うことが推奨されています。goto文は、多重ループからの脱出やエラー処理への一括ジャンプなど、限定的な場面での使用にとどめるのが良いでしょう。

  1. Javaでカウンタープログラムを実装する方法をわかりやすく解説

    この記事では、JavaのSwingを使ってシンプルなカウンター(数を数える)アプリケーションを実装する方法を解説します。このプログラムでは、JLabelでカウント用のラベルを表示し、JTextFieldで現在のカウント値を保持し、JButtonで「追加(Add)」「削除(Remove)」「リセット(Reset)」の3つのボタンを作成します。 「Add」ボタンをクリックするとJTextField内のカウントが1ずつ増加し、「Remove」ボタンをクリックすると1ずつ減少します。さらに「Reset」ボタンをクリックすると、カウントは0にリセットされます。 実装例 import java.awt.*

  2. Pythonで行列内の「完全に囲まれた島」の数を数える方法を解説

    問題の概要0と1のみで構成された2次元のバイナリ行列を考えます。ここで「1」は陸地、「0」は水を表します。島とは、隣り合った1の集まりであり、その周囲がすべて水で囲まれている領域のことです。本記事では、行列の中から端(境界)に一切接しておらず、完全に水で囲まれた島の数を数えるプログラムをPythonで実装する方法を解説します。例として、次のような入力が与えられた場合を考えてみましょう。この場合の出力は 2 となります。島は全部で3つ存在しますが、そのうち2つだけが完全に水で囲まれているためです。解法のアプローチ:DFS(深さ優先探索)この問題は、DFS(深さ優先探索)を用いることで効率的に解く