// ===== CodeLab: C 语言小游戏②:数学速算问答 =====
// 来源: https://aoerliang.dpdns.org/articles/game-c-mathquiz
// 以下代码片段按文章出现顺序拼接, 共 6 段

// ----- 片段 1 (c) -----
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void) {
    const int TOTAL = 10;      /* 一共 10 题 */
    int i, score = 0;

    srand((unsigned)time(NULL));

    for (i = 1; i <= TOTAL; i++) {
        /* 每轮在这里生成题目并判分 */
    }
    return 0;
}

// ----- 片段 2 (c) -----
int op = rand() % 4;         /* 0 加 1 减 2 乘 3 除 */
int a = rand() % 20 + 1;     /* 操作数: 1~20 */
int b = rand() % 20 + 1;
int answer;

switch (op) {
case 0: answer = a + b; printf("第 %d 题: %d + %d = ", i, a, b); break;
case 1: answer = a - b; printf("第 %d 题: %d - %d = ", i, a, b); break;
case 2: answer = a * b; printf("第 %d 题: %d × %d = ", i, a, b); break;
case 3: answer = a / b; printf("第 %d 题: %d ÷ %d = ", i, a, b); break;
}

// ----- 片段 3 (c) -----
if (op == 3) {                  /* 除法: 保证能整除 */
    b = rand() % 9 + 2;         /* 除数取 2~10 */
    a = b * (rand() % 9 + 1);
    answer = a / b;
} else if (op == 1 && a < b) {
    int t = a; a = b; b = t;    /* 交换, 保证非负 */
    answer = a - b;
}

// ----- 片段 4 (c) -----
int user;
scanf("%d", &user);

if (user == answer) {
    printf("回答正确! +10 分\n");
    score += 10;
} else {
    printf("答错啦, 正确答案是 %d。\n", answer);
}

// ----- 片段 5 (c) -----
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void) {
    int i, a, b, op, answer, user, score = 0;
    const int TOTAL = 10;

    srand((unsigned)time(NULL));
    printf("======== 数学速算问答 ========\n");
    printf("共 %d 题, 每题 10 分, 加油!\n\n", TOTAL);

    for (i = 1; i <= TOTAL; i++) {
        op = rand() % 4;               /* 0 加 1 减 2 乘 3 除 */

        if (op == 3) {                 /* 除法保证整除 */
            b = rand() % 9 + 2;
            a = b * (rand() % 9 + 1);
            answer = a / b;
        } else {
            a = rand() % 20 + 1;
            b = rand() % 20 + 1;
            if (op == 0) {
                answer = a + b;
            } else if (op == 1) {
                if (a < b) { int t = a; a = b; b = t; }
                answer = a - b;
            } else {
                answer = a * b;
            }
        }

        switch (op) {
        case 0: printf("第 %2d 题: %d + %d = ", i, a, b); break;
        case 1: printf("第 %2d 题: %d - %d = ", i, a, b); break;
        case 2: printf("第 %2d 题: %d × %d = ", i, a, b); break;
        case 3: printf("第 %2d 题: %d ÷ %d = ", i, a, b); break;
        }

        scanf("%d", &user);

        if (user == answer) {
            printf("回答正确! +10 分\n");
            score += 10;
        } else {
            printf("答错啦, 正确答案是 %d。\n", answer);
        }
    }

    printf("\n==== 游戏结束 ====\n");
    printf("你的得分: %d / %d\n", score, TOTAL * 10);
    if (score >= 90)      printf("评价: 心算大师!\n");
    else if (score >= 60) printf("评价: 不错, 继续练习!\n");
    else                  printf("评价: 别灰心, 多练几次!\n");
    return 0;
}

// ----- 片段 6 (bash) -----
gcc -o mathquiz mathquiz.c
./mathquiz
