cover

初めてC言語を学ぶ人のためのC言語講習会2026

author icon haru
author icon 渡辺

初めに

 皆さんこんにちは。ここは情報研究会CACTUSが春に行っているC言語講習会のページです。ソースコードを逐一書かせることの負担を減らすためにこのページを作りました。特に著作権はないので、ご自由に使っていただいて結構ですが、このプログラムに付随する説明や解説は載せません。

 AIが普及してきた昨今、ソースコードを書かずともビルドやコンパイルのやり方を知っているだけで、誰でもソフトウェアが作れる時代になりました。しかし、あくまでもAIは道具です。道具は使うものであって振り回されるものではありません。理解せずとも様々なことができる反面、AIが太刀打ちできないような問題に対して全くお手上げの状態になってしまいます。この世界に完全はありません。自分で道具を使いこなすための訓練だと思って頑張ってください。

さて、講習会をやるにあたり、一年生には守ってほしい約束があります。

  • 分からないなら調べる
  • 分からないなら聞く

これにつきます。こちらも全員を見て回りますが、教える人数の都合上、上級生が常に目の前で教えることはできません。また、コードを書く負担を若干減らす為にこのページが存在しますが、上達するためには書いて理解する以外に方法がありません。厳しいことは言いたくはないですが、なんでもコピー&ペーストしているだけでは上達しません。大事なのは自分で理解しながら考えて書くことです。少しづつでいいので、プログラムの知識を身に着けていきましょう!

以下、講義内で使用するコードです。各自コピペして使ってください。

第一回

1-1 文字の出力

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

1-2 整数値の出力

#include <stdio.h>
int main () {
int a = 5;
printf("a = %d\n", a); // 整数を出力させたいところに %d を入れる
a = 10; // 変数を上書きする
printf("a = %d\n", a);
return 0;
}

1-3 四則演算

#include <stdio.h>
int main() {
int a;
a = 2 + 3;
printf("a = %d\n",a);
a = 2 - 3;
printf("a = %d\n",a);
a = 2 * 3;
printf("a = %d\n",a);
a = 2 / 3;
printf("a = %d\n",a);
double b = 2.0/3.;
printf("b = %f\n", b); // 小数を出力させたいところに %f を入れる
return 0;
}

1-4 値の入力と出力

#include <stdio.h>
int main() {
int a;
scanf("%d", &a); //入力
printf("a = %d\n", a);
return 0;
}

第二回

2-1 if, elseを利用した条件分岐

#include <stdio.h>
int main() {
int a = 10;
if (a > 0) {
printf("aは正の数である\n");
}
else {
printf("aは負の数である\n");
}
return 0;
}

2-2 else ifを利用した条件分岐

#include <stdio.h>
int main() {
int a = 0;
if (a > 0) {
printf("aは正の数である\n");
}
else if (a < 0) {
printf("aは負の数である\n");
}
else {
printf("aは0である\n");
}
return 0;
}

2-3 条件分岐の演算子

#include <stdio.h>
#include <stdbool.h> // bool型の変数を扱うときに必要
int main() {
// 真
if (5 >= 3)
printf("1\n");
// 真 (!5 <= 3 とはできない)
if (!(5 <= 3))
printf("2\n");
// 偽
if (true && false)
printf("3\n");
// 真
if (true || false)
printf("4\n");
return 0;
}

2-4 switch

#include <stdio.h>
int main() {
int saikoro = 5;
switch (saikoro) {
case 1:
printf("1がでた\n");
break;
case 2:
printf("2がでた\n");
break;
case 3:
printf("3がでた\n");
break;
case 4:
printf("4がでた\n");
break;
case 5:
printf("5がでた\n");
break;
case 6:
printf("6がでた\n");
break;
default:
printf("あなたが使っているものは、もはやさいころではない。\n");
}
return 0;
}

ex1:

#include <stdio.h>
int main() {
int a, b;
printf("1つ目(a)のデータを入力してください\n");
scanf("%d", &a);
printf("1つ目(b)のデータを入力してください\n");
scanf("%d", &b);
// 続きを実装してみよう
return 0;
}

ex2:

#include <stdio.h>
int main() {
int a = 5;
int b = 3;
int inputNum;
printf("1~4の数値を入力してください\n");
scanf("%d", &inputNum);
// 続きを実装してみよう
return 0;
}

ex3:

#include <stdio.h>
int main() {
int inputNum; // 入力
int answer; // 計算結果
int tmp; // 値の一時保存
printf("x (整数) を入力してください\n");
scanf("%d", &inputNum);
// 続きを実装してみよう
printf("|x - 5| + |x + 10| = %d\n", answer);
return 0;
}

第三回

3-1 インクリメントとデクリメント

