C

C

次のプログラムをじっと見てください。

数学のヘロンの公式をC言語で書くと以下のようになります。

ただしa,b,cは画面(キーボード)から入力し、面積は画面に表示します。

面積は連続して計算できaにマイナスの値が入力されたとき”入力終了”を表示して終わります。

#include . . . /**1*/

#include. . . . /**2*/

int main(void). . . . . /**3*/

{

. . double. . . a;. . ./**4*/

. . double. . . b;

. . double. . . c;

. . double. . . area;

. . while(1) {. . . . . /**5*/

. . . . printf(“a..”);. ./**6*/

. . . . scanf(“%lf”,&a);./**7*/

. . . . if (a < 0) {. . ./**8*/

. . . . . . break;. . ./**9*/

. . . . }

. . . . printf(“b..”);

. . . . scanf(“%lf”,&b);

. . . . printf(“c..”);

. . . . scanf(“%lf”,&c);

. . . . s = (a + b + c) / 2;

. . . . area = sqrt(s * (s-a) * (s-b) * (s-c));. . /**10*/

. . . . printf(“面積は..%f \n”, area);. . ./**11*/

. . }

. . printf(“入力終了!\n”);. . . . . . . /**12*/

. . return 0;. . . . . /**13*/

}

. . は空白を示す。/* */はコメントを表す。

これはヘロンの公式、三角形の3辺の長さa,b,cが分かっているとき、

s=(a + b + c)/2 a,b,cの和の2分の1をsとすると、

面積Sは以下の式で求められる、というものです。

S=squareroot(s(s-a)(s-b)(s-c))

C言語の各ステートメントについては以下の通りです。

次回はC言語の特徴と一般的なプログラミングの留意点について述べます。

*1:標準入出力を使う

*2:数学関数を使う

*3:この関数は整数型で引数は何もない

*4:変数aは倍精度実数型

*5:永久ループ

*6:画面に”a..”を表示

*7:画面から入力した数値を変数aに格納する

*8:aが負のとき

*9:無限ループを抜ける

*10:数学のルート関数を使う

*11:areaを表示する

*12:“入力終了”キャリッジリターンを表示する

*13:mainの関数を抜ける

C言語:豊富な演算子やデータ型、制御構造を持ち、構造化プログラミングに適しています。また、特定のプラットフォームに依存した部分を言語から切り離しているため、移植性の高いプログラムを記述することができます。 もともとシステムの記述用に開発されたので、ハードウェア寄りの低水準な処理を記述することもできます。実際、UNIXはC言語で記述されています。

構造化プログラミング:コンピュータプログラムを記述する際の基本的な技法の一つで、標準的な制御構造のみを使い、プログラム全体を段階的に細かな単位に分割して処理を記述していく手法です。1960年代後半にオランダの情報工学者エドガー・ダイクストラ*1氏らによって提唱されました。現在広く普及しているプログラミング言語や開発手法のほとんどは、その基盤の一つとして構造化プログラミングによる記述を前提としています。 ダイクストラ氏は1967年に発表した「構造化プログラミング」*2という論文で、「一つの入口と一つの出口を持つプログラムは、順次・選択・反復の3つの論理構造によって記述できる」という「構造化定理」を証明しました。構造化プログラミングでは、処理の制御はこの3種類の構文のみを使います*3。前回の例で云うと、Printf文、scanf文が続く構造が順次、if文が選択、while文が反復です。また、プログラム全体を大まかな機能単位に分割し、その中をさらに細かい機能単位に分割していくことにより、記述内容を段階的に詳細化していく技法*4も同時に提唱しました。分割された機能単位は必ず一つの入口と一つの出口を持ち、単位の連結・組み合わせは必ず3つの基本構文のみを使って行ないます。この原則に従うことにより、大規模なプログラムを効率よく、少ないミスで設計・記述できるようになりました。 当時のプログラムは、低水準言語のジャンプ命令をそのままプログラミング言語に実装した「goto文」によって処理をプログラム中の別の場所に移す制御が多用されていたため、規模が大きくなるほど処理の流れを把握しにくくなり、生産性の低下や記述上のミスの温床となっていました*5。構造化プログラミングの普及によって状況は大きく改善し、現在でも構造化プログラミングはプログラムを記述する上での基本的な作法としてプログラマの間で広く共有されています。gotoに相当する構文自体を廃止したプログラミング言語も多くあります。

*1:Edsger Wybe Dijkstra

*2:Structured Programming

*3:基本三構造

*4:ステップワイズリファイアメント

*5:スパゲッティコーディング