ページへ戻る

+ Links

 印刷 

blike​/intro​/p0003 :: OSASK計画

osaskwiki:blike/intro/p0003

Page Top

(1) rei0004.c anchor.png

int a;
a = 1 + 2;
printf("%d", a);
  • 今回はここから話をはじめたいと思います。1行目は、aというのは変数だよ、これは整数を覚えるのに使うよ、とコンピュータに教えるためのものです。命令のintは整数のintergerに由来します。こうやって前もって断っておかないと、いきなりaとか書いてもコンピュータは驚いてしまって、「なんかいきなりaとか出てきたんだけど、ちゃんと宣言してから使ってよね」というエラーが出てしまいます。
  • 2行目は、1+2を計算してその結果がaに代入されます。1+2という数式を覚えるのではなくて、答えである3を覚えます。
  • そして3行目。printfでは%dを使うと変数の中身を表示することができます。なんかよくわからない書き方だなあと感じると思いますが、とりあえずこう書けば変数の値を表示することができる、と今は思ってください。
  • ということでこれを実行すると画面に3が表示されます。まあ面白くはないです。ごめんなさい。
Page Top

(2) rei0005.c anchor.png

int a;
a = 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10;
printf("こたえは %d", a);
  • これを実行すると、画面には「こたえは 55」と表示されます。これくらいになると、ただの計算機よりはかしこいかなという気になります。また、%dの意味も少し分かってきます。つまり%dの部分に変数の値が置き換わって表示されるというわけです。
  • ここまではいいでしょうか?
Page Top

(3) rei0006.c anchor.png

int a, b, c;
a = inptInt("たて? ");
b = inptInt("よこ? ");
c = a * b;
printf("めんせき = %d", c);
  • これを実行すると、縦や横の数字を聞かれるようになります。入力した数字は変数aとbに入ります。そしてそれを掛け算した結果がcに入って、面積として表示されます。
  • このように inptInt を使うと、数字を入力できるようになります。またC言語では掛け算の記号に*を使います。
  • 面積の計算は簡単すぎて面白くないですが、もっと難しい公式を覚えさせれば、それなりに役に立ちます。
Page Top

(4) rei0007.c anchor.png

float a, b, c, d;
a = inptFlot("しんちょう[cm]? ");
b = inptFlot("たいじゅう[kg]? ");
c = a / 100.0;
d = b / (c * c);
printf("BMI = %f", d);
  • これは身長と体重からBMIを計算するプログラムです。今回は整数の計算では不足なので、小数を扱っています。小数を覚えられる変数を作るには int の代わりに float を使います。そして printf では %d の代わりに %f を使うようにします。100ではなく100.0にしているのは、これは小数を使った割り算なんだよと強調するためです(このプログラムの場合は前後の文脈から判断して小数の割り算だとコンピュータに気づいてもらえるので、別に100でも問題はないですが)。
  • おっといい忘れていました。 / は割り算の記号です。
  • ちなみにBMIは20~24くらいの範囲であればいいらしいです。あなたはどうですか?
Page Top

(5) まとめ anchor.png

  • 今回は最後の例題に float が出てきましたが、今後 float はあまり出てこないのでそれほど重要ではないです。整数の計算だけでは困るなあということがもしあったら思い出してあげてください。
  • 変数は重要です。超重要です。
Page Top

指導者用の註釈 (普通の人は読まなくていいです) anchor.png

  • inptInt()の実装例は次のとおり
    int inptInt(const char *s, ...)
    {
        int r;
        if (s != NULL) { sを表示(printf風に); }
        scanf("%d", &r);
        return r;
    }
  • このような関数を使うことで、scanfでポインタの利用を避けられる。初学者は&を付け忘れる場合が少なくなく、その場合ポインタ的におかしいために、アプリは不正なアクセスをしかねない。そういう危険を回避するためにこの段階でのメジャーなscanfの利用をしていない。

Last-modified: 2011-02-17 (木) 00:00:00 (JST) (319d) by lina