Previous: 括弧の対応関係 --- vi の便利なコマンド
Up: 制御構造1 繰り返し --- for文
Next: 復習
Previous Page: 括弧の対応関係 --- vi の便利なコマンド
Next Page: 復習

ソースプログラムの書き方

美しいソースプログラムというのは、結局、読みやすく間違いが減るようなものをいう。 そういう意味で、「きれい」といっても芸術的というような意味ではなく、優れて 機能的な意味における美しさを意味する。ソースコードの書き方には、従って、 色々な流儀があり、それぞれ一理を持っているために、唯一の書き方というものは、 当然存在しない。ここでは、K & R に準拠した書き方について述べる。

for ( i=0; i<10 ; i=i+1 ){
                if ( i < 5 ){
                        printf("test1\n");
        }else{
                printf("test2\n");
}
}
この例では、for 文と if 文が入れ子になっており、特に { } の対応が問題 となる。しかし、この例の書き方は、どの括弧がどれに対応するかが非常に分かり づらい。 従って、こうした書き方はミスやバグの原因となる。これを、K & R 風に括弧の 対応を付けた書き方に直すと、
for ( i=0; i<10; i=i+1 ){
                if ( i<5 ){
                        printf("test1\n");
                }else{
                        printf("test2\n");
                }
        }
のようになる。ポイントは、字下げ(インデント)の部分で、for と for の終わり を示す } が同じ桁位置にあり、if と真であるときの終わりの } および偽である ときの終わりの } がすべて同じ桁位置にきている。更に、これらの if 文の 実行文は全て if より一段右に寄っていて、同じ桁位置に置かれている。 これによって、プログラムの構造が非常に見やすくなる。ここで、桁位置を 合わせるためには、空白で揃えるよりもタブを使ったほうが効率が良い。 タブは、目で見たときは数個の空白のように見えるが、実際は1つの文字である ので、削除すると左に1段づつ寄ることになるので、便利である。 キーボードからは、Q の隣にある Tab キーを押すことによって入力できる。 ちなみに、通常タブは 8 文字の空白として表示されるが、vi では、これを 4 文字の空白として表示するように設定することも出来る。(入れ子が多くなり 大量の字下げが必要なときに便利である。) タブで表わす空白の数は、以下のコマンドで変更できる。 ex モードで、:set ts=? (? は、4又は8)、従って、4個の空白を表わす ようにしたい場合は、 :set ts=4 とすれば良い。

課題

cd c を実行した後で( /c に移動した後で)、以下の課題を やってみよ。

課題 4.1
簡単な繰り返し

以下のプログラムを実行してみよ。

/* kadai 4.1 */
#include <stdio.h>

main() { int i; for ( i=0; i<10; i=i+1 ){ printf("こんにちは。\n"); } }

課題 4.2
倍数の表示

7の倍数で、100以上200以下のものを全て表示するプログラムを作れ。

課題 4.3
足し算をしてみる。

1から100までの数を足すプログラムを for 文を用いて作成し、実行してみよ。 結果は、5050にならなければならない。

課題 4.4
複利計算

銀行に預金をすると、毎年年末に預金残高の3%の金利がつくとする。 この時、最初に1万円を預けたまま、10年おいておいたら、10年目の 年度末には預金残高はいくらになっているか。

但し、毎年の金利計算は1円未満は切り捨てられるものとする。

参考 毎年の金利がついた後の預金残高は、(預金) * 1.03 で求められる。

課題 4.5
倍々ゲーム

あるピッチャーが、以下のような報酬の計算でシーズンの終わりにその年度の 報酬を支払うことを要求した。 一人の打者を3振に取る毎に、報酬額を2倍に増やす。但し、最初は1円から スタートし、もし、3振に取れなかったら、1円に逆戻りとなる。 従って、2人の打者を3振に取れば、報酬額は、2円となり、更に次の 打者を3振に取れば、4円、更に4人目で、8円ということになる。 勿論、3振に取っているかぎり、試合を越えて、この計算は継続する。 さて、このピッチャーの報酬が1億円を越えるためには、何人の打者を 連続して3振に取れば良いのだろうか?

但し、1年間に試合は120試合とし、このピッチャーは毎試合3人の打者 にしか投げることは出来ないものとする。

 

ヒント for 文の中に if 文を使う。1億円を越えていたら、その時の 打者の数を表示して、繰り返しを抜ける。(例9をみよ。)

作成したプログラムと解答をメイルで、金山まで送ること。但し、題は「課題4」と すること。

maruyama@wakhok.ac.jp
1995年02月08日 (水) 18時57分57秒 JST