Skip to content

Latest commit

 

History

History
200 lines (151 loc) · 4.19 KB

L03.md

File metadata and controls

200 lines (151 loc) · 4.19 KB

C/C++における真偽(true/false)

C/C++では、int型を利用して真偽を表す。0であれば偽であり、それ以外はすべて真である。

value(int) true/false
0 false
1 true
1011 true
-1 true

if-else文

if(条件式) 式1;
else 式2;

条件式が真(True)のとき式1が実行され、条件式が偽(False)のとき式2が実行される。

また、else文以下は無くてもよい

比較演算子

演算子 意味
a == b aとbが同じ値
a != b aとbが違う値
a < b aはb未満
a > b aはbよりも大きい
a <= b aはb以下
a >= b aはb以上
a && b aかつb
a || b aまたはb
!a aではない

while文 / do-while文

while(条件式) ;

while文: 条件式が真の間、式を繰り返し実行する。また、毎回式を実行する前に条件式を評価する。

do  while(条件式);

do-while文: 条件式が真の間、式を繰り返し実行する。ただし、毎回式を実行した後に条件式を評価する。

for文

for(初期化式; 条件式; 終了式) ;
  1. 初期化式を実行する。
  2. 条件式を評価し、真ならループ内、偽ならループ外へ
  3. 式を実行する
  4. 終了式を実行する
  5. 3へ再び戻る

また、初期化式、条件式、終了式は省略することも可能

for(;;);
/* は */
while(1);
/* と同じ挙動をする */

break/continue

breakはfor/whileループから即時脱出する

int i = 10;
while(1){
  if(i < 0) break; /* iが0未満になったらループを脱出する。 */
  i--;
}

for(i = 0; 1; i++){
  if(i => 5) break; /* iが5以上になったらループを脱出 */
}

continueは今のループをそれきりで終了し、次のループへ処理を移す

int i = 0;
while(i < 20){
  i++;
  if(i % 2 == 0) continue; /* iが偶数なら以下の処理をスキップ */
  printf("%d", i);
}
/* => 1, 3, 5, 7, 9, ... */

random

srand(seed): 乱数をseedで初期化する

rand(): 0からRAND_MAXまでの乱数(整数)を返す

※正確には乱数ではなく疑似乱数なので、seedに毎回同じ値を設定するとrand()は同じ値を吐く

scan

scanf(フォーマット, 変数ポインタ, ...);

/*
  フォーマット
  - %d  : int
  - %f  : float
  - %lf : double
  - %c  : char
  - %s  : char* / char[]
*/

フォーマットにしたがって残りの変数に値を代入していく

ex)

scanf("%d%d", &a, &b); /* <= "12 24" */
printf("%d %d", b, a); /* => "24 12" */

※VisualStudio(VC++)を利用している人は、scanfを使おうとするとコンパイルエラーが出ると思うので、scanf_s()又は#define _CRT_SECURE_NO?WARNINGSを利用してください

scanf_s()

int integer;
scanf_s("%d", &integer);

define

#define _CRT_SECURE_NO_WARNINGS

int main(void){
  int integer;
  scanf("%d", &integer);
}

switch-case

ある変数が、case以下と同じ時にそのラベルにジャンプする

switch(変数){
  case 値01:
    式01
  break;
  case 値02:
    式02
  break;
  default:
    式03
}

もし変数が値01と同じなら
=> 式01が実行される
もし変数が値02と同じなら
=> 式02が実行される
もし変数が値01/値02と違ったら
=> 式03が実行される

ただし、breakを書くのを忘れると、breakに突き当たるまで(又は}に突き当たるまで)式を実行する。

switch(val){
  case 0:
    statement01
  case 1:
    statement02
  case 2:
    statement03
  default:
    statement04
}

上の例ではbreakを書いていないので、例えば変数が2だとすると、statement03,04が実行される

define (マクロ定義)

#define 定義名

コンパイル時にプログラム内の定義名を値に置き換える

プログラム内に、唐突に数値が出てくると何を示しているかがわからなくなるので、名前を付けることによって、なんの値であるかを示す

※defineは正確にはC/C++ではなく、プリプロセッサという