C 言語

Visual Studio においての C 言語を記載する。(記載中)
基本
サイズ 設定できる値の範囲 備考
整数 符号あり
char 1 -128 ~ 127(コンパイラによっては 0 ~ 255)
short 2 -32768 ~ 32767
long 4 -2147483648 ~ 2147483647
int 4 -2147483648 ~ 2147483647 32 bit CPU の場合。
longlong 8 -9223372036854775808 ~ 9223372036854775807 64 bit CPU の場合に使用可。
符号なし
unsigned char 1 0 ~ 255
unsigned short 2 0 ~ 65535
unsigned long 4 0 ~ 4294967295
unsigned int 4 0 ~ 4294967295 32 bit CPU の場合。
unsigned longlong 8 0 ~ 18446744073709551615 64 bit CPU の場合に使用可。
実数 浮動小数点数
float 4
double 8
long double 8
※サイズの単位はバイト。C 言語の規格において具体的なバイトは定義されておらず、
char ≦ short ≦ long ≦ longlong という関係性のみ定義されている。(int においては CPU が得意とするサイズだったはず)
※char, short, long, int, longlong のそれぞれの前に signed を付け「符号あり」を明示することもできる。
演算子
A + B 加算 A に B を加えた値を求める。
A - B 減算 A から B を引いた値を求める。
A * B 乗算 A に B を掛けた値を求める。
A / B 除算 A を B で割った値を求める。
A % B A を B で割ったときの余りを求める。

A & B AND (1 と 1 の時のみ 1) 0 : 0 → 1 0 : 1 → 0 1 : 0 → 0 1 : 1 → 1
A | B OR (1 があれば 1) 0 : 0 → 0 0 : 1 → 1 1 : 0 → 1 1 : 1 → 1
A ^ B XOR (B が 1 なら A を反転) 0 : 0 → 0 0 : 1 → 1 1 : 0 → 1 1 : 1 → 0
~A NOT ビット反転
!A Aが 0 の時は 1 、A が 0 以外の時 0
A << B 右シフト
A >> B 左シフト

A += B 加算 A に B を加えた値を A に代入。
A -= B 減算 A から B を引いた値を A に代入。
A *= B 乗算 A に B を掛け値を A に代入。
A /= B 除算 A を B で割った値を A に代入。
A %= B A を B で割ったときの余りを A に代入。
A <<= B
A >>= B
条件記号
A == B A と B が等しいか判定。
A != B A と B が等しくないか判定。
A > B A が B より大きいか判定。
A < B A が B より小さい判定。
A >= B A が B 以上(大きいまたは等しい)か判定。
A <= B A が B 以下(小さいまたは等しい)か判定。
条件を 2 以上にする時(&& または ||)
A >= 2 && A <= 8 A が 2 以上、且つ A が 8 以下か判定。
A == 2 || A == 4 A が 2 と等しい、または A が 4 と等しいか判定。
※条件を満たす場合 1(真)、条件を満たさない場合は 0(偽)
コード
C 言語プログラミングの注意
  • アルファベットの大文字と小文字を区別する。(int と Int は別物)
  • 半角スペースと全角スペースを区別する。(半角スペースを入力するべきところに全角スペースを入力。見えないため全角スペースがどこにあるか特定できない。検索を使い探す)
基本はアルファベット子文字の半角文字を入力できる状態にしておくことを勧める。
画面に文字を表示
#include <stdio.h> int main( int argc, char* argv[] ) { printf( "Hello World!" ); return 0; }
← 画面に文字表示を行うために必要。 ← ここが画面に文字表示を行う。
実行結果
Hello World!
最小限のコード(何もしないが、C 言語では必須コードである)
int main( int argc, char* argv[] ) { return 0; }
足し算を行い結果を画面に表示(その 1 / 3)
#include <stdio.h> int main( int argc, char* argv[] ) { printf( "結果: %d", 2 + 3 ); return 0; }
← 画面に文字表示を行うために必要。 ← ここが足し算の結果を画面に表示を行う。
実行結果
結果: 5
足し算を行い結果を画面に表示(その 2 / 3)
#include <stdio.h> int main( int argc, char* argv[] ) { printf( "%d + %d = %d", 2, 3, 2 + 3 ); return 0; }
← 画面に文字表示を行うために必要。 ← 結果だけでなく式も画面に表示を行う。
実行結果
2 + 3 = 5
足し算を行い結果を画面に表示(その 3 / 3)
#include <stdio.h> int main( int argc, char* argv[] ) { int a = 2; int b = 3; printf( "%d + %d = %d", a, b, a + b ); return 0; }
← 画面に文字表示を行うために必要。 ← 変数 a に足し算するための値を設定する。 ← 変数 b に足し算するためのもう一つ値を設定する。 ← 変数に値を設定したことで式の値と結果に同じ値を入力しなくて済む。
実行結果
2 + 3 = 5
数値が奇数か偶数か判定して結果を画面に表示(その 1 / 3)
#include <stdio.h> int main( int argc, char* argv[] ) { char* pResult = NULL; int a = 5; int b = a % 2; if( b == 0 ) { pResult = "偶数"; } else { pResult = "奇数"; } printf( "数値 %d は%sです。", a, pResult ); return 0; }
← 画面に文字表示を行うために必要。 ← 結果の文章(奇数もしくは偶数)を保持する変数を用意。 ← 変数 a に判定したい数値を設定。 ← 変数 b に a (5) を 2 で割った時の余りを設定。 ← 変数 b の内容を判定。if 文 ← if 文の判定が成り立つ時: 結果の文章を偶数に設定 ← if 文の判定が成り立たない時: 結果の文章を奇数に設定
実行結果
数値 5 は奇数です。
数値が奇数か偶数か判定して結果を画面に表示(その 2 / 3)
その 1 では 5 固定だったため入力できるようにし色々な数値を判定できるようにする。
#include <stdio.h> int main( int argc, char* argv[] ) { char* pResult = NULL; int a = 0; printf( "入力: " ); scanf_s( "%d", &a ); int b = a % 2; if( b == 0 ) { pResult = "偶数"; } else { pResult = "奇数"; } printf( "数値 %d は%sです。", a, pResult ); return 0; }
← 画面に文字表示を行うために必要。 ← 結果の文章(奇数もしくは偶数)を保持する変数を用意。 ← 変数 a に判定したい数値を後ほど設定。 ← 入力を促すメッセージ表示。 ← 数値入力と入力内容(数値)の読み取りを行う。 ← 変数 b に a(入力した数値)を 2 で割った時の余りを設定。 ← 変数 b の内容を判定。if 文 ← if 文の判定が成り立つ時: 結果の文章を偶数に設定。 ← if 文の判定が成り立たない時: 結果の文章を奇数に設定。
実行結果(「入力: 」と表示されたら 6 を入力して Enter キーを押下)
入力: 6 数値 6 は偶数です。

