C言語の基本


#C言語の基本

##gccのインストール
macの場合
http://webkaru.net/clang/mac-compiler-gcc-install/

ubuntuの場合

```
sudo apt-get install gcc
```

centosの場合

```
yum install gcc
```


#コンパイルと実行

```
touch touch sample.c
```

```:sample.c

#include<stdio.h>
int main() {
  printf("Hello, World\n");
  return 0;
}

```

sample.cをコンパイルしてリンクしてsampleという実行ファイルを作成

```
gcc sample.c -o sample  
./sample
//hello
```


#ルール
先頭の文字は英字（a～z、A～Z）または下線（_）
２文字目以降は英字、下線、数字
大文字と小文字を区別する
先頭から最低31文字までが有効である

#予約語

<table>
<tr> </tr>
<tr> <td>auto</td><td>double</td><td>int</td><td>struct</td> </tr>
<tr> <td>break</td><td>else</td><td>long</td><td>switch</td> </tr>
<tr> <td>case</td><td>enum</td><td>register</td><td>typedef</td> </tr>
<tr> <td>char</td><td>extern</td><td>return</td><td>union</td> </tr>
<tr> <td>const</td><td>float</td><td>short</td><td>unsigned</td> </tr>
<tr> <td>continue</td><td>for</td><td>signed</td><td>void</td> </tr>
<tr> <td>default</td><td>goto</td><td>sizeof</td><td>volatile</td> </tr>
<tr> <td>do</td><td>if</td><td>static</td><td>while</td> </tr>
</table>


#変数

| 型指定             | データ型             | ビット数 | 扱える数値の範囲 (最小範囲と実際に扱える範囲は異なる) |
| ------------------ | -------------------- | -------- | ----------------------------------------------------- |
| signed char        | 文字型               | 8以上    | 最小範囲 -127 ～ +127                                 |
| unsigned char      | 文字型               | 8以上    | 最小範囲 0 ～ 255                                     |
| short              | 短整数型             | 16以上   | 最小範囲 -32767 ～ +32767                             |
| unsigned short     | 短整数型             | 16以上   | 最小範囲 0 ～ 65535                                   |
| int                | 整数型               | 16以上   | 最小範囲 -32767 ～ +32767                             |
| unsigned int       | 整数型               | 16以上   | 最小範囲 0 ～ 65535                                   |
| long               | 長整数型             | 32以上   | 最小範囲 -2147483647 〜 +2147483647                   |
| unsigned long      | 長整数型             | 32以上   | 最小範囲 0 〜 4294967293                              |
| long long          | 拡張整数型           | 64以上   | 最小範囲 -9223372036854775807 ～ +9223372036854775807 |
| unsigned long long | 拡張整数型           | 64以上   | 最小範囲 0 ～ 18446744073709551613                    |
| float              | 単精度浮動小数点型   | 32       | ±3.4E-37 ～ ±3.4E+38                                |
| double             | 倍精度浮動小数点型   | 64       | ±1.7E-307 ～ ±1.7E+308                              |
| long double        | 拡張精度浮動小数点型 | 64以上   | 最小範囲 ±1.7E-307 ～ ±1.7E+308                     |



#配列

int no[5] = {1};
//{ 1, 0, 0, 0, 0 } 

char str[10] = { 'H','E','L','L','O','\0' };

char str[10] = "HELLO";

#演算子

<table>
<tr> <th>演算</th><th>演算子</th><th>例</th><th>意味</th> </tr>
<tr> <td>加算</td><td class="Cent">+</td><td>a + b</td><td>a に b を加える</td> </tr>
<tr> <td>減算</td><td class="Cent">-</td><td>a - b</td><td>a から b を引く</td> </tr>
<tr> <td>乗算</td><td class="Cent">*</td><td>a * b</td><td>a に b をかける</td> </tr>
<tr> <td>除算</td><td class="Cent">/</td><td>a / b</td><td>a を b で割る</td> </tr>
<tr> <td>剰余算</td><td class="Cent">%</td><td>a % b</td><td>a を b で割った余り</td> </tr>
</table>


<table>
<tr> <th>演算</th><th>演算子</th><th>例</th><th>意味</th> </tr>
<tr> <td rowspan="2">インクリメント</td><td rowspan="2" class="Cent">++</td><td>a++</td><td>a に 1 を加える（後置演算）</td> </tr>
<tr> <td>++a</td><td>a に 1 を加える（前置演算）</td> </tr>
<tr> <td rowspan="2">デクリメント</td><td rowspan="2" class="Cent">--</td><td>a--</td><td>a から 1 を引く（後置演算）</td> </tr>
<tr> <td>--a</td><td>a から 1 を引く（前置演算）</td> </tr>
</table>

