C言語基礎
C言語概要
- コンパイル型言語(ソースコードを機械語に変換して実行)
- 組み込みシステムやシステムプログラム、アプリケーション開発など幅広く利用
注意点
- 本資料ではC99以降の標準Cを対象とします
- C言語は型が厳格で、変数宣言時に型指定が必須
Hello World
#include <stdio.h>
int main() {
printf("Hello, World!\n");
return 0;
}
#include <stdio.h>は標準入出力ライブラリをインクルードint main()はプログラムのエントリーポイントprintf関数で文字列を出力return 0;は正常終了を示す
コンパイルと実行方法
- ソースコードを
hello.cとして保存 - コンパイル:
gcc hello.c -o hello - 実行:
./hello(Linux/Mac) またはhello.exe(Windows)
型
- C言語では変数や値に必ず型がある
- 例:
int,float,char,double
- 例:
- 型によって表現できる値の範囲や演算が異なる
C言語における主な型
- int: 整数値
- float: 単精度浮動小数点数
- double: 倍精度浮動小数点数
- char: 文字(1バイト)
#include <stdio.h>
int main() {
int a = 1;
float b = 1.0f;
double c = 2.0;
char d = 'A';
printf("%d\n", a);
printf("%f\n", b);
printf("%f\n", c);
printf("%c\n", d);
return 0;
}
printf関数で型ごとに書式指定子が異なる点に注意- 変数宣言時に型を必ず指定する
変数
- 変数は値を格納するための「箱」
- 宣言時に型を指定し、同じ変数に異なる型の値は代入できない
int a = 10;
float b = 3.14f;
char c = 'Z';
演算子
- 四則演算:
+,-,*,/ - 剰余演算:
%(整数型のみ) - 代入演算:
=,+=,-=,*=,/= - 比較演算:
==,!=,<,<=,>,>= - インクリメント/デクリメント:
++,-- - 論理演算:
&&,||,!
int a = 5, b = 2;
printf("%d\n", a + b);
printf("%d\n", a - b);
printf("%d\n", a * b);
printf("%d\n", a / b);
printf("%d\n", a % b);
型変換
- 異なる型同士の演算では自動的に型変換(暗黙の型変換)が行われる
- 明示的な型変換(キャスト)も可能
int a = 5;
float b = 2.0f;
printf("%f\n", a / b); // aがfloatに変換される
int c = (int)3.14; // cは3になる
制御文
- 条件分岐: if文, switch文
- 繰り返し: for文, while文, do-while文
if文
if (a > 0) {
printf("aは正です\n");
} else if (a == 0) {
printf("aはゼロです\n");
} else {
printf("aは負です\n");
}
while文
int i = 5;
while (i > 0) {
printf("%d\n", i);
i--;
}
for文
for (int i = 0; i < 5; i++) {
printf("%d\n", i);
}
配列
- 複数の同じ型の値をまとめて扱う
- 要素数は固定
int scores[5] = {45, 100, 21, 89, 94};
int total = 0;
for (int i = 0; i < 5; i++) {
total += scores[i];
}
double average = total / 5.0;
printf("平均: %.2f\n", average);
関数
- よく使う処理をまとめて定義できる
- 戻り値の型、引数の型を必ず指定
#include <stdio.h>
#include <math.h>
void quadratic(int a, int b, int c) {
int d = b * b - 4 * a * c;
if (d > 0) {
double x0 = (-b + sqrt(d)) / (2.0 * a);
double x1 = (-b - sqrt(d)) / (2.0 * a);
printf("x0 = %f, x1 = %f\n", x0, x1);
} else if (d == 0) {
double x = -b / (2.0 * a);
printf("x = %f\n", x);
} else {
printf("実数解なし\n");
}
}
int main() {
quadratic(1, -3, 2);
quadratic(1, -2, 1);
quadratic(1, -1, 1);
return 0;
}
- C言語では関数の引数・戻り値の型を必ず指定する
- 標準ライブラリの関数を使う場合はヘッダファイル(例:
#include <math.h>)をインクルード - 実数の平方根は
sqrt関数を使う - 実数リテラルは
2.0のように書く
ポインタ(基礎)
- 変数のアドレス(メモリ上の位置)を扱う型
*でポインタ型を宣言、&でアドレスを取得
int a = 10;
int *p = &a;
printf("%p\n", p); // アドレスの表示
printf("%d\n", *p); // ポインタを使って値を参照
- C言語の特徴的な機能としてポインタがある
- ポインタは配列や関数の引数などでよく使われる
まとめ
- C言語は型が厳格で、変数や関数の型指定が必須
- 制御文や配列、関数、ポインタなど基本的な構文を理解することが重要