C言語の全要素(を目指して)(paiza.IOで動く範囲)

どの言語にも言えますが情報があちこち散り散りでなかなか大変なので、あらゆる構成要素が一列に並ぶというの(を目指している状態)を実験的にやっています

<dl>
<dt>注意点</dt>
<dd>この記事は何かプログラムを見せられて実行ボタンを押すとどうなるか予測してくださいみたいな問題を出されたときに答えられる、といったことを目指すことを考えているので、サンプルプログラムは基本的にあえて無駄なことをやっています。</dd>
</dl>

## エントリーポイント(main関数)

いくつか書き方がある

```c:sample1.c
int main(){/*内容*/}
```

```c:sample2.c
main(){/*内容*/}
```

```c:sample3.c
int main(void){/*内容*/}
```

sample2は警告が出るけど動くのは動く

## return 0;

main関数の末尾には(事情はまだ省略で基本的には)return 0;を書くことになっているが省略しても同じように処理される。警告もない(でもやっぱり書いた方がいいはず)

## 半角スペース・タブ・改行

トークンの途中に1つ入れると2つのトークンになる。int mainをintmainと書くとエラー。whileをwhi leと書いてもエラー。それ以外の余分なものは実行上は無視される。

## #include <ファイル名>

標準ライブラリに含まれるヘッダファイルの内容をインクルードする(展開する)。

## printf(好きな文字列)

 #include &lt;stdio.h>を行うと使用可能になる。標準出力に文字列を出力できる

```c:sample.c
#include <stdio.h>
int main(){
    printf("ちくわ");
    printf("ちくわ");
}
```

## 文字列リテラル

好きな文字列をダブルクォーテーションで挟む。

### エスケープシーケンス

書いた内容によっては書いたとおりの値にはならない

- \nは改行に置き換わる。paiza.IOでは0x10の文字つまりLFになる。
- \"は"に置き換わる
- ?

## //

トークン「//」から行末まで1行コメントとなり実行上は無視される。

```c:sample.c
#include <stdio.h>
int main(){
    printf("ちくわ"); // かまぼこ
}
```

## /*, */

「/\*」から「\*/」までコメントとなり実行上は無視される。

```c:sample.c
#include <stdio.h>
int main(){
    printf("ちくわ");
    /* ホワアアアア
    アアアアアアアア
    ドワアアアアアアアア */
}
```

##int

データ型の1つで、一般的な整数を表し値型

リテラルは単に整数を書く

## printf(文字列, 引数)

 #include &lt;stdio.h>を行うと使用可能になる。

%dは第2引数をint型として解釈した文字列に置き換わる

```c:sample.c
#include <stdio.h>
int main(){
    printf("588と2353で%d", 588 * 588 + 2353 * 2353);
}
```

%cは第2引数をchar型として解釈しその値が表す文字に置き換わる

```c:sample.c
#include <stdio.h>
int main(){
    printf("%c", '!');
}
```

##型 変数名;

変数宣言。変数名は数字で始まったり定義済みの型名や関数名に一致したりするトークンは不可

```c:sample.c
int main(){
    int tokuni_imino_nai_hensuu;
}
```

##変数名 = 式;

代入

```c:sample.c
#include <stdio.h>
int main(){
    int tokuni_imino_nai_seisuu;
    tokuni_imino_nai_seisuu = 1212121;
    printf("特に%d\n", tokuni_imino_nai_seisuu);
    printf("意味%d\n", tokuni_imino_nai_seisuu);
    printf("の%d\n", tokuni_imino_nai_seisuu);
    tokuni_imino_nai_seisuu = 364364;
    printf("ない%d\n", tokuni_imino_nai_seisuu);
    printf("整数%d\n", tokuni_imino_nai_seisuu);
}
```

##char

データ型の1つで単一の文字のデータを持つことができ値型

リテラルは文字をシングルクォーテーションで挟む

```c:sample.c
int main(){
    char tokuni_imino_nai_moji;
    tokuni_imino_nai_moji = 't';
}
```

##double

データ型の1つで実数(倍浮動小数点)を表し値型

リテラルは単に小数を書く

```c:sample.c
#include <stdio.h>
int main(){
    double tokuni_imino_nai_kazu;
    tokuni_imino_nai_kazu = 533.21;
    printf("%f", tokuni_imino_nai_kazu);
}
```

##float

データ型の1つで実数(浮動小数点)を表し値型

## 型 変数名 = 式;

初期化(宣言と同時に代入)

```c:sample.c
#include <stdio.h>
int main(){
    int seisuu = 42387;
    printf("整数%d", seisuu);
}
```

##+

演算子の1つで足し算(加算)を意味し*, %より優先順位が低い

##-

演算子の1つで引き算(減算)を意味し*, %より優先順位が低い

##*

演算子の1つで掛け算(乗算)を意味し+, -より優先順位が高い

##%

演算子の1つで剰余算(余り)を意味し+, -より優先順位が高い

##int型を返す式 + int型を返す式

足し算(加算)した結果をint型で返す

##int型を返す式 - int型を返す式

引き算(減算)した結果をint型で返す

##int型を返す式 * int型を返す式

掛け算(乗算)した結果をint型で返す

##int型を返す式 % int型を返す式

剰余算した結果(割り算(除算)の余り)をint型で返す

負の数が絡むと話がややこしくなる(保留中)

##(, )

式の中で「(」と「)」で挟んだ部分は演算子の優先順位に関係なく先に評価される

```c:sample.c
#include <stdio.h>
int main(){
    printf("%d", (5 * 7 + 8) % (1 + 6 * (5 - 2)));
}
```

##int型変数名++;, ++int型変数名;

どちらも変数をインクリメントする

##int型変数名--;

変数をデクリメントする

##変数名 演算子= 式;

変数名 = 変数名 演算子 (式);と同じ意味