スポンサーリンク

【C言語】#4 計算の文

ぷーたろー
ぷーたろー

プログラムでデータを取り扱うには、データを格納するための場所が不可欠です。データには数値や文字などの様々な姿があり、それぞれに対応した形式で準備する必要があります。

スポンサーリンク

計算の文とは

計算の文とは、変数や値を用いた様々な計算処理をコンピュータに指示するための文です。ここでいう計算処理は、いわゆる四則演算(加減乗除)だけではありません。変数に値を代入することも、真・偽を判定する論理演算も、コンピュータにとっては計算処理の一種です。

計算の文
#include <stdio.h>

int main(void)
{
    int a;            ▶︎ 変数宣言の分
    int b;
    a = 50;           ▶︎ 計算の文(代入)
    b = a + 10;       ▶︎ 計算の文(足し算して代入)
    printf("%d¥n", a);
    printf("%d¥n", b);
    return 0;
}

計算の文「b = a + 10」のような部分をといいます。
多くのプログラミング言語では、+と=を演算子(operator)、そしてa、b、10の部分をオペランド(operand)といいます。演算子は式にあるオペランドを使って計算します。複雑な式であっても同様で、全ての式はオペランドと演算子のたった2種類の要素だけで構成されています。

リテラル

これまで、数値の10や50ソースコードに直接記述されている値のことをリテラル(literal)といいます。
リテラルはその値に応じたデータ型を持っており、それぞれのリテラルがどの型の情報を表すのかは、リテラルの表記方法で決まります。

リテラルの種類表記例
何も付かない整数50int型
末尾にLまたはlが付いた整数500000Llong型
末尾にFまたはfが付いた小数50.5Ffloat型
何も付かない小数3.1415double型
trueまたはfalsetruebool型
引用符で囲まれた文字‘A’char型
二重引用符で囲まれた文字“Hello”String型*
一覧表

*厳密には異なるが、ここではString型としています。

表記の違い

‘A’と”A”は同じに見えますが、引用符が違うため別のデータとして見なされます。
‘A’はchar型の文字「A」、”A”はString型の文字列「A」です。

リテラルに関する応用記法

整数リテラルに関する応用記法として、10進数以外の数を表す方法も用意されています。整数リテラルの先頭に0xまたは0Xを付けると16進数、0を付けると8進数として解釈されます。

int a = 0x11;    ▶︎ aには17が代入される

エスケープシーケンス

String型のリテラルを記述する際にしばしば用いられるのが、エスケープシーケンス(escape sequence)と呼ばれる特殊な記号です。これは、¥記号とそれに続く数文字からなる表記で、それぞれ特殊な文字を意味します。

表記意味
¥n改行を表す制御文字
¥r復帰を表す制御文字
¥xhh16進数hhの文字コードを持つ文字
¥”二重引用符記号(”)
¥’引用符記号(’)
¥¥円記号(¥)
一覧表
printf()で使う「¥n」の意味

これまで、printf()命令で用いていたのが¥nです。この2文字で、「この場所で改行することを意味する特殊な1文字」の役割を果たします。

printf("こんにちは¥nぷーたろーです。¥n勉強中です。¥n");

こんにちは
ぷーたろーです。
勉強中です。  

エスケープシーケンスを用いていない例

例えば、「私の好きな記号は”です」という文字列を画面に表示する処理を考えてみましょう。次のようなプログラムを書くと、コンパイラエラーが発生してしまいます。

エスケープシーケンスを用いていないエラー
#include <stdio.h>

int main(void)
{
  printf("私の好きな記号は”です”);   赤マーカーを文字列リテラルと見なします。

  return 0;
}

Cのコンパイラは、2つの二重引用符(”)で囲まれた部分を文字列リテラルとして認識します。そのため、「私の好きな記号は」までが文字列となり、それ以降は不明な文となりエラーが発生します。

エスケープシーケンスを用いた例

上記のエラー対策として、エスケープシーケンスを用いることで、文の途中の”が画面に表示する記号であることをコンパイラに認識させます。

エスケープシーケンスを用い
#include <stdio.h>

int main(void)
{
  printf("私の好きな記号は¥”です”);   赤マーカーを文字列リテラルと見なします。

  return 0;
}

その他にも、円記号は¥¥と記述する必要があり、画面に¥5000と表示するには、「¥¥5000」と記述する必要があります。

タイトルとURLをコピーしました