前回の授業の補足

bitとbyte

1bit…情報の最小単位
1byte = 8bit

int型…4byte long long型…8byte

実数型の誤差について

3.141592653589793238を例にとると、次の桁数までは誤差がないことが保証される(はず)。

int3
float3.14159
double3.14159265358979

有効桁数を指定して実数の値を出力する

C言語で値を出力するとき、printf()関数を使用しますが、競技プログラミングでは、例えば書式制御文字「%lf」を記述するだけでは、出力桁数が足りず、正答との誤差が大きくなってしまい、不正解として扱われてしまうことがあります。

そこで、例えば小数点よりも右に最低でも5桁は値を出力するには、次のようにします。

  double n = 3.141592
  printf("%.5lf\n", n); //「3.14159」と出力される

書式制御文字の「%」と「lf」の間に「.n」の形式で「小数点よりも右にn桁は出力すること」を指定します。

[補足①]
「%n.mlf」の形式で指定すると、以下の2つの条件が指定されます。

  • 小数点よりも右にm桁は出力すること
  • 小数点も含めた値の全体の桁数がn桁以上となること

[補足②]
これと同じような方法で、値を必ずn桁で出力し、桁数が足りない場合は0埋めするようにすることもできます。

  int a = 7;
  printf("%02d\n", a); //「07」と出力される

複合代入演算子

前回、紹介した「算術演算子」を見て気づくことはないでしょうか。

  int a = 12, b = 27;
  a = a + b;

「a」を2回記述するのが面倒ですよね。そこで、「複合代入演算子」というものがあります。
これは、算術と代入を同時に行うものです。

記号意味使用例
+=加算(足し算)の結果を代入するa += b;
-=減算(引き算)の結果を代入するa -= b;
*=乗算(掛け算)の結果を代入するa *= b;
/=除算(割り算)の結果を代入するa /= b;
%=余剰(余り)の結果を代入するa %= b;

例えば、「a += b」は、「a = a + b」と同じ意味となります。

インクリメント演算子とデクリメント演算子

更に、変数の値を1増やしたり、1減らしたりするだけの演算子もあります。

名称使用例
インクリメント演算子i++;
インクリメント演算子++i;
デクリメント演算子i–;
デクリメント演算子–i;

インクリメント演算子とデクリメント演算子は、変数名の前に記述する方法と、後に記述する方法があります。
この演算子を単体で使うだけでは動作に違いはありませんが、代入を行うと動作に違いが表れてしまうため、代入式には使用しません。

[補足]
「a = b++;」とすると、bの値をaに代入してから、bに1を足します。
「a = ++b;」とすると、bの値に1を足してから、aにbの値を代入します。

このページは役に立ちましたか?
役に立った役に立たなかった