情報処理のWeb教科書―IPA情報処理試験対策のお供に!

C言語プログラミング入門―for文、if文なのど構文、フローチャートの書き方など。

トップ プログラミング C言語 入門

C言語のプログラムの書き方から、for文、if文なのど構文、フローチャートの書き方など、C言語プログラミング入門レベルの内容を、簡単なプログラムなら自由に作成できるレベルを目指して、初歩的なC言語の基本文法についてみていきます。

目次

この記事の目次です。

1. C言語のコードとコメント

2. C言語の変数の使用方法

3. C言語の配列

4. C言語の演算子

5. C言語の制御文の種類とフローチャートの書き方

6. C言語の関数

7. C言語の変数のスコープ

8. C言語のコマンドライン引数

9. ポインタ

もっと知識を広げるための参考

更新履歴

1. C言語のコードとコメント

C言語の入門知識として、はじめにC言語のソースコードはどのようなものか見てきます。

C言語のコード例

/* コメント1 */
#include <stdio.h>

int main(void){
	printf("Hello World!!\n");
	return 0; //コメント2
}

C言語の記述

実行形式ファイルの作成

C言語のコードは、C言語用のコンパイラを使用して、コンパイルを行って、実行できる形式の実行形式ファイルを作成します。

コンパイルする必要がある

C言語を使用する場合は、あらかじめコンパイルして実行形式ファイルを用意して、プログラムを利用します。

PHPやJavaScriptなどは異なる

なお、PHPやJavaScriptなどはソースプログラムを用意しておいて、実行するときにコンパイルが行われます。

2. C言語の変数の使用方法

プログラムのソースコードで扱われるデータを一定期間記憶して、必要なときに利用できるようにするため、 そのデータに固有の名前を付けて保管しておく仕組みがあります。

変数(へんすう、variable)は、プログラム内の名前を付けたデータの保管先のことを言います。 プログラム内でデータを保管して利用するために使用します。

データ型

変数には値を記憶させることができます。 この値には、いくつかの「種類」があります。 値の種類は、データ型(data type)、または型と呼ばれます。

C言語のデータ型の種類

C言語のデータ型には以下のような種類があります。

型名説明
void型なし
char文字型
int整数型
float単精度浮動小数点型
double倍精度浮動小数点型
struct構造体
union共用体
enum列挙型

なお、データ型はshort、long、unsigned、signedなどの型修飾子と組み合わせて、変数のバイト長や値の範囲が決められます。

C言語で文字(char)型のデータを変数で扱う方法

このページでは、C言語で文字(char)型のデータを変数で扱う方法について説明します。

サンプルソース

ソースフォルダに以下のサンプルコードを記述したテキストファイルを作成します。

サンプルコード(hello.c)
#include <stdio.h>
int main(void) {
	char c = 'H';
	printf("%c", c);

	c = 'e';
	printf("%c", c);

	c = 'l';
	printf("%c", c);

	c = 'l';
	printf("%c", c);

	c = 'o';
	printf("%c", c);

	c = '!';
	printf("%c", c);
	return 0;
}

サンプルコードについて

