C言語

戻る

目次


第一回授業

switch文

case 定数:とdefault:はラベル。上から昇順に定数を数値で指定した場合には、break文を検出するまで、ヒットした行からすべて実行する。



do文

【反復1】はfor文、while文、【反復2】はdo-while文

while文、for文との違いは標準入力(キーボード)から受け取る場合に一度入力を行わずに式の判定ができないため、二度同じ文が必要になることがある。これを避けるためにdo文を活用することで一度の記述で済む。


補足:何らかの状態や結果を真理値として保持する変数を「フラグ」と言う。

グローバル変数

変数のスコープ

論理演算子・条件演算子の短絡評価

論理演算子・条件演算子の評価時に||は左から順に一つでも条件に合致する場合、&&は一つでも条件に合わない場合に後半の評価を省略する。これを「短絡評価」という。


C言語の演算子

優先順位演算子結合
1()(関数呼び出し) [] . -> ++(後置) --(後置) 左
2++(前置) --(前置) +(単項) -(単項) ~ &(単項) *(単項) ! sizeof 右
3()(キャスト) 右
4*(二項) / % 左
5+(二項) -(二項) 左
6<< >> 左
7< <= > >= 左
8== != 左
9&(二項) 左
10^ 左
11| 左
12&& 左
13|| 左
14?: 右
15= += -= *= /= %= <<= >>= &= ^= |= 右
16, 左

単項演算子と二項演算子


トップへ戻る

第二回授業

文字と数値を表す型

文字か数値はデータ自体に意味付けされていない。扱える桁数は(bit数も)処理系に依存する。C99ではint32_t(32bit),uint64_t(64bit)など、ビット数が決まった型が用意されている。

暗黙の型変換

short型にint型となるような数値リテラルを代入しようとするとき、数値はshort型として型変換され認識される。型に入らない容量の場合の型変換後の数値は処理系によって異なる。

関数の呼び出しにおいても引数の読み込み時や戻り値の代入時には暗黙の型変換が行われることがある。[float f2 = (float)sqrt((double)f1);]

3 * 2.5の場合は[(double)3 * (double)2.5]として計算される。

int型の負の値xをunsigned int型に変換すると、[(unsigned int型で表現できる最大値) + x + 1]となることが規格で定められている。(2の補数表現)

コンピュータにおけるデータの表現

小数の表現

固定小数点と浮動小数点

浮動小数点

(符号)(仮数) × (基数)(指数)

少数の精度

sizeof演算子

sizeof(型名)

sizeof 式


トップへ戻る

ビットを対象とする演算

ビットを対象とする演算

ビットを対象とする演算の演算子
演算子複合演算子役割
a & ba &= baとbのビット単位の論理積
a | ba |= baとbのビット単位の論理和
a ^ ba ^= baとbのビット単位の排他的論理和
~aa = ~aaのビット反転
a << xa <<= xaをxビット左シフト
a >> xa >>= xaをxビット右シフト(負でない整数:論理右シフト、負の整数:処理系依存)

論理演算のための演算子

演算子役割
a && baとbの両方とも0以外であれば1(真)、そうでなければ0(偽)
a || baとbの片方でも0以外であれば1(真)、そうでなければ0(偽)
!aaが0であれば1(真)、そうでなければ0(偽)

排他的論理和

表現方法例

トップへ戻る

第4回授業

乱数の生成

書式rand()
引数なし
戻値0以上RAND_MAX以下の乱数(int)
必要ヘッダstdlib.h

この関数の乱数は何度、実行を繰り返しても同じ値になる。このような乱数はまたは、と呼ばれる

書式srand(seed)
引数非負整数seed(unsigned int型)
戻値なし
必要ヘッダstdlib.h

srandを利用してもプログラムの実行ごとに異なる乱数を与えることができないためtime関数を利用する

書式time(NULL)
引数この授業では"NULL"を指定
戻値現在時刻を表す値(time_t型)
必要ヘッダtime.h

特定の範囲の乱数を作る:rand() * n /RAND_MAX 「0以上n以下の乱数」

配列の導入

記入法説明
変数型 変数名[n] = {値1,値2,...,値n}配列の初期化(要素数指定あり)
変数型 変数名[] = {値1,値2,...,値n}配列の初期化(要素数指定なし)
sizeof(配列)/sizeof(配列[0])配列の要素数

注意点

トップへ戻る

第五回授業

ポインタ

メモリ

オブジェクトとポインタの関係

オブジェクト ポインタ & *

アドレスを格納する変数に関する誤り

上記の変数では以下のようになる

操作正しい式誤った式
アドレスの代入cp = &c*cp = &c;
アドレスの取り出しprintf("%p",cp)printf("%p",&cp)

変数aの*&aという表記で参照すれば通常の変数aの持つ値を示す

トップへ戻る

第六回授業

ポインタへの足し算引き算は、1バイト単位ではなく、1要素ごとである

C言語で配列を関数へ渡す際には、ポインタを利用する

C言語では配列の長さ等を扱う場合にはsize_t型を利用することが推奨されていて、一般的。

const付きポインタには代入は可能であるが、ポインタが指すオブジェクトへの値の変更は不可になる。constは仮引数にもつけることができる

2次元配列


2次元配列は、1次元配列同様、メモリ上の連続した領域が割り当てられる

2次元配列aをa[n]で表現した場合の評価はポインタで&a[n][0]と同一である

トップへ戻る

第七回授業

'シングルクォーテーションで囲んだ一文字をと言う。

ダブルクォーテーションで囲んだ文字列をと言う。

※ポインタでは文字列リテラル中の文字を書き換えることは許容されていない。ただし、文字列リテラル自体を書き換えることは可能。(その場合は新たにメモリ領域が確保される?ex158.cで確認したところアドレスは変更されている。)。また、char型配列では文字を変更できるようだ。

char型の配列に演算子=を使ってchar型の配列を代入することはできない。

関数

書式strlen(s)
引数文字列s (const char *型)
戻り値sの長さ (size_t型)
必要ヘッダstring.h

書式strcpy(dest,src)
引数コピー先の配列dest(char *型)と文字列src(const char *型)
処理srcが指す文字列を、ヌル文字を含めdestが指す配列にコピーする。
戻り値destの値(char *型)
必要ヘッダstring.h

書式strchr(s,c)
引数文字列s(const char *型)と文字c(int型)
戻り値sにcが含まれていれば、sの中で一番先頭にちかいcへのポインタ(char *型)。含まれていなければNULL。
必要ヘッダstring.h

書式strcmp(s1,s2)
引数文字列s1とs2(いずれもconst char *型)
戻り値s1がs2より大きければ0より大きい整数、等しければ0、小さければ0より小さい整数(int型)。文字列の大小は、文字コードを基準にした辞書順。
必要ヘッダstring.h

scanf()のフォーマット

変換指定役割
%c読み取った文字をchar型の変数に格納する。
%d読み取った整数をint型の変数に格納する。
%u読み取った非負整数をunsigned int型の変数に格納する。
%lf(エル・エフ)読み取った小数をdouble型の変数に格納する。
%s読み取った文字列をchar型の配列に格納する。

文字列の比較

2つの文字列が等しいかは演算子==を利用しては判定ができない

文字列の配列


トップへ戻る

第八回授業

構造体





トップへ戻る

トップへ戻る