#include <stdio.h>

int x;

void mondai1(int b){
    x = b;
}

void mondai2(void){
    static int c = 10;
    x = c;
    c++;
}

int mondai3(int d){
    x++;
    d++;
    return d;
}

int main(void) {
    printf("x = %d [GS: 3行目で宣言されたグローバル変数なので0で初期化]\n", x);

    x = 101;
    printf("x = %d [GS: 24行目で101を代入]\n", x);

    mondai1(102);
    printf("x = %d [GS: 27行目mondai1で引数102をグローバル変数xに代入]\n", x);

    mondai2();
    mondai2();
    mondai2();
    printf("x = %d [GS:  30～32行目静的変数cが呼び出しごとに増加し、3回目に12を代入]\n", x);

    for(int i = 103; i < 104; i++){
        int x = i;
        printf("x = %d [LA: 36行目でローカル変数xをiの値103で初期化]\n", x);

        x = mondai3(i);
        printf("x = %d [LA: 39行目でmondai3でdを103から17行目で104に増加させ、その戻り値を代入]\n", x);
    }

    printf("x = %d [GS: 39行目でmondai3内の16行目のx++でグローバル変数xが12から13に増加]\n", x);

    return 0;
}
 