文字(char)型の値はシングルコーテーション(')で囲んで表現します。

サンプルコードでは、cという文字(char)型の変数に 'H'、'e'、・・・、'!'という文字を順番に設定(代入)して表示し、「Hello!」と出力しています。

printf関数にカンマ区切りで引数を2つしていしており、1つ目に%cを設定し、2つ目の引数で指定した変数cの値が出力されるようにしています。

コンパイル方法

コマンドプロンプトでソースファイルを保存したフォルダに移動しgccコマンドを実行してコンパイルします。

>cd test
>gcc hello.c

実行方法

a.exeというファイルができたフォルダにコマンドプロンプトで移動し、 a.exeとコマンドラインに入力すると「Hello!」と出力されます。

>a.exe
Hello!

C言語で整数(int)型のデータを変数で扱う方法

C言語で整数(int)型のデータを変数で扱う方法について説明します。

サンプルソース

ソースフォルダに以下のサンプルコードを記述したテキストファイルを作成します。

//ファイル名:sample.c

#include <stdio.h>

int main(void)
{
	int i = 0;
	printf("%d\n", i);

	i = 1;
	printf("%d\n", i);
	return 0;
}

サンプルコードについて

サンプルコードでは、iという整数(int)型の変数に 0、1という数を順番に設定(代入)して出力しています。

printf関数にカンマ区切りで引数を2つしていしており、1つ目に%dを設定し、2つ目の引数で指定した変数iの値が出力されるようにしています。

コンパイル方法

コマンドプロンプトでソースファイルを保存したフォルダに移動しgccコマンドを実行してコンパイルします。

>cd test
>gcc sample.c

実行方法

a.exeというファイルができたフォルダにコマンドプロンプトで移動し、 a.exeとコマンドラインに入力すると0と1の数字が改行されて出力されます。

>a.exe
0
1

3. C言語の配列

C言語の配列について見ていきます。

配列とは

配列とは、同じ種類のデータを、複数まとめて扱うことのできる変数です。

配列の宣言

配列は次のような書式で宣言します。

データ型 配列名[個数];

配列の例

ここではC言語で文字(char)型の配列を変数で扱う方法について説明しています。

サンプルソース

ソースフォルダに以下のサンプルコードを記述したテキストファイルを作成します。

//ファイル名:hello.c

#include <stdio.h>

int main(void) {
	char message[] = "Hello World!!";
	printf("%s\n", message);
	return 0;
}

サンプルコードについて

サンプルコードでは、messageという文字の配列(文字の型charの配列を示すため[]を付与)を格納する変数に「Hello World!!」という文字の配列(文字列)を初期値として設定(代入という)して 変数を宣言しています。

printf関数にカンマ区切りで引数を2つしていしており、1つ目に%sを設定し、2つ目の引数で指定した変数messageの値が出力されるようにしています。

コンパイル方法

コマンドプロンプトでソースファイルを保存したフォルダに移動しgccコマンドを実行してコンパイルします。

>cd test
>gcc hello.c

実行方法

a.exeというファイルができたフォルダにコマンドプロンプトで移動し、 a.exeとコマンドラインに入力すると「Hello World!!」と出力されます。

>hello
Hello World!!

4. C言語の演算子

C言語の演算子の使用方法について見ていきます。

2=1+1のような計算式がある場合、=と+のような記号のことを演算子(operator)と呼びます。 詳細ではC言語の演算子についてまとめています。優先順位やノットイコール、アロー演算子、サンプルプログラムでは四則演算アプリなども紹介しています。

詳細

5. C言語の制御文の種類とフローチャートの書き方

プログラミングに無くてはならないのは制御文です。C言語の制御文(分岐)の方法について説明しています。

制御文とは

制御文とは、プログラムは上から下に実行されますが、途中で条件を分けたり、もとに戻ったりする制御を行う文を制御文といいます。 制御は大きく選択と繰返しに分けられ、C言語の制御文には、if else、switch、while、for文などがあります。

選択

基本的な制御構造の1つ、選択について見ていきます。

if文

if文は条件に応じて処理を行うか行わないかを制御する制御構造です。

制御構造―選択(if文)
制御構造―選択(if文)
if-else文

if-else文は条件に応じてある処理を行うか、そうではないときに別のある処理を行うかを制御する制御構造です。

制御構造―選択(if-else文)
制御構造―選択(if文)

繰返し

基本的な制御構造の1つ、繰返しについて見ていきます。

while文、for文

while文、for文は条件に合う場合繰返し処理を行う制御構造です。

制御構造―繰返し(while文、for文)
制御構造―繰返し(while文)
do-while文

do-while文は初めに処理を行いその処理を条件に合う場合繰返し処理を行う制御構造です。

制御構造―繰返し(do-while文)
制御構造―繰返し(do-while文)

再帰呼出し

なお、ある関数や手続きの中で再びその関数や手続きを呼び出すことを再帰呼出しといいます。

参考

以下は制御文についての参考になります。

プログラム言語

プログラム言語とは何かをテーマに、プログラミング言語の意味から、種類、特徴、体系、スタック領域やヒープ領域といった記憶域などの知識をまとめています。

詳細

条件分岐(if、else)

Aであれば実行する、Aでなければ実行しないというような2方向の分岐を行う場合は、if文を使用します。 if文は「if(条件式) {処理A}」というように記述し、条件式が0以外の場合に処理Aが実行されます。

if(A) {
    Bの処理;
} else if(C) {
    Dの処理;
} else {
    それ以外の場合の処理;
}

if文の条件式に単項式を用いる方法

C言語のif文の条件式に単項式を用いる方法について説明しています。

たとえば、aという変数のみのだけのような1つの項からなる式のことを単項式と言います。

サンプルソース

ソースフォルダに以下のサンプルコードを記述したテキストファイルを作成します。

//ファイル名:sample.c

#include <stdio.h>

int main(void) {
	int a;

	a=1;
	printf("%dは?", a);

	if (a) {
		printf("OK");
	}
	printf("\n");

	a=0;
	printf("%dは?", a);

	if (a) {
		printf("OK");
	}
	printf("\n");

	a=-1;
	printf("%dは?", a);

	if (a) {
		printf("OK");
	}
	printf("\n");

	return 0;
}

コンパイル方法

コマンドプロンプトでソースファイルを保存したフォルダに移動しgccコマンドを実行してコンパイルします。

>cd test
>gcc sample.c

実行方法

a.exeというファイルができたフォルダにコマンドプロンプトで移動し、 a.exeとコマンドラインに入力する以下のように表示されます。

>a.exe
1は?OK
0は?
-1は?OK

繰り返し1(for)

for(条件) {
    条件が成立する間行う処理;
}

C言語で繰り返し処理を行う方法の1つにfor文があります。 for文は繰り返し回数指定&条件に一致する場合に同じ処理を行いたいときにfor文を使います。

for文の構文

for文の構文です。

for (①カウンタの初期設定;②繰り返し条件;③繰り返し毎のカウンタの設定) {
    繰り返し処理
}

①カウンタの初期設定 …繰り返し条件で使用するカウンタ用の変数の初期値を設定します。

②繰り返し条件 …繰り返しの終了条件を条件式で記述します。

③繰り返し毎のカウンタの設定 …繰り返し毎にカウンタに値を設定する式

for文の例

「Hello World!!」という文字列を1文字ずつ解析して表示してみます。

#include <stdio.h>

int main (void) {
    char message[] = "Hello World!!";
    int i;
    for (i=0; i<13; i++) {
        printf("%c", message[i]);
    }
    printf("\n");
    return 0;
}

コンパイル方法

コマンドプロンプトでソースファイルを保存したフォルダに移動しgccコマンドを実行してコンパイルします。

>cd test
>gcc hello.c

実行方法

a.exeというファイルができたフォルダにコマンドプロンプトで移動し、 a.exeとコマンドラインに入力すると「Hello World!!」と出力されます。

>hello
Hello World!!

繰り返し2(while)

while(条件) {
    条件が成立する間行う処理;
}

C言語で繰り返し処理を行う方法の1つにwhile文があります。

while文の構文

while文の構文です。

while (条件式) {
    繰り返し処理
}

while文の例

「Hello World!!」という文字列を1文字ずつ解析して表示してみます。

#include <stdio.h>

int main (void) {
    char message[] = "Hello World!!";
    int i = 0;
    while (i<13) {
        printf("%c", message[i]);
        i++;
    }
    printf("\n");
    return 0;
}

コンパイル方法

コマンドプロンプトでソースファイルを保存したフォルダに移動しgccコマンドを実行してコンパイルします。

>gcc hello.c

実行方法

a.exeというファイルができたフォルダにコマンドプロンプトで移動し、 a.exeとコマンドラインに入力すると「Hello World!!」と出力されます。

>hello
Hello World!!

6. C言語の関数

関数とは、プログラムの記述として、何度も使用する命令のかたまりをまとめ、名前を付けたグループ化されたコードです。

「int a(){処理;}」のようにaという名前の関数を記述します。なお、C言語のmain関数はプログラムの開始時にはじめに実行される特別な関数になります。

関数の定義方法

関数はパラメータを引数で受け取り、return文で戻り値を呼び出し元にデータを返します。 データを返却しないものや引数がないものも定義できます。 なお、関数の引数や戻り値のデータ型もあらかじめ定義する必要があります。

戻り値の型 関数名(引数1,引数2…) {
retrun 戻り値;
}

引数と戻り値がある関数の例

引数と戻り値がある関数の例です。引数の値を足して、結果を戻り値に設定します。

#include <stdio.h>
int add(int a, int b) {
        return a + b;
}
int main(void) {
        printf("%d\n", add(1, 1));
        return 0;
}

引数と戻り値がない関数の例

以下は、引数と戻り値がない関数の例です。 引数はブランク、voidという型無しを表す型のキーワードを戻り値の型に設定します。 関数内でreturn文は省略できます。

#include <stdio.h>

void hello() {
        printf("Hello World!!\n");
}

int main(void) {
        hello();
        return 0;
}

プロトタイプ宣言

プロトタイプ宣言を行うと関数の定義をmain関数の後に記述できるようになります。 void hello();が関数のプロトタイプ宣言になります。 関数名と引数、戻り値が何かをあらかじめ知らせることでmain関数で使用するhello()関数が何かコンパイラー側が解決できるようになります。

#include <stdio.h>

void hello();

int main(void) {
        hello();
        return 0;
}

void hello() {
        printf("Hello World!!\n");
}

7. C言語の変数のスコープ

C言語のスコープ(変数)について見ていきます。

変数の宣言時に「記憶クラス指定子」を付けることで、変数のスコープを設定することができます。 また、変数がローカルかグローバルかにより変数の寿命を変えることができます。

表 変数のスコープ
種別 記憶クラス指定子 スコープ 寿命
ローカル変数 なし ブロック内 ブロック内
static ブロック内 プログラム終了まで
extern スコープ プログラム終了まで
グローバル変数 なし プログラム全体 プログラム終了まで
static ファイル単位 プログラム終了まで
extern プログラム全体 プログラム終了まで

8. C言語のコマンドライン引数

コマンドライン引数とは、プログラムをコマンドラインで実行する際にプログラムに引き渡すパラメータをいいます。 C言語のコマンドライン引数とは何か概要を見ていきます。

コマンドライン引数より文字列を受け取る例

受け取ったコマンドライン引数を表示してみます。

ソースコード

#include <stdio.h>

int main(int argc, char** argv) {
	int i;
	printf("引数の個数 = %d\n", argc);
	for (i = 0; i < argc; i++) {
		printf("引数%d = %s\n", i, argv[i]);
	}
	return 0;
}

コマンドライン引数の例

上記のコードをWindows用のコンパイラでコンパイルして実行した例です。

C:\sample>sample.exe 1 2 3
引数の個数 = 4
引数0 = C:\sample\sample.exe
引数1 = 1
引数2 = 2
引数3 = 3

argcに引数の数が設定される

argcに引数の数が設定され、上記のコードでは、4が設定されています。

argvには引数自体が設定される

argvに引数自体の値が文字列(char型の配列)の配列で格納されます。

argvはプログラム名から格納される

argvはプログラム名から格納されます。上記のコードでは、「C:\sample\sample.exe」が設定されています。

コマンドライン引数の数字の文字列を数値に変換する例

コマンドライン引数は、文字列となります。数値に変換して利用したい場合は変換が必要です。

ソースコード

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char** argv) {
	int i;
	printf("引数の個数 = %d\n", argc);
	for (i = 0; i < argc; i++) {
		printf("引数%d = %d\n", i, atoi(argv[i]));
	}
	return 0;
}

