[C++/C] 配列

### 配列の要素を出力

int main() {
    
    int test[5];

    test[0] = 80;
    test[1] = 60;
    test[2] = 22;
    test[3] = 50;
    test[4] = 75;
    
    for(int i=0; i<5; i++) {
        cout << i+1 << "番目の人の点数は" << test[i] << "です。\n";
    }

    return 0; 
}

### キーボードから入力

int main() {
    
    const int num = 5;
    int test[num];

    cout << num << "人の点数を入力してください。\n";
    for(int i=0; i<num; i++) {
        cin >> test[i];
    }
    
    for(int j=0; j<num; j++) {
        cout << j+1 << "番目の人の点数は" << test[j] << "です。\n";
    }

    return 0; 
}

### 配列の要素をソートする

int main() {
    
    const int num = 5;
    int test[num];

    cout << num << "人の点数を入力してください。\n";
    for(int i=0; i<num; i++) {
        cin >> test[i];
    }

    for(int s=0; s<num-1; s++) {
        for(int t=s+1; t<num; t++) {
            if(test[t] > test[s]){
                int tmp = test[t];
                test[t] = test[s];
                test[s] = tmp;
            }
        }
    }
    
    for(int j=0; j<num; j++) {
        cout << j+1 << "番目の人の点数は" << test[j] << "です。\n";
    }

    return 0; 
}

### 多次元配列

