為小學生自動生成四則運算練習題,看似簡單,實則涉及隨機數種子控制、題目去重、參數化配置、輸出格式化等工程問題。本文梳理版本 2 的設計思路,作為後續實現的藍圖。
srand(time(NULL)); // 程序啟動一次,保證每次運行序列不同
若需可復現(如教師發放固定試卷),可添加種子參數 `srand(seed)`。
// 運算符隨機選擇
int op = rand() % op_count; // 0:+, 1:-, 2:*, 3:/
// 減法:被減數 >= 減數(不產生負數)
if (op == 1) { if (a < b) swap(a,b); }
// 除法:被除數 % 除數 == 0(整除)且除數 != 0
if (op == 3) {
do { a = rand()%range; b = rand()%range+1; }
while (a % b != 0);
}
// 主程序
int main() {
Config cfg = parse_user_input(); // 交互收集參數
Question *qs = generate_questions(cfg); // 核心生成
format_output(qs, cfg); // 格式化輸出
free_questions(qs);
}
// 核心結構
typedef struct { int a, b; char op; } Question;
typedef struct {
int count; int min_val, max_val;
bool allow_negative; bool unique;
char ops[4]; int op_count;
int format; // 0:列表, 1:網格
int rows, cols;
} Config;