#include <stdio.h>
int main() {
int i = 1;
printf("i = %d\n", i++); // iの値を 出力 → 1増やす
printf("i = %d\n", i); // 現在のiの値を出力
printf("i = %d\n", ++i); // iの値を 1増やす → 出力
printf("i = %d\n", i); // 現在のiの値を出力
return 0;
}

3-2 while文

#include <stdio.h>
int main() {
int i = 1;
int n;
int sum = 0; // 和を保存する変数
printf("自然数nを入力してください: ");
scanf("%d",&n);
// iがn以下の間実行
while (i <= n) {
sum = sum + i;
printf("i: %d, sum: %d\n", i, sum);
i++; // i= i + 1; と同じ
}
printf("1 から %d までの総和は %d です\n", n, sum);
return 0;
}

3-3 for文

#include <stdio.h>
int main() {
int n;
int sum = 0; // 総和を格納する変数
printf("自然数nを入力してください: ");
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
sum = sum + i; // sumにiを加算していく
printf("i: %d, sum: %d\n", i, sum);
}
printf("1 から %d までの総和は %d です\n", n, sum);
return 0;
}

3-4 continue文

#include <stdio.h>
int main() {
for (int i = 0; i < 10; i++) {
if (i % 2 == 0) continue; // iが偶数の場合はスキップ
printf("%d\n", i);
}
return 0;
}

3-5 break文

#include <stdio.h>
int main() {
int i = 1;
int sum = 0;
// 無限ループを作る
while (1) {
if (sum >= 10000) break; // 合計が10000以上でループを脱出
sum = sum + i; // iをsumに加算
printf("i: %d, sum: %d\n", i, sum);
i++; // カウンタを1増やす
}
return 0;
}

第四回

4-1 変数の出力書式について

#include <stdio.h>
int main() {
int a, b, c, d, e, f;
a = 10;
b = 20;
c = 30;
d = b * c;
e = a * c;
f = a * b;
// 普通に出力する場合
printf("%d %d %d\n", a, b, c);
printf("%d %d %d\n", d, e, f);
printf("\n");
// 書式指定子を使う場合
printf("%3d %3d %3d\n", a, b, c);
printf("%2d %3d %3d\n", d, e, f); //最初が2dになってることに注意
return 0;
}

4-2 配列

#include <stdio.h>
int main() {
int a[10];
for(int i = 0; i < 10; i++) {
a[i] = i + 10;
}
for(int i = 0; i < 10; i++) {
printf("%3d\n", a[i]);
}
return 0;
}

4-3 多次元配列

#include <stdio.h>
int main() {
int a[3][5];
int c = 0;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 5; j++) {
a[i][j] = c++;
}
}
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 5; j++) {
printf("%2d ", a[i][j]); // 改行せずにスペースを入れて出力
}
printf("\n"); // 各行の出力が終わったら改行
}
return 0;
}

第五回

5-1 関数の例(1)

#include <stdio.h>
int Add(int x, int y) {
int sum = x + y;
return sum;
}
int main() {
int a = 5;
int b = 12;
int c = Add(a, b); // 関数Addを呼び出し、結果をcに代入
printf("c = %d\n" , c);
return 0;
}

5-2 関数の例(2)

#include <stdio.h>
int Add(int x, int y);
int main() {
int a = 5;
int b = 12;
int c = Add(a, b);
printf("c = %d\n", c);
return 0;
}
int Add(int x, int y) {
int sum = x + y;
return sum;
}

5-3 返り値を持たない関数

#include <stdio.h>
void Print(int x) {
printf("あなたの入力した値は%dですね", x);
return; // なにも返していない
}
int main() {
int a = 5;
Print(a);
return 0;
}

5-4 再帰関数の例(1)

#include <stdio.h>
int sum(int n);
int main() {
int num;
printf("整数を入力してください\n");
scanf("%d", &num);
printf("1から%dまでの総和は%dです\n", num, sum(num));
return 0;
}
int sum(int n) {
if (n == 1) {
return 1;
}
else if (n <= 0) {
return 0;
}
else {
return n + sum(n - 1);
}
}

5-5 再帰関数の例(2)

#include <stdio.h>
int factorial(int n) {
if (n == 0) {
return 1; //0の階乗は1
} else {
return n * factorial(n - 1); // 再帰呼び出し
}
}
int main() {
int num;
printf("数字を入力してください: ");
scanf("%d", &num);
printf("%dの階乗は %d です。\n", num, factorial(num));
return 0;
}

オプション用

option2

#include <stdio.h>
int main() {
// ← ここを自由に変更していい(1~9の数字で構成する)
int matrix[3][3] = {
{8, 1, 6},
{3, 9, 7},
{4, 9, 2}
};
//ここから書き始める
return 0;
}

option3

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
int secret;
srand(time(NULL));
secret = rand() % 1000 + 1; // 1〜1000のランダムな数
//ここを書く
return 0;
}