2002 年度「計算機基礎論3B」 2000-11-15

ごく簡単な計算

    /* たし算  1990-04-28, written by Iwase */

#include <stdio.h>

main()
{
    int a, b, sum;              /* 変数の宣言 */

    a = 2;                      /* 代入 */
    b = 3;
    sum = a + b;

    printf("%d たす %d は %d です.\n", a, b, sum);
}

よって、出力は「2 たす 3 は 5 です.」のあと改行、となる。

K&R2 §1.2 が参考になるが、 そこのプログラム例はループを含む分だけこれよりむずかしい。

コンピュータの中は有限なので、 int 型ですべての整数を表わせるわけではない。

%d の代わりに別のものを書くと数の出力法が変わる。 興味のある者は K&R2 §1.2 の終わり近く、§7.2, §B1.2 を見よ。

算術演算子については K&R2 §2.5 を見よ。 ベキ乗を表わす演算子はC言語にはないことに注意。 int 型どうしの割り算では小数点以下は切り捨て。 % については例えば 10 % 3 は 1 となる。

演算の優先順位は数学の場合と同じ。必要ならば小カッコ「( )」を使う。 中カッコ「{ }」、大カッコ「[ ]」 をこの目的に使ってはならない。

-」は c = -b/a のように「符号を変える」の意味でも使える。






ユーザに数を入力させる

#include <stdio.h>

main()
{
    int a, b;

    printf("数を入れてください.\n");
    scanf("%d", &a);                                  /* 数の入力 */
    printf("もう一つ数を入れてください.\n");
    scanf("%d", &b);
    printf("%d たす %d は %d です.\n", a, b, a+b);
}

「数の入力」の行。 ここでプログラムは止まってキーボードからの入力を待つ。 変数名 a の前に & がついて &a となっていることに注意。 なぜ & が必要かは、いまは説明できない。

scanf() は K&R2 §7.4 で論じられているが、 いま読んでもむずかしいだろう。

分岐

#include <stdio.h>

main()
{
    double a, b;

    printf("数を入力してください.\n");
    scanf("%lf", &a);
    printf("もう一つ数を入力してください.\n");
    scanf("%lf", &b);
    if (b == 0) {                               /* if による分岐 */
        printf("0 では割れません.\n");
    } else {
        printf("%f 割る %f は %f です.\n", a, b, a/b);
    }
}

数学関数

    /* 「gcc ファイル名 -lm」としてコンパイルすること */
#include <stdio.h>
#include <math.h>   /* sin */

#define PI 3.14159265

main() {
    printf("%d 度の正弦は %f です.\n", 30, sin(30*PI/180));
}

#define ...」の行は、 「以下で PI が出てきたら 3.14159265 で置き換えろ」という意味である。 このような定数は大文字で書く習慣である。 これについては K&R2 の §1.4 を参照のこと。

関数 sin を使うには、 プログラムの3行目にあるように math.h の include が必要である。 また、コメントにもつけておいたように 「-lm」(エル、エム)をつけてコンパイルする必要がある。 つけないでコンパイルしたらどうなるか、試してみるとよい。

ほかの数学関数については K&R2 の § 7.8.6, B4 を見よ。

3行目の「/* sin */」というコメントは、 関数 sin を使うから math.h を include したんだぞ、という意味でつけてある。

いろいろやってみよう

ここまでに習ったことを組み合わせると、 「2×2行列の積」「2×2行列の逆行列」 「二元の連立一次方程式を解く」「二次方程式を解く」 「等差数列の初項と公差、第何項目かを入力するとその項の値を出力する」 「等比数列の初項と公比、第何項目かを入力するとその項の値を出力する」 などのプログラムが作れるはずである。 興味のある人はどんどんやってみよう。


岩瀬順一