int main() {
    
    const int sub = 2;
    const int num = 5;

    int test[sub][num];

    test[0][0] = 80;
    test[0][1] = 60;
    test[0][2] = 22;
    test[0][3] = 50;
    test[0][4] = 75;
    test[1][0] = 90;
    test[1][1] = 55;
    test[1][2] = 68;
    test[1][3] = 72;
    test[1][4] = 58;
    
    for(int i=0; i<num; i++) {
        cout << i+1 << "番目の人の国語の点数は" << test[0][i] << "です。\n";
        cout << i+1 << "番目の人の算数の点数は" << test[1][i] << "です。\n";
    }

### 配列とポインタ
配列のアドレス
&test[0]
&test[1]

配列名を記載しただけで、先頭要素のアドレスを表す
test

int main() {
    
    int test[5] = {80, 60, 55, 22, 75};

    cout << "test[0]の値は" << test[0] << "です。\n";
    cout << "test[0]のアドレスは" << &test[0] << "です。\n";
    cout << "testの値は" << test << "です。\n";
    cout << "つまり*testの値は" << *test << "です。\n";

    return 0; 
}

$ g++ -o sample sample.cpp && ./sample
test[0]の値は80です。
test[0]のアドレスは0xfffff9b40360です。
testの値は0xfffff9b40360です。
つまり*testの値は80です。

*testは配列の先頭要素の値となる。

### ポインタの演算

int main() {
    
    int test[5] = {80, 60, 55, 22, 75};

    cout << "test[0]の値は" << test[0] << "です。\n";
    cout << "test[0]のアドレスは" << &test[0] << "です。\n";
    cout << "testの値は" << test << "です。\n";
    cout << "test+1の値は" << test+1 << "です。\n";
    cout << "*(test+1)の値は" << *(test+1) << "です。\n";

    return 0; 
}

$ g++ -o sample sample.cpp && ./sample
test[0]の値は80です。
test[0]のアドレスは0xffffe4e0e070です。
testの値は0xffffe4e0e070です。
test+1の値は0xffffe4e0e074です。
*(test+1)の値は60です。

[C++/C] ポインタ2

### 参照
型名& 参照名 = 変数

int main() {
    
    int a = 5;
    int& rA = a;

    cout << "変数aの値は" << a << "です。\n";
    cout << "参照rAの値は" << rA << "です。\n";

    rA = 50;

    cout << "rAに50を代入しました。\n";
    cout << "参照rAの値は" << rA << "です。\n";
    cout << "変数aの値は" << a << "です。\n";
    
    cout << "参照rAのアドレスは" << &rA << "です。\n";
    cout << "変数aのアドレスは" << &a << "です。\n";

    return 0; 
}

$ g++ -o sample sample.cpp && ./sample
変数aの値は5です。
参照rAの値は5です。
rAに50を代入しました。
参照rAの値は50です。
変数aの値は50です。
参照rAのアドレスは0xfffff784567cです。
変数aのアドレスは0xfffff784567cです。

参照rAはaと全く同じ
参照の場合は引数を変更することができる。

void swap(int& x, int& y);

int main() {
    
    int num1 = 5;
    int num2 = 10;

    cout << "変数num1の値は" << num1 << "です。\n";
    cout << "変数num2の値は" << num2 << "です。\n";

    cout << "変数num1とnum2の値を交換します。\n";

    swap(num1, num2);
    
    cout << "変数num1の値は" << num1 << "です。\n";
    cout << "変数num2の値は" << num2 << "です。\n";

    return 0; 
}

void swap(int& x, int& y){
    int tmp;

    tmp = x;
    x = y;
    y = tmp;
}

$ g++ -o sample sample.cpp && ./sample
変数num1の値は5です。
変数num2の値は10です。
変数num1とnum2の値を交換します。
変数num1の値は10です。
変数num2の値は5です。

関数の引数にポインタ、参照を使うと、呼び出し元の実引数を変更できる

### Practice
1. x, 2.×, 3.○

void add(int* num1, int* num2, int num3);

int main() {
    
    int num1, num2, num3;

    cout << "2科目分の点数を入力してください。\n";

    cin >> num1;
    cin >> num2;

    cout << "加算する点数を入力してください。\n";

    cin >> num3;

    add(&num1, &num2, num3);
    
    cout << "科目1は" << num1 << "点となりました。\n";
    cout << "科目2は" << num2 << "点となりました。\n";

    return 0; 
}

void add(int* num1, int* num2, int num3) {
    *num1 += num3;
    *num2 += num3;
}
void add(int& num1, int& num2, int num3);

int main() {
    
    int num1, num2, num3;

    cout << "2科目分の点数を入力してください。\n";

    cin >> num1;
    cin >> num2;

    cout << "加算する点数を入力してください。\n";

    cin >> num3;

    add(num1, num2, num3);
    
    cout << "科目1は" << num1 << "点となりました。\n";
    cout << "科目2は" << num2 << "点となりました。\n";

    return 0; 
}

void add(int& num1, int& num2, int num3) {
    num1 += num3;
    num2 += num3;
}

[C++/C] ポインタ

アドレスは16進数を使ってx01000, 0x1004などで表す
メモリのアドレスは&変数名を使う

int main() {
    
    int a;
    a = 5;

    cout << "変数aの値は" << a << "です。\n";
    cout << "変数aのアドレスは" << &a << "です。\n";

    return 0; 
}

$ g++ -o sample sample.cpp && ./sample
変数aの値は5です。
変数aのアドレスは0xffffc948bd84です。

### ポインタ
アドレスを格納する特殊な変数

int main() {
    
    int a;
    int* pA;

    a = 5;
    pA = &a;

    cout << "変数aの値は" << a << "です。\n";
    cout << "変数aのアドレス(&a)は" << &a << "です。\n";
    cout << "ポインタpAの値は" << pA << "です。\n";

    return 0; 
}

$ g++ -o sample sample.cpp && ./sample
変数aの値は5です。
変数aのアドレス(&a)は0xffffe5f9f30cです。
ポインタpAの値は0xffffe5f9f30cです。

ポインタから変数の値を知るには *pAとする

int main() {
    
    int a;
    int* pA;

    a = 5;
    pA = &a;

    cout << "変数aの値は" << a << "です。\n";
    cout << "変数aのアドレス(&a)は" << &a << "です。\n";
    cout << "ポインタpAの値は" << pA << "です。\n";
    cout << "*pAの値は" << *pA << "です。\n";

    return 0; 
}

$ g++ -o sample sample.cpp && ./sample
変数aの値は5です。
変数aのアドレス(&a)は0xffffc90c856cです。
ポインタpAの値は0xffffc90c856cです。
*pAの値は5です。

### ポインタに別のアドレスを代入する

int main() {
    
    int a = 5;
    int b = 10;
    int* pA;
    pA = &a;

    cout << "変数aの値は" << a << "です。\n";
    cout << "ポインタpAの値は" << pA << "です。\n";
    cout << "*pAの値は" << *pA << "です。\n";

    pA = &b;
    
    cout << "変数bの値は" << b << "です。\n";
    cout << "ポインタpAの値は" << pA << "です。\n";
    cout << "*pAの値は" << *pA << "です。\n";

    return 0; 
}

$ g++ -o sample sample.cpp && ./sample
変数aの値は5です。
ポインタpAの値は0xffffd6b96088です。
*pAの値は5です。
変数bの値は10です。
ポインタpAの値は0xffffd6b9608cです。
*pAの値は10です。

### ポインタを使って変数を変更する

int main() {
    
    int a = 5;
    int* pA;
    pA = &a;

    cout << "変数aの値は" << a << "です。\n";

    *pA = 50;
    
    cout << "*pAに50を代入しました。\n";
    cout << "aの値は" << a << "です。\n";

    return 0; 
}

$ g++ -o sample sample.cpp && ./sample
変数aの値は5です。
*pAに50を代入しました。
aの値は50です。

なぜこのような機能があるか??

### 引数とポインタ
swapの誤ったコード

void swap(int x, int y);

int main() {
    
    int num1 = 5;
    int num2 = 10;

    cout << "変数num1の値は" << num1 << "です。\n";
    cout << "変数num2の値は" << num2 << "です。\n";

    cout << "変数num1とnum2の値を交換します。\n";

    swap(num1, num2);
    
    cout << "変数num1の値は" << num1 << "です。\n";
    cout << "変数num2の値は" << num2 << "です。\n";

    return 0; 
}

void swap(int x, int y){
    int tmp;

    tmp = x;
    x = y;
    y = tmp;
}

$ g++ -o sample sample.cpp && ./sample
変数num1の値は5です。
変数num2の値は10です。
変数num1とnum2の値を交換します。
変数num1の値は5です。
変数num2の値は10です。

通常の値渡しでは、実引数を変更することができない。

アドレスを引数にすると、変更することができる。

void swap(int* x, int* y);

int main() {
    
    int num1 = 5;
    int num2 = 10;

    cout << "変数num1の値は" << num1 << "です。\n";
    cout << "変数num2の値は" << num2 << "です。\n";

    cout << "変数num1とnum2の値を交換します。\n";

    swap(&num1, &num2);
    
    cout << "変数num1の値は" << num1 << "です。\n";
    cout << "変数num2の値は" << num2 << "です。\n";

    return 0; 
}

void swap(int* px, int* py){
    int tmp;

    tmp = *px;
    *px = *py;
    *py = tmp;
}

$ g++ -o sample sample.cpp && ./sample
変数num1の値は5です。
変数num2の値は10です。
変数num1とnum2の値を交換します。
変数num1の値は10です。
変数num2の値は5です。

[C++/C] 関数2

### 関数のオーバーロード
引数の型が異なる同じ名前の関数を複数定義することを関数のオーバーロードという。

int main() {
    
    int a, b;
    double da, db;

    cout << "2つの整数を入力してください。\n";
    cin >> a >> b;

    cout << "2つの小数を入力してください。\n";
    cin >> da >> db;

    int ans1 = max(a, b);
    double ans2 = max(da, db);

    cout << "整数値の最大値は" << ans1 << "です。\n";
    cout << "小数値の最大値は" << ans2 << "です。\n";

    return 0; 
}

int max(int x, int y) {
    if (x > y)
        return x;
    else
        return y;
}

double max(double x, double y) {
    if (x > y)
        return x;
    else
        return y;
}

### 関数テンプレート
関数テンプレートの宣言は
template
関数の宣言

仮引数の型名にテンプレート引数を使う
L 型が異なるが同じ処理の場合に纏めて使用できる。

template <class T>
T maxt(T x, T y) {
    if (x > y)
        return x;
    else
        return y;
}

int main() {
    
    int a, b;
    double da, db;

    cout << "2つの整数を入力してください。\n";
    cin >> a >> b;

    cout << "2つの小数を入力してください。\n";
    cin >> da >> db;

    int ans1 = maxt(a, b);
    double ans2 = maxt(da, db);

    cout << "整数値の最大値は" << ans1 << "です。\n";
    cout << "小数値の最大値は" << ans2 << "です。\n";

    return 0; 
}

### Practice

int square(int x) {
    return x * x;
}

int main() {
    
    int x, res;
    cout << "整数を入力してください。\n";
    cin >> x;

    res = square(x);

    cout << x << "の2乗は" << res << "です。\n";

    return 0; 
}
int square(int x) {
    return x * x;
}

double square(double x) {
    return x * x;
}

int main() {
    
    int x, res;
    double bx, bres;
    cout << "整数を入力してください。\n";
    cin >> x;

    res = square(x);

    cout << x << "の2乗は" << res << "です。\n";

    cout << "小数を入力してください。\n";
    cin >> bx;

    bres = square(bx);

    cout << bx << "の2乗は" << bres << "です。\n";

    return 0; 
}

inline

inline int square(int x) { return x * x;}

inline double square(double x) { return x * x;}

関数テンプレート

template <class T>
T squaret(T x){
    return x * x;
}

int main() {
    
    int x, res;
    double bx, bres;
    cout << "整数を入力してください。\n";
    cin >> x;

    res = squaret(x);

    cout << x << "の2乗は" << res << "です。\n";

    cout << "小数を入力してください。\n";
    cin >> bx;

    bres = squaret(bx);

    cout << bx << "の2乗は" << bres << "です。\n";

    return 0; 
}

[C++/C] 関数

void buy() {
    cout << "車を買いました。\n";
}

int main() {
    
    buy();
    cout << "車をもう一台購入します。\n";
    buy();

    return 0; 
}

関数の引数

void buy(int x) {
    cout << x << "万円の車を買いました。\n";
}

int main() {
    
    buy(20);
    buy(50);

    return 0; 
}

キーボードから入力

int main() {
    
    int num;
    cout << "1台目はいくらの車を買いますか?\n";
    cin >> num;

    buy(num);

    cout << "2台目はいくらの車を買いますか?\n";
    cin >> num;

    buy(num);

    return 0; 
}

戻り値
L returnする値によって、関数をvoid buy()からint buy()に変更する

int buy(int x, int y) {
    int z;

    cout << x << "万円と" << y << "万円の車を買いました。\n";
    z = x+y;
    return z;
}

int main() {

    int num1, num2, sum;
    
    cout << "1台目はいくらの車を買いますか?\n";
    cin >> num1;


    cout << "2台目はいくらの車を買いますか?\n";
    cin >> num2;

    sum = buy(num1, num2);

    cout << "合計で" << sum << "万円です。\n";

    return 0; 
}

合計値

int main() {

    int num1, num2, ans;
    
    cout << "1番目の整数を入力してください。\n";
    cin >> num1;


    cout << "2番目の整数を入力してください。\n";
    cin >> num2;

    ans = sum(num1, num2);

    cout << "合計は" << ans << "です。\n";

    return 0; 
}

max

int max(int x, int y) {
    if (x > y)
        return x;
    else
        return y;
}

int main() {

    int num1, num2, ans;
    
    cout << "1番目の整数を入力してください。\n";
    cin >> num1;


    cout << "2番目の整数を入力してください。\n";
    cin >> num2;

    ans = max(num1, num2);

    cout << "最大値は" << ans << "です。\n";

    return 0; 
}

inline(one liner)

inline int max(int x, int y) {if (x > y) return x; else return y;}

関数プロトタイプ宣言
L mainの前で宣言すれば、後でも書ける

int max(int x, int y);

int main() {

    int num1, num2, ans;
    
    cout << "1番目の整数を入力してください。\n";
    cin >> num1;


    cout << "2番目の整数を入力してください。\n";
    cin >> num2;

    ans = max(num1, num2);

    cout << "最大値は" << ans << "です。\n";

    return 0; 
}

int max(int x, int y) {
    if (x > y)
        return x;
    else
        return y;
}

関数のデフォルト引数

void buy(int x=10);

int main() {
    
    cout << "1回目は100万円で購入します。\n";
    buy(100);


    cout << "2回目はデフォルト金額で購入します。\n";
    buy();

    return 0; 
}

void buy(int x) {
    cout << x << "万円の車を購入しました。\n";
}

[C++/C] 繰り返し処理

### for文

int main() {
    
    for(int i=1; i<=5; i++) {
        cout << i << "番目の繰り返しです。\n";
    }

    cout << "繰り返しが終わりました。\n";

    return 0; 
}

入力した合計値出力

int main() {
    
    int num;
    int sum = 0;

    cout << "幾つまでの合計を求めますか。\n";

    cin >> num;

    for(int i=1; i<=num; i++) {
        sum += i;
    }

    cout << "1から" << num << "までの合計値は" << sum << "です。\n";

    return 0; 
}

### while文

int main() {
    
    int i = 1;

    while(i <= 5) {
        cout << i << "番目の繰り返しです。\n";
        i++;
    }

    cout << "繰り返しが終わりました。\n";

    return 0; 
}

i++を忘れると無限ループになる。

int main() {
    
    int num = 1;

    while(num) {
        cout << "整数を入力してください。(0で終了)\n";
        cin >> num;
        cout << num << "が入力されました。\n";
    }

    cout << "繰り返しが終わりました。\n";

    return 0; 
}

while(num) はwhile(num != 0)と同義

do ~ while

int main() {
    
    int i = 1;

    do {
        cout << i << "番目の繰り返しです。\n";
        i++;
    }
    while(i <= 5);

    cout << "繰り返しが終わりました。\n";

    return 0; 
}

### 文のネスト

int main() {
    
    for(int i = 0; i < 5; i++) {
        for(int j=0; j<3; j++) {
            cout << "iは" << i << ":jは" << j << "\n";
        }
    }

    return 0; 
}

if文と組み合わせ

int main() {
    
    int ch = 0;
    for(int i = 0; i < 5; i++) {
        for(int j=0; j<5; j++) {
            if (ch == 0) {
                cout << '*';
                ch = 1;
            } else {
                cout << '-';
                ch = 0;
            }
        }
        cout << "\n";
    }

    return 0; 
}

break

#include <iostream>
using namespace std;

int main() {
    
    int res;
    cout << "何番目でループを中止しますか?\n";
    cin >> res;

    for(int i = 0; i < 10; i++) {
        cout << i << "番目の処理です。\n";
        if (i == res)
            break;
    }

    return 0; 
}

continue

int main() {
    
    int res;

    cout << "何番目の処理を飛ばしますか。(1~10)\n";

    cin >> res;

    for(int i =1; i <= 10; i++) {
        if(i == res)
            continue;
        cout <<  i << "番目の処理です。\n";
    }

    return 0; 
}

### Practice

#include <iostream>
using namespace std;

int main() {
    
    cout << "1~10までの偶数を出力します。\n";

    for(int i =1; i <= 10; i++) {
        if(i % 2 == 0)
            cout <<  i << "\n"; 
    }

    return 0; 
}
int main() {
    
    int num, sum;
    num = 1;
    sum = 0;
    cout << "テストの点数を入力してください。(0で終了)\n";

    while(num){
        cin >>  num;
        sum += num; 
    }

    cout << "テストの合計点は" << sum << "点です。\n";

    return 0; 
}
int main() {
    
   for(int i=1; i<6; i++) {
        for(int j=0; j<i; j++){
            cout << "*";
        }
        cout << "\n";
   }

    return 0; 
}

入れ子の場合でも、iを使用してfor文を回すことで、
for(int j=1; j<6; j++) で入れ子にすると、以下のようになってしまう。 ***** ***** ***** ***** *****

[C++/C] 条件式

### if文

int main() {
    
    int res;

    cout << "整数を入力してください。\n";

    cin >> res;

    if(res == 1)
        cout << "1が入力されました。\n";;

    cout << "処理を終了します。\n";

    return 0; 
}

if else

int main() {
    
    int res;

    cout << "整数を入力してください。\n";
    cin >> res;

    if(res == 1) {
        cout << "1が入力されました。\n";
    } else {
        cout << "1以外が入力されました。\n";
    }
    
    cout << "処理を終了します。\n";

    return 0; 
}

else if

int main() {
    
    int res;

    cout << "整数を入力してください。\n";
    cin >> res;

    if(res == 1) {
        cout << "1が入力されました。\n";
    } else if(res == 2) {
        cout << "2が入力されました。\n";
    } else {
        cout << "1か2を入力してください。\n";
    }
    
    cout << "処理を終了します。\n";

    return 0; 
}

### switch文

int main() {
    
    int res;

    cout << "整数を入力してください。\n";
    cin >> res;

    switch(res) {
        case 1:
            cout << "1が入力されました。\n";
            break;
        case 2:
            cout << "2が入力されました。\n";
            break;
        default:
            cout << "1か2を入力してください。\n";
            break;
    }

    return 0; 
}

### 複雑な条件判断

int main() {
    
    char res;

    cout << "あなたは男性ですか?\n";
    cout << "YかNを入力してください。\n";

    cin >> res;

    if (res == 'Y' || res == 'y') {
        cout << "あなたは男性ですね。\n";
    } else if (res == 'N' || res == 'n') {
        cout << "あなたは女性ですね。\n";
    } else {
        cout << "YかNを入力してください。\n";
    }

    return 0; 
}

### 条件演算子

int main() {
    
    int res;
    char ans;

    cout << "何番目のコースにしますか?\n";
    cout << "整数を入力してください。\n";

    cin >> res;

    if (res == 1)
        ans = 'A';
    else
        ans = 'B';

    cout << ans << "コースを選択しました。\n";

    return 0; 
}
int main() {
    
    int res;
    char ans;

    cout << "何番目のコースにしますか?\n";
    cout << "整数を入力してください。\n";

    cin >> res;

    ans = (res == 1) ? 'A' : 'B';

    cout << ans << "コースを選択しました。\n";

    return 0; 
}

ans = (res == 1) ? ‘A’ : ‘B’; の書き方

### practice

int main() {
    
    int num;

    cout << "整数を入力してください。\n";

    cin >> num;

    if (num % 2 == 0) {
        cout << num << "は偶数です。\n";
    } else if(num % 2 == 1) {
        cout << num << "は奇数です。\n";
    } else {
        cout << "整数を入力してください。\n";
    }

    return 0; 
}
#include <iostream>
using namespace std;

int main() {
    
    int num1, num2;

    cout << "2つの整数を入力してください。\n";

    cin >> num1;
    cin >> num2;

    if (num1 == num2) {
        cout << "2つの数は同じ値です。\n";
    } else if(num1 > num2) {
        cout << num2 << "より" << num1 << "の方が大きい値です。\n";
    } else {
        cout << num1 << "より" << num2 << "の方が大きい値です。\n";
    }

    return 0; 
}
int main() {
    
    int result;

    cout << "成績を入力してください。\n";

    cin >> result;

    switch(result){
        case 1:
            cout << "成績は1です。もっと頑張りましょう。\n";
            break;
        case 2:
            cout << "成績は2です。もう少し頑張りましょう。\n";
            break;
        case 3:
            cout << "成績は3です。さらに上を目指しましょう。\n";
            break;
        case 4:
            cout << "成績は4です。大変良くできました。\n";
            break;
        case 5:
            cout << "成績は5です。大変優秀です。\n";
            break;
        default:
            cout << "成績を入力してください。\n";
            break;
    }

    return 0; 
}

if(res % 2)は 0でなければ奇数と判断される
cin >> num1 >> num2とも書ける

[C++/C] 演算子の種類2

sizeof演算子

int main() {
    
    int a = 1;
    int b = 0;

    cout << "short int型のサイズは" << sizeof(short int) << "バイトです。\n";
    cout << "int型のサイズは" << sizeof(int) << "バイトです。\n";
    cout << "long int型のサイズは" << sizeof(long int) << "バイトです。\n";
    cout << "float型のサイズは" << sizeof(float) << "バイトです。\n";
    cout << "double型のサイズは" << sizeof(double) << "バイトです。\n";
    cout << "long double型のサイズは" << sizeof(long double) << "バイトです。\n";
    cout << "変数aのサイズは" << sizeof(a) << "バイトです。\n";
    cout << "式a+bのサイズは" << sizeof(a+b) << "バイトです。\n";
    return 0; 
}

$ g++ -o sample sample.cpp && ./sample
short int型のサイズは2バイトです。
int型のサイズは4バイトです。
long int型のサイズは8バイトです。
float型のサイズは4バイトです。
double型のサイズは8バイトです。
long double型のサイズは16バイトです。
変数aのサイズは4バイトです。
式a+bのサイズは4バイトです。

### シフト演算子
数値を2進数で表した場合の桁を左または右に指定数だけずらす演算です。

### 型変換

int main() {
    
    int inum = 160;
    double dnum;

    cout << "身長は" << inum << "センチです。\n";
    cout << "double型の変数に代入します。\n";

    dnum = inum;

    cout << "身長は" << dnum << "センチです。\n";
    return 0; 
}
int main() {
    
    double dnum = 160.5;
    int inum;

    cout << "身長は" << dnum << "センチです。\n";
    cout << "int型の変数に代入します。\n";

    inum = dnum;

    cout << "身長は" << inum << "センチです。\n";
    return 0; 
}

$ g++ -o sample sample.cpp && ./sample
身長は160.5センチです。
int型の変数に代入します。
身長は160センチです。

### キャスト演算子
型を変換することを明示する
dnum = (double)inum;

### 異なる型同士で演算する

int main() {
    
    int d = 2;
    const double pi = 3.14;

    cout << "直径が" << d << "センチの円の\n";
    cout << "円周は" << d*pi << "センチです。\n";

    return 0; 
}

$ g++ -o sample sample.cpp && ./sample
直径が2センチの円の
円周は6.28センチです。

double とintをかけると doubleになる。

### 同じ型同士の演算

int main() {
    
    int num1 = 5;
    int num2 = 4;
    double div;

    div = num1 / num2;

    cout << "5/4は" << div << "です。\n";

    return 0; 
}

int と intの計算のため、回答は1で出力される。(double)num1/(double)num2とキャストした場合は1.25で出力される。

### practice

int main() {
    

    cout << "0-4は" << 0-4 << "です。\n";
    cout << "3.14x2は" << 3.14*2 << "です。\n";
    cout << "5/3は" << 5/3 << "です。\n";
    cout << "30/7の余りは" << 30%7 << "です。\n";
    cout << "(7*32)/5は" << (7*32)/5 << "です。\n";

    return 0; 
}

三角形の面積

int main() {
    
    double height, base;

    cout << "三角形の高さを入力してください。\n";
    cin >> height;

    cout << "三角形の底辺を入力してください。\n";
    cin >> base;

    cout << "三角形の面積は" << height*base/2 << "です。\n";

    return 0; 
}

$ g++ -o sample sample.cpp && ./sample
三角形の高さを入力してください。
3
三角形の底辺を入力してください。
5
三角形の面積は7.5です。

#include <iostream>
using namespace std;

int main() {
    
    int num1, num2, num3, num4, num5;

    cout << "科目1の点数を入力してください。\n";
    cin >> num1;

    cout << "科目2の点数を入力してください。\n";
    cin >> num2;

    cout << "科目3の点数を入力してください。\n";
    cin >> num3;

    cout << "科目4の点数を入力してください。\n";
    cin >> num4;

    cout << "科目5の点数を入力してください。\n";
    cin >> num5;

    cout << "5科目の合計点は" << num1+num2+num3+num3+num4+num5 << "です。\n";
    cout << "5科目の平均点は" << (num1+num2+num3+num3+num4+num5)/5 << "です。\n";

    return 0; 
}

合計値の場合は、int sum=0, num=0と宣言した上で、
cin >> num;
sum += num;とする方がスマート

[C++/C]式と演算子

int main() {
    
    cout << "1+2=" << 1+2 << "です。\n"; 
    cout << "3+4=" << 3*4 << "です。\n";
    return 0; 
}
int main() {
    
    int num1, num2;

    cout << "整数1を入力してください。\n";
    cin >> num1;

    cout << "整数2を入力してください。\n";
    cin >> num2;

    cout << "結果は" << num1 + num2 << "です。\n";
    return 0; 
}

演算子の種類
+, -, *, /, %, +, -, ~, &, |, ^, <<, >>, ++, –, >, >=, < 前後のインクレメント b = ++a; は代入前なので1となる。 代入演算子のバリエーション +=, -=, *=, /=, %=, &=, ^=, |=, <<=, >>=

int main() {
    
    int sum = 0;
    int num = 0;

    cout << "1番目の整数を入力してください。\n";
    cin >> num;
    sum += num;

    cout << "2番目の整数を入力してください。\n";
    cin >> num;
    sum += num;

    cout << "3番目の整数を入力してください。\n";
    cin >> num;
    sum += num;

    cout << "合計値は" << sum << "です。\n";
    return 0; 
}

[C++/C] 型, 変数, キーボードからの入力, 定数

基本型
bool, char, unsigned char(符号なし), short int, unsigned short int, int, unsigned int, long int, unsigned long int, float, double, long double

bitとbytes
2進数の1桁分をbitと呼ぶ
00101110

2進数の8桁の数値はbyteと呼ぶ

### 変数の利用

#include <iostream>
using namespace std;

int main() {
    int num;
    num = 3;

    cout << "変数numの値は" << num << "です。\n";

    return 0;
}

変数の値を変更

int main() {
    int num = 3;
    cout << "変数numの値は" << num << "です。\n";

    num = 5;

    cout << "新しい変数numの値は" << num << "です。\n";

    return 0;
}

他の変数の値を代入

int main() {
    int num1, num2;
    num1 = 3;

    cout << "変数num1の値は" << num1 << "です。\n";

    num2 = num1;

    cout << "変数num2の値は" << num2 << "です。\n";

    return 0;
}

値の代入と型変換

int main() {
    int num1;
    double num2;

    num1 = 3.14;
    num2 = 3.14;

    cout << "変数num1の値は" << num1 << "です。\n";
    cout << "変数num2の値は" << num2 << "です。\n";

    return 0;
}

$ g++ -o sample sample.cpp && ./sample
変数num1の値は3です。
変数num2の値は3.14です。
// 小数点以下は切り捨てられる

キーボードからの入力
=> cin >> 変数; と記載する

int main() {
    int num = 0;

    cout << "整数を入力してください。\n";

    cin >> num;

    cout << num << "が入力されました。\n";

    return 0;
}

2つ以上の数値の入力

int main() {
    int num1, num2;

    cout << "整数を2つ入力してください。\n";

    cin >> num1 >> num2;

    cout << "最初に" << num1 << "が入力されました。\n";
    cout << "次に" << num2 << "が入力されました。\n";

    return 0;
}

定数はconstを指定する
初期化によって変数を変更できないようにする

int main() {
    const double pi = 3.1415;

    cout << "円周率の値は" << pi << "です。\n";

    return 0;
}

practice 1

int main() {
    double pi;

    cout << "円周率の値は幾つですか?\n";

    cin >> pi;

    cout << "円周率の値は" << pi << "です。\n";

    return 0;
}

practice 2

int main() {
    char str;

    cout << "アルファベットの最初の文字は何ですか?\n";

    cin >> str;

    cout << "アルファベットの最初の文字は" << str << "です。\n";

    return 0;
}

practice 3

int main() {
    double height, weight;

    cout << "身長と体重を入力してください。\n";

    cin >> height >> weight;

    cout << "身長は" << height << "です。\n";
    cout << "体重は" << weight << "です。\n";

    return 0;
}

c++では文字列の変数名はstrよりもchの方が型との違いがなく表現としては望ましそうです。