#型変換

#条件分岐

<table>
<tr align="center">
	<th>演算子</th>
	<th>意味</th>
	<th>使用例</th>
</tr>
<tr>
	<th>&gt;</th>
	<td>より大きい</td>
	<td>a &gt; 0</td>
</tr>
<tr>
	<th>&gt;=</th>
	<td>以上</td>
	<td>a &gt;= 0</td>
</tr>
<tr>
	<th>&lt;</th>
	<td>より小さい</td>
	<td>a &gt; 0</td>
</tr>
<tr>
	<th>&lt;=</th>
	<td>以下</td>
	<td>a &lt;= 0</td>
</tr>
<tr>
	<th>==</th>
	<td>等しい</td>
	<td>a == 0</td>
</tr>
<tr>
	<th>!=</th>
	<td>等しくない</td>
	<td>a != 0</td>
</tr>
</table>


##if文

```
if(条件式①){
    処理①
}else if(条件式②){
    処理②
}else{
    処理③
}
```

##switch文

```
switch(値){
    case 値①:
        処理①
        break;
    case 値②:
        処理②
        break;
    ・・・
    default:
        処理③
        break;
}
```

##for文

```
for ( 初期化処理 ; 条件式 ; 増分処理 ){
    処理
}
```

##while文

```
whlie(条件式）{
    処理
}
```

##do while文

```
do{
    処理
}whlie(条件式）;
```

#関数

```
戻り値の型 関数名（引数の型 引数1,引数の型 引数2,・・・,引数の型 引数n)
{
    処理
    return 戻り値; ← 省略されることもある
}
```

#ポインタ

<table>
<tr align="center">
	<th></th><th>通常の変数</th><th>ポインタ変数</th><th>解説</th>
</tr>
<tr>
	<th>宣言</th><td>int a;</td><td>int* p:</td><td>ポインタ変数は、変数の先頭に*をつける</td>
</tr>
<tr>
	<th>値</th><td>a</td><td>*p</td><td>ポインタ変数で値を示すには、先頭に*をつける必要がある。</td>
</tr>
<tr>
	<th>アドレス</th><td>&a</td><td>p</td><td>通常の変数は、値を入れるが前提だが、ポインタ変数はアドレスを入れる</td>
</tr>
</table>

#記憶クラス
グローバル変数、ローカル変数によってデータ記憶される範囲が違う。

##自動変数
関数内部で宣言され、宣言された関数の中でのみ使用可能な変数。
メモリのスタック領域に保存されており、関数の処理の終了と共にメモリから消去。
通常autoが省略されている。

```
auto int n = 100;
```

##外部変数 （グローバル変数）
静的領域に保存。

```
#include <stdio.h>
int g = 10;
```

##静的変数
プログラム実行中に常に同じ場所に配置され値を保持。

```
static int s = 100;
```


#標準関数
<stdio.h>
ストリームおよびファイルの操作に関する型・マクロ・関数の宣言定義。
<stdlib.h>
一般ユーティリティに関する型・マクロ・関数の宣言定義。
<ctype.h>
文字種別の分類、および大文字・小文字の変換を行う関数を提供する。 <ctype.h> ヘッダが提供する文字操作関数は、設定されているロケールに応じて動作が変わる。
<string.h>
文字列操作に関する型・マクロ・関数の宣言定義。
<math.h>
数学的な演算を行うための関数、および関連するマクロの宣言定義。
<time.h>
グレゴリオ暦に基づく日付等を扱うための型・マクロ・関数の宣言定義。