stdlib.hのatoi()で文字列を数値に

stdlib.hをインクルードして、atoi()を使用することで文字列を数値に変換できます。

C:\sample>sample.exe 1 2 3
引数の個数 = 4
引数0 = C:\sample\sample.exe
引数1 = 1
引数2 = 2
引数3 = 3

atoi()に数字以外の文字

atoi()に数字以外の文字列が設定されると「0」となります。

C:\sample>sample.exe a b c
引数の個数 = 4
引数0 = C:\sample\sample.exe
引数1 = 0
引数2 = 0
引数3 = 0

9. ポインタ

C言語のポインタについて見ていきます。

ポインタとは

コンピュータのメモリにはアドレスがあり、そのアドレスを扱う変数をポインターといいます。 ポインタを使用することで、データのメモリの位置を保存して参照したり変更したりすることができます。

コンピュータの仕組み

コンピュータは補助記憶にあるプログラムをメモリにロードしてCPUが実行します。 またメモリ内の管理はOSが行っていて、メモリにアドレスを振って管理しています。

コンピュータの仕組み
コンピュータの仕組み
参考

以下は、コンピュータの仕組みの参考情報になります。

プロセッサ

プロセッサとは、CPUとの違いはMPUなども含む装置の総称です。CPU、MPU(マイクロプロセッサ)など処理装置の総称のことを言います。プロセッサについての技術知識をまとめています。