※このコードの scanf_s の使用には問題がある。A や B 等の文字を入力すると a には値は設定されず、int型を超える数値を入力すると a には予期せぬ値が設定されるため注意。
数値が奇数か偶数か判定して結果を画面に表示(その 3 / 3)
コードの無駄を省く。
#include <stdio.h> int main( int argc, char* argv[] ) { char* pResult[] = { "偶数", "奇数" }; int a = 0; printf( "入力は整数で 0~100 までにして下さい。\n" ); printf( "入力: " ); scanf_s( "%d", &a ); int b = a % 2; printf( "数値 %d は%sです。", a, pResult[b] ); return 0; }
← 画面に文字表示を行うために必要。 ← 結果の文章。配列にして添え字で参照する。 ← 変数 a に判定したい数値を後ほど設定。 ← 補足のメッセージ表示。 ← 入力を促すメッセージ表示。 ← 数値入力と入力内容(数値)の読み取りを行う。 ← 変数 b に a(入力した数値)を 2 で割った時の余りを設定。
実行結果(「入力: 」と表示されたら 6 を入力して Enter キーを押下)
入力: 6 数値 6 は偶数です。
文字列
必須ヘッダ: stdio.h, stdlib.h, string.h

代表的な関数
strlen  文字列のバイト数。
char szName[] = { "Mike" }; int nNemeLength = strlen( szName ); printf_s( "nNemeLength = %d\n", nNemeLength );
strcpy_s  文字列の代入。
char szName[] = { "Mike" }; char szBuffer[64]; strcpy_s( szBuffer, _countof(szBuffer), szName ); printf_s( "szBuffer[] = %s\n", szBuffer );
strcat_s  文字列の追加結合。
char szName[] = { "Mike" }; char szFamily[] = { "Gates" }; char szBuffer[64]; strcpy_s( szBuffer, _countof(szBuffer), szName ); strcat_s( szBuffer, _countof(szBuffer), szFamily ); printf_s( "szBuffer[] = %s\n", szBuffer );
strcmp  文字列の比較。
int nCompare1 = strcmp( "Z", "A" ); printf_s( "nCompare1 = %d\n", nCompare1 ); int nCompare2 = strcmp( "A", "Z" ); printf_s( "nCompare2 = %d\n", nCompare2 ); int nCompare3 = strcmp( "A", "A" ); printf_s( "nCompare3 = %d\n", nCompare3 ); int nCompare4 = strcmp( "A", "a" ); printf_s( "nCompare4 = %d\n", nCompare4 );
※第 1 引数を基準して大きければ 0 より大きく、小さければ 0 より小さく、等しければ 0 を返す。
stricmp  文字列の比較(半角アルファベットの大文字と小文字を区別しない)。
int nCompare = stricmp( "A", "a" ); printf_s( "nCompare = %d\n", nCompare );
printf_s  書式指定した文字列を作成し、文字列を標準出力へ出力。
printf_s( "%s is %d years old.\n", "Mike", 10 );
sprintf_s  書式指定した文字列を作成し、文字列を変数へ代入。
char szBuffer[128]; int a = 16; sprintf_s( szBuffer, _countof(szBuffer), "10進数の %d → 16進数では %x", a, a ); printf_s( szBuffer );
strtol  文字列を整数(long型)に変換。
char szNumber1[] = { "128" }; char szNumber2[] = { "10" }; int a = 0; a = strtol( szNumber1, NULL, 10 ); printf_s( "数値 1 = %d\n", a ); a = strtol( szNumber2, NULL, 16 ); printf_s( "数値 2 = %d\n", a );
文字列の書式指定
%d  整数を表示。
%x  整数を16進数表示。
%f  実数を表示。
%s  文字列を表示。
%p  アドレスを表示。