代码应该怎么改,才能实现每道题最多三次机会

连续做10道题,通过计算机随机产生两个1~10之间的加数给学生出一道加法运算题,如果输入答案正确,则显示“Right!”,否则显示“Not correct!”,每道题最多给三次机会。10道题做完后,按每题10分统计总得分,然后打印出总分和做错的题数。

img

img


#include <time.h>
#include <stdlib.h>
#include <stdio.h>

int main() {
    int a, b, answer, sum = 0, fault = 0;
    srand(time(NULL)); // 只需要在程序开始时调用一次即可,不需要每次循环都调用
    
    for (int i = 1; i <= 10; i++) {
        a = rand() % 10 + 1;
        b = rand() % 10 + 1;
        int try_times = 3;
        while (try_times--) {
            printf("%d + %d = ", a, b);
            scanf("%d", &answer);
            if (answer == a + b) {
                printf("Right!\n");
                sum += 10;
                break;
            } else {
                printf("Not correct! Please try again.\n");
            }
        }
        if (try_times < 0) {
            fault++;
        }
    }
    
    printf("总分:%d\n错误题数:%d\n", sum, fault);
    return 0;
}

基于new bing和自己的理解进行修改回答:

img


#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <stdbool.h>

#define MAX_QUESTIONS 10 // 最大题目数
#define MAX_TRIES 3 // 每题最大尝试次数
#define MAX_SCORE 10 // 每题最大分数

int main() {
  int score = 0; // 总分
  int wrong = 0; // 做错的题数
  srand(time(NULL)); // 设置随机数种子
  // 循环出题
  for (int i = 0; i < MAX_QUESTIONS; i++) {
    // 随机生成两个1~10之间的加数
    int a = rand() % 10 + 1;
    int b = rand() % 10 + 1;
    int answer = a + b; // 正确答案
    int input; // 用户输入
    bool correct = false; // 是否回答正确
    printf("Question %d: %d + %d = ?\n", i + 1, a, b); // 打印题目
    // 循环检查答案,最多三次机会
    for (int j = 0; j < MAX_TRIES; j++) {
      printf("Enter your answer: "); // 提示输入答案
      scanf("%d", &input); // 获取用户输入
      if (input == answer) { // 如果答案正确
        printf("Right!\n"); // 显示正确信息
        correct = true; // 标记为正确
        break; // 跳出循环
      } else { // 如果答案错误
        printf("Not correct!\n"); // 显示错误信息
      }
    }
    if (correct) { // 如果回答正确
      score += MAX_SCORE; // 增加总分
    } else { // 如果回答错误
      wrong++; // 增加做错的题数
    }
  }
  printf("Your total score is %d out of %d.\n", score, MAX_QUESTIONS * MAX_SCORE); // 打印总分
  printf("You got %d questions wrong.\n", wrong); // 打印做错的题数
  return 0;
}

该回答引用ChatGPT

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main() {
    int score = 0; // 总得分
    int wrong = 0; // 做错的题数
    srand(time(NULL)); // 初始化随机数种子

    for (int i = 1; i <= 10; i++) {
        int num1 = rand() % 10 + 1; // 生成1~10之间的随机数
        int num2 = rand() % 10 + 1;
        int answer; // 存储学生输入的答案
        int chance = 3; // 剩余机会次数

        printf("Question %d: %d + %d = ", i, num1, num2);

        while (chance > 0) {
            scanf("%d", &answer);
            if (answer == num1 + num2) {
                printf("Right!\n");
                score += 10; // 回答正确,加10break;
            } else {
                printf("Not correct! ");
                chance--;
                if (chance > 0) {
                    printf("You have %d chance(s) left. Please try again: ", chance);
                } else {
                    printf("The correct answer is %d.\n", num1 + num2);
                    wrong++; // 回答错误,做错的题数加1
                }
            }
        }
    }

    printf("Total score: %d\n", score);
    printf("Number of wrong answers: %d\n", wrong);

    return 0;
}
不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:
    import random
    
    score = 0 # 计分板,初始得分为0
    mistake_count = 0 # 错误题目数量
    
    for i in range(10): # 循环10次
        num1 = random.randint(1, 10) # 生成第一个加数
        num2 = random.randint(1, 10) # 生成第二个加数
        answer = num1 + num2 # 生成正确答案
        print("第" + str(i+1) + "题:") # 输出题目编号
        for j in range(3): # 每题最多尝试3次
            user_answer = int(input(str(num1) + " + " + str(num2) + " = ")) # 获取用户输入
            if user_answer == answer: # 如果回答正确
                print("Right!")
                score += 10 # 增加得分
                break # 跳出本题循环
            else: # 如果回答错误
                print("Not correct!")
                mistake_count += 1 # 增加错误题目数量
        print() # 输出空行
    
    # 输出总得分和错误题目数量
    print("总得分为:" + str(score))
    print("错误题目数量为:" + str(mistake_count))
    

    解释:

    1. 我们使用 random 模块生成 1 至 10 之间的两个随机数作为加数,计算正确答案 answer
    2. 使用 for 循环 10 次,每次循环生成一道加法题目并让用户回答,最多尝试 3 次。
    3. 如果用户回答正确,则输出 "Right!" 并增加得分 score,跳出本题循环;如果用户回答错误,则输出 "Not correct!" 并增加错误题目数量 mistake_count
    4. 循环结束后输出总得分和错误题目数量。

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^