本ページは,機械工学科 情報処理1・情報処理実習1履修者のための復習用まとめページである.
C言語文法について,一通り理解済であることを想定している.
授業の履修を終えてから参照すると良い.
ここに列挙したものはあくまで復習用のキーワードであり,詳細については,各実習のテキストを参照のこと.
注意:授業の解説順序と異なる場合がある.
ソースコード中のコメント部分はコンパイラは無視する.
/* この部分はコメント */
// この行の行末の改行までコメント
C言語のソースファイルでは,改行やスペースは(文字列中やヘッダファイル名などの例外を除き)任意に入れることができる.
例1
#include<stdio.h>
int main(void)
{
printf("Hello\n");
return 0;
}
例2
#include<stdio.h>
int main(void){printf("Hello\n");return 0;}
の,いずれもコンパイラにとっては同じ意味となり正しく動作するが,ソースコードの見やすさと,プログラミング作成時の論理の表現の明瞭さの点から,例1のように字下げや改行を適切に入れよう.
sizeof(型名)
で得られる.int, short, long, long long
など.unsigned
をつけると符号なし整数float, double, long double
など.int i;
float r;
同じ型の変数が定数個分,メモリ上の連続した領域に確保される.
int a[10];
const int N = 100;
float data[N];
配列が同じ型の変数の集合であるのに対し,構造体はいろいろな異なる型の変数をひとまとめに表すことができる.(例:複素数や住所録など.)
構造体の中には通常の変数のほかに配列,ポインタ,構造体を含めることが可能である.
構造体の配列や,構造体を指すポインタも定義できる.
ポインタは,他の変数などのアドレスを格納するための変数.
ポインタ変数の定義は,ポインタの指す相手の型を指定したうえで,変数名の前に *
をつける.
(型名の直後に*
をつけても同じ意味となる.つまり,int *p;
とint* p;
は同じ意味.)
ポインタ演算子:
&
演算子*
演算子
どこも指していないポインタをヌルポインタと呼び,記号 NULL
で表す.
ポインタ変数に 1 を加算すると,指す相手の変数1個分のサイズだけアドレス値が増える.
配列アクセスなどに便利.
// (1)
int i=100;
int *p1 = &i; // int を指す場合
int* p1 = &i; // こう書いてもOK
*p1 = 200; // iの値が変更される
// (2)
float data[100];
float *p2 = data; // 配列を指す場合.&data[0] と同じ意味.
*(p2+5) = 5; // 6番目の要素,data[5]が変更される.
配列の要素数,物理定数など,変更する予定のない変数は const
指定しておくと,誤って変更しようとしたときにコンパイルエラーとなる.
また,配列の要素数を変数で指定する場合に必須である.
例1:const int X = 100; X++; // これはコンパイルエラー
例2:const int N = 10; // const が無いと,次の行がエラーになるかも? 古いコンパイラの場合 int array[N];
例3:void func(int data, const int N) // 仮引数も const 指定できる { }
関数などのブロック{ }
内(スコープという)にある変数をローカル変数と呼び,そのスコープ内のみで利用可能.
一方,関数外にある変数をグローバル変数と呼に,プログラム実行中はいつでも利用可能.
ローカル変数は,処理がスコープから出ると変数は自動的に破棄される.
(static
指定をすると,スコープから外れても破棄されず残る)
double pi = 3.14159265358979; // グローバル変数
voif func(void)
{
int i; // これはローカル変数
}
main()
も関数の一つであるが,ここから処理が開始される特別な関数である.return
文を用いる.1つの値のみ返すことができる.
あらかじめコンパイラ製品に用意されている関数を「ライブラリ関数」と呼ぶ.(例:printf, scanf, fopen, strcpy, sqrt
など)
ライブラリ関数の使用には,適切なヘッダファイルの #include が必要
=
+ , - , * , / , %
+= , -= , *= , /= , %=
== , != , < , <= , > , >=
&&
(AND) , ||
(OR) , !
(NOT)printf()
書式指定文字列に注意.
scanf()
書式指定文字列に注意.引数はアドレス渡し.
FILE
ポインタ,fopen, fputc, fgetc, fputs, fgets, fprintf, fscanf, fwrite, fread, fclose, feof, ferror
などの使い方を覚えておこう.
if() ...
if() ... else ...
if() ... else if() ... else ...
switch() ... case ???: ... default: ...
while()
do ... while();
for()...
文字(1文字)は char
型変数で表が,その実体は 8bit 整数である.
文字と数値の対応表を文字コードと呼び,最も基本的なものはASCIIコードである.
文字定数はシングルクオーテーション (') で区切られた区間である.
改行やタブなど,文字として表せない文字の表現をエスケープシーケンスと呼ぶ.
例えば,改行は '\n'
,タブは '\t'
と書く.
文字(char
)型の配列を文字列と呼び,ソースコード中のダブルクオーテーション(")で区切られた区間を指す.
文字列は必ずヌル文字 ('\0'
) で終端するルールがある.
文字列操作関数 strcpy, strcat, strcmp, strlen
etc...
四則演算や条件分岐・繰り返しなどを組み合わせて,所望の処理結果を得る計算手順のことを「アルゴリズム」と呼ぶ.
プログラミング(コーディング)に際しては,配列や構造体などの「データ構造」をうまく組み合わせて処理手順を記述するとよい.