詳細

オペレーティングシステム

オペレーティングシステムとは、OSのことですが、種類と特徴、機能、タスク管理などOSとはどのようなものかついてまとめています。

詳細

変数

プログラムのソースコードで扱われるデータを一定期間記憶して、必要なときに利用できるようにするため、 そのデータに固有の名前を付けて保管しておく仕組みがあり、変数はプログラム内の名前を付けたデータの保管先です。 プログラム内でデータを保管して利用するために変数を使用します。

アドレス演算子(&)

変数や値のアドレスを取得するにはアドレス演算子(&)を使用します。

サンプルプログラム

#include <stdio.h>

int main(void) {
	int n;
	printf("&iの値は%p\n", &n);
	return 0;
}

printfでの%pはポインタの値を表示する書式指定です。

コンパイル

gcc sample.c

実行

例)
>a.exe
&iの値は0060FF1C

ポインタの宣言

ポインタは、アドレスを代入して初期化しなければなりません。 ポインタにアドレスを代入してはじめて、ポインタの指すアドレスを見たり、そのアドレスの変数に記憶してある値を操作することができます。

型+「*」

C言語のポインタの宣言は、intなどのデータ型の後ろに「*」をつけます。

ポインタの初期化の例

ポインタの初期化の例です。

int *p;      /*ポインタpの宣言*/
int n;       /*変数nを宣言*/
p = &n;      /*ポインタpを変数nのアドレスで初期化*/
*p = 999;
printf("アドレス(%p)の変数の値は、%dである。\n", p,*p);

