プログラミング基礎I: 第2回

計算機上での数値の表し方、プログラムにおける変数などについて学びます。

講義スライド: 20191007prog.pdf

課題

  1. printf文とsizeof演算子を用いて、char型、int型、short型、long型、unsigned int型、float型、double型の記憶領域のサイズを表示するプログラムを作成して下さい。
    • sizeof演算子を適用した結果はどのような型になるのか、それを出力する際にはどのようにしたら良いかに注意してください。
  2. int型、short型、long型、unsigned int型、unsigned short型、unsigned long型の整数について、表現できる最大・最小値を10進数で求めてください。
    • C言語の数学ライブラリ(math.h)では、xy
      double pow(double x, double y)

      という関数として表現されます。この関数は、

      double a, b, c;
      a = 3.0;
      b = 2.0;
      c = pow(a, b);

      のように使用します。

  3. Excelの関数DEC2BIN、DEC2HEXを用いて、
    ±20, 21, 22, 23, 24, 25, 26, 27, 28
    ±(20-1), (21-1), (22-1), (23-1), (24-1), (25-1), (26-1), (27-1), (28-1)
    について、その2進、16進表現を求めてください。
  4. 計算結果が、その変数が取りうる範囲を超えた場合、どのようなことが起こるかを、arith.cに大きな値を入力して確かめてください。
  5. printf文で%dの代わりに%xを用いると16進数で表示することができます。これを使ってarith.cを改造し、10進数に加えて16進数でも結果が表示されるようにしたプログラムを作成してください。また、2147483647+1がどのように表示されるか確認してください。
  6. scanf文で変数仕様と入力される数値の型が一致しないとき、どのようなことが起きるかを次のようなプログラムで試してみてください。
    コンパイルするとwarningが出ると思いますが、実行ファイルは生成されるので、その実行ファイルで試してみてください
    #include <stdio.h>
    int main(void)
    {
     short s0, s, s1;
     s0 = 0;
     s1 = 0;
     scanf("%d", &s);
     printf("s0=%hd\n", s0);
     printf("s=%hd\n", s);
     printf("s1=%hd\n", s1);
     
     return 0;
    }

    short型の値の範囲を超えた数値(例えば80000)を入力し、表示される結果について説明してください。

  7. 整数を16進数で入力すると、10進数に変換して表示するプログラムを作成してください。