Skip to content

Week 1: C言語基礎

日程概要

  • Day 1: C言語入門と開発環境設定
  • Day 2: 変数、データ型、演算子
  • Day 3: 制御構造(条件分岐とループ)
  • Day 4: 関数と配列の基礎
  • Day 5: 実践演習とデバッグ技術

Day 1: C言語入門と開発環境設定

1.1 C言語の歴史と特徴

  • UNIXオペレーティングシステム開発のために作られた経緯
  • 高級言語でありながら低レベル操作が可能な特徴
  • 移植性の高さと効率的な実行速度

1.2 C言語の利用分野

  • システムプログラミング
  • 組み込みシステム開発
  • アプリケーション開発
  • ゲーム開発

1.3 開発環境のセットアップ

  • コンパイラのインストール(GCC for Linux/macOS, MinGW for Windows)
  • 統合開発環境(IDE)の選択と設定(Visual Studio Code, Code::Blocks等)
  • コマンドラインでのコンパイルと実行方法

1.4 最初のC言語プログラム

1
2
3
4
5
6
#include <stdio.h>

int main() {
    printf("Hello, Embedded World!\n");
    return 0;
}
  • プリプロセッサディレクティブ(#include)の説明
  • main関数の役割
  • printf関数の基本的な使い方
  • セミコロンの重要性
  • return文の意味

1.5 コンパイルと実行プロセス

  • プリプロセス
  • コンパイル
  • リンク
  • 実行可能ファイルの生成と実行

演習

  1. 開発環境のセットアップ
  2. "Hello, Embedded World!"プログラムの作成と実行
  3. プログラムの修正(自己紹介文の出力等)

Day 2: 変数、データ型、演算子

2.1 変数の基本概念

  • メモリ上の記憶領域としての変数
  • 変数の宣言と初期化
  • 命名規則とベストプラクティス

2.2 基本データ型

データ型 サイズ (典型的) 値の範囲 用途
char 1 バイト -128 to 127 or 0 to 255 文字、小さな整数
int 4 バイト -2,147,483,648 to 2,147,483,647 整数
float 4 バイト 1.2E-38 to 3.4E+38 単精度浮動小数点数
double 8 バイト 2.3E-308 to 1.7E+308 倍精度浮動小数点数

2.3 変数の宣言と初期化

1
2
3
4
int age = 25;
float height = 175.5f;
char grade = 'A';
double pi = 3.14159265359;

2.4 定数

  • '#define マクロ'
  • const キーワード
#define PI 3.14159265359
const int MAX_ARRAY_SIZE = 100;

2.5 型変換

  • 暗黙の型変換(自動的な型変換)
  • 明示的な型変換(キャスト)
1
2
3
int x = 10;
float y = 3.14;
int z = (int)y;  // 明示的な型変換

2.6 演算子

  • 算術演算子(+, -, *, /, %)
  • 関係演算子(==, !=, >, <, >=, <=)
  • 論理演算子(&&, ||, !)
  • ビット演算子(&, |, ^, ~, <<, >>)
  • 代入演算子(=, +=, -=, *=, /=, %=, <<=, >>=, &=, ^=, |=)
  • インクリメント/デクリメント演算子(++, --)

2.7 演算子の優先順位と結合性

演習

  1. 異なるデータ型の変数を宣言し、値を代入するプログラムの作成
  2. 簡単な計算プログラム(面積計算、温度変換等)の実装
  3. ビット演算を使用した簡単なフラグ操作プログラムの作成

Day 3: 制御構造(条件分岐とループ)

3.1 条件分岐

3.1.1 if文

1
2
3
if (条件) {
    // 条件が真の場合の処理
}

3.1.2 if-else文

1
2
3
4
5
if (条件) {
    // 条件が真の場合の処理
} else {
    // 条件が偽の場合の処理
}

3.1.3 if-else if-else文

1
2
3
4
5
6
7
if (条件1) {
    // 条件1が真の場合の処理
} else if (条件2) {
    // 条件2が真の場合の処理
} else {
    // どの条件も満たさない場合の処理
}

3.1.4 switch文

switch () {
    case 定数1:
        // 処理1
        break;
    case 定数2:
        // 処理2
        break;
    default:
        // デフォルトの処理
}

3.2 ループ構造

3.2.1 for文

1
2
3
for (初期化; 条件; 更新) {
    // 繰り返し実行する処理
}

3.2.2 while文

1
2
3
while (条件) {
    // 条件が真の間繰り返し実行する処理
}

3.2.3 do-while文

1
2
3
do {
    // 最低1回は実行され、その後条件が真の間繰り返し実行する処理
} while (条件);

3.3 制御転送文

  • break
  • continue
  • goto(使用は推奨されない)

演習

  1. 成績判定プログラム(if-else文を使用)
  2. 簡易電卓プログラム(switch文を使用)
  3. 1から100までの素数を表示するプログラム(forループとif文を組み合わせて使用)
  4. ユーザー入力による繰り返し計算プログラム(while文を使用)

Day 4: 関数と配列の基礎

4.1 関数

4.1.1 関数の定義と呼び出し

1
2
3
4
5
6
7
// 関数の定義
int add(int a, int b) {
    return a + b;
}

// main関数内での呼び出し
int result = add(5, 3);

4.1.2 関数プロトタイプ

int add(int a, int b);  // 関数プロトタイプ

4.1.3 引数の渡し方

  • 値渡し
  • 参照渡し(ポインタを使用)

4.1.4 再帰関数

1
2
3
4
int factorial(int n) {
    if (n <= 1) return 1;
    return n * factorial(n - 1);
}

4.2 配列

4.2.1 1次元配列の宣言と初期化

int numbers[5] = {1, 2, 3, 4, 5};

4.2.2 多次元配列

1
2
3
4
5
int matrix[3][3] = {
    {1, 2, 3},
    {4, 5, 6},
    {7, 8, 9}
};

4.2.3 配列の操作

  • 要素へのアクセス
  • 配列の走査
  • 配列と関数の関係

4.3 文字列

  • 文字列の表現(文字配列)
  • 文字列操作関数(strcpy, strcat, strlen等)

演習

  1. 複数の数値の平均を計算する関数の作成と使用
  2. 再帰を使用したフィボナッチ数列の計算
  3. 配列を使用した簡単な成績管理プログラム
  4. 文字列の操作(逆順にする、大文字小文字変換等)を行うプログラム

Day 5: 実践演習とデバッグ技術

5.1 デバッグ技術

  • printfデバッグ
  • デバッガの使用(GDB基礎)
  • コンパイル時の警告の活用

5.2 コーディング規約とベストプラクティス

  • 適切なコメントの書き方
  • 命名規則
  • インデントとコードの整形

5.3 実践演習:温度変換プログラム(拡張版)

#include <stdio.h>

float celsius_to_fahrenheit(float celsius) {
    return (celsius * 9/5) + 32;
}

float fahrenheit_to_celsius(float fahrenheit) {
    return (fahrenheit - 32) * 5/9;
}

int main() {
    int choice;
    float temperature, converted;

    printf("温度変換プログラム\n");
    printf("1. 摂氏から華氏\n");
    printf("2. 華氏から摂氏\n");
    printf("選択してください (1 or 2): ");
    scanf("%d", &choice);

    if (choice == 1) {
        printf("摂氏温度を入力してください: ");
        scanf("%f", &temperature);
        converted = celsius_to_fahrenheit(temperature);
        printf("%.2f°C は %.2f°F です\n", temperature, converted);
    } else if (choice == 2) {
        printf("華氏温度を入力してください: ");
        scanf("%f", &temperature);
        converted = fahrenheit_to_celsius(temperature);
        printf("%.2f°F は %.2f°C です\n", temperature, converted);
    } else {
        printf("無効な選択です\n");
    }

    return 0;
}

5.4 追加の実践演習課題

  1. 簡易的な住所録プログラム(配列と構造体を使用)
  2. 数当てゲーム(乱数生成を含む)
  3. 簡単な文字列暗号化/復号化プログラム

5.5 週末プロジェクト

Week 1の学習内容を総合的に活用する小規模プロジェクト (例:簡易的な在庫管理システム、学生成績管理システム等)

まとめ

  • C言語の基本構文、データ型、制御構造の復習
  • 関数と配列の基本的な使い方の確認
  • デバッグ技術とコーディング規約の重要性
  • 実践的なプログラミングスキルの向上

次週の予告

Week 2では、ポインタと配列の詳細な関係、構造体、ファイル入出力など、より高度なC言語の概念について学びます。