#入出力 <stdio.h>
FILE - ストリームを制御するためのオブジェクト型（構造体とは限らない）
fpos_t - ファイルのシーク位置を格納するための型
clearerr - ファイル終端表示子およびエラー表示子のクリア
fclose - ファイルのクローズ
feof - ファイル終端表示子の判定
ferror - エラー表示子の判定
fgetc - ストリームからの1文字入力
fgetpos - ストリームのファイル位置表示子の参照
fgets - ストリームからの1行入力
fopen - ファイルのオープン
fprintf - ストリームへの書式付き出力
fputc - ストリームへの1文字出力
fputs - ストリームへの1行出力
fread - ストリームからの読み込み
fscanf - ストリームからの書式付き入力
fseek - ストリームのファイル位置表示子の変更
fsetpos - ストリームのファイル位置表示子の設定
ftell - ストリームのファイル位置表示子の参照
fwrite - ストリームへの書き込み
getc - ストリームからの1文字入力
getchar - 標準入力からの1文字入力
gets - 標準入力からの1行入力（ただし、C11で削除された）
perror - 標準エラー出力へのエラーメッセージの出力
printf - 標準出力への書式付き出力
putc - ストリームへの1文字出力
putchar - 標準出力への1文字出力
puts - 標準出力への1行出力
remove - ファイルの削除
rename - ファイル名の変更
rewind - ストリームの巻き戻し
scanf - 標準入力からの書式付き入力
setbuf - ストリームのバッファ設定
setvbuf - ストリームの詳細なバッファ設定
sprintf - 文字配列への書式付き出力
sscanf - 文字列からの書式付き入力
tmpfile - テンポラリファイルをバイナリモードでオープン
tmpnam - テンポラリファイル名の生成
vprintf - 標準出力への書式付き出力（ va_list 版）
vscanf - 標準入力からの書式付き入力（ va_list 版）

#一般ユーティリティ <stdlib.h>
div_t - int 型の商と剰余を格納する構造体
ldiv_t - long 型の商と剰余を格納する構造体
MB_CUR_MAX - 設定されているロケールにおけるマルチバイト文字の最大バイト数を表すマクロ
RAND_MAX - rand 関数が返す擬似乱数の最大値
abort - プログラムの異常終了
abs - int 型の絶対値
atexit - 終了時関数の登録
atof - 文字列から double 型への変換
atoi - 文字列から int 型への変換
atol - 文字列から long 型への変換
bsearch - バイナリサーチ
calloc - メモリブロックの割り付けとクリア
div - int 型どうしの商と剰余
exit - プログラムの終了
free - メモリブロックの解放
getenv - 環境変数の参照
labs - long 型の絶対値
ldiv - long 型どうしの商と剰余
malloc - メモリブロックの割り付け
mblen - マルチバイト文字の構成バイト数
mbstowcs - マルチバイト文字列からワイド文字列への変換
mbtowc - マルチバイト文字からワイド文字への変換
qsort - クイックソート(ただし、仕様上はソートを行うとあるだけで「クイックソートによる」とは書かれていない)
rand - 擬似乱数
realloc - メモリブロックの再割り付け
srand - 乱数種の設定
strtod - 文字列から double 型への変換
strtol - 文字列から long 型への変換（基数指定可）
strtoul - 文字列から unsigned long 型への変換（基数指定可）
system - コマンドプロセッサの呼び出し
wcstombs - ワイド文字列からマルチバイト文字列への変換
wctomb - ワイド文字列からマルチバイト文字列への変換

#文字列操作 <string.h>
memchr - メモリブロック中の文字検索
memcmp - メモリブロックの比較
memcpy - メモリブロックのコピー
memmove - メモリブロックの転送
memset - メモリブロックを指定文字で埋める
strchr - 文字列内の文字探索
strcat - 文字列の連結
strcmp - 文字列の比較
strcpy - 文字列のコピー
strcspn - 文字列中の指定文字群を含まない先頭部分の長さ
strerror - エラー番号に対応したエラーメッセージ文字列の取得
strcoll - ロケールに応じた順序付けによる文字列の比較
strlen - 文字列の長さ
strncat - 字数制限付きで文字列の連結
strncmp - 字数制限付きで文字列の比較
strncpy - 字数制限付きで文字列のコピー
strpbrk - 文字列中の文字群探索
strrchr - 文字列内の逆方向文字探索
strspn - 文字列中の指定文字群を含む先頭部分の長さ
strstr - 文字列中の文字列探索
strtok - 文字列からの字句切り出し
strxfrm - ロケールに応じた順序付けになるように文字列を変換

#C言語の参考
http://c-lang.sevendays-study.com/index.html
http://www.ysr.net.it-chiba.ac.jp/data/cc.html
https://ja.wikipedia.org/wiki/%E6%A8%99%E6%BA%96C%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA#.E5.85.A5.E5.87.BA.E5.8A.9B_.3Cstdio.h.3E

<hr>

#C++の基本


```cpp:cout.cpp
#include <iostream>
using namespace std;

int main()
{
    cout << "hello world!!" << endl;
}
```

```
コンパイル
g++ cout.cpp -o cout
実行
./cout
```