ポインタの初期化の間違いの例

ポインタの初期化の間違いの例です。 ポインタに何もアドレスが記憶されていないのでそのアドレスの変数に値は代入できません。

int *p;      //ポインタpの宣言
*p = 999;
printf("アドレス(%p)の変数の値は、%dである。\n", p,*p);

サンプルプログラム1

//ファイル名:Sample1.c
#include <stdio.h>

int main(void) {
	int *p;      /*ポインタpの宣言*/
	int n;       /*変数nを宣言*/
	p = &n;      /*ポインタ変数pを変数nのアドレスで初期化*/
	*p = 999;
	printf("アドレス(%p)の変数の値は、%dである。\n", p,*p);
	return 0;
}
コンパイル

gcc Sample1.c

実行

作成したa.exeというファイルと同じディレクトリでSample1とコマンドラインに入力して、 「アドレス(16進数の数字)の変数の値は、999である。」と出力されます。

例)
>a.exe
アドレス(0012FF88)の変数の値は、999である。

サンプルプログラム2
//ファイル名:Sample2.c

#include <stdio.h>

int main(void) {
	// 変数nに9999を代入して表示
	int n = 9999;
	printf("変数nのアドレス(%p)の値は、%dである。\n", &n, n);

	// 変数pにnのアドレスを代入して表示
	int *p = &n;
	printf("変数pのアドレス(%p)の値は、%dである。\n", p, *p);

	// 変数p経由でnの値を変更して表示
	*p = 8888;
	printf("変数nのアドレス(%p)の値は、%dである。\n", &n, n);
	return 0;
}
コンパイル

gcc Sample2.c

実行

作成したa.exeというファイルと同じディレクトリでa.exeとコマンドラインに入力して、以下のように表示されます。

変数nのアドレス(16進数の数字)の値は、9999である。
変数pのアドレス(16進数の数字)の値は、9999である。
変数nのアドレス(16進数の数字)の値は、8888である。

C言語の配列とポインタ

ポインターに配列のアドレスを設定すれば、ポインターで配列が扱えます。 また、ポインターの配列を利用することで複数の文字列が扱えます。

#include <stdio.h>
void hello(char *str) {
        printf("Hello %s!!\n", str);
}
int main(void) {
        char *str = "World";
        hello(str);
        return 0;
}

コンパイルし、実行すると以下のように表示されます。

Windows)a.exe
Linux) ./a.out
Hello World!!

構造体とポインター

C言語の構造体とポインターについてみていきます。

構造体

C言語には、複数のデータを一まとまりにする構造体という仕組みが用意されています。

structの直後に「タグ名」、構造体内の各データのことを「メンバ」と呼びます。 たとえば、次のように定義します。

struct Person {
    char* name;
    char* address;
}

構造体のデータを指し示すポインタ

構造体のメンバへのアクセスには、「.」、ドット演算子を使用しますが、構造体のデータを指し示すポインタについては、ドットではなくて、「->」、アロー演算子を使用します。

アロー演算子の利用例
struct Person *person;
person = malloc(sizeof(struct Person));
person->name = strdup("太郎");

もっと知識を広げるための参考

更新履歴

戻る

スポンサーリンク

情報処理の知識体系

プログラミング

各試験の問題と解説

ランダム出題・採点アプリ

スポンサーリンク