十以内加减乘除运算自测小程序
时间: 2023-09-17 22:12:50 浏览: 101
好的,请看下面的代码实现:
```
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int login(); // 登录函数
int generate_question(); // 生成问题函数
int check_answer(); // 校验答案函数
void view_answer(); // 查看答案函数
void retry_wrong(); // 重做错题函数
int main()
{
int is_login = login(); // 登录
if (is_login == 0) { // 登录失败
printf("登录失败,请重试!\n");
return 1;
}
int total_question = 10; // 总题数
int correct_count = 0; // 正确数量
for (int i = 1; i <= total_question; i++) {
printf("\n第%d题:", i);
int is_correct = generate_question(); // 生成问题并判断答案
if (is_correct == 1) { // 回答正确
correct_count++;
}
}
printf("\n您的得分是:%d分\n", correct_count * 10);
view_answer(); // 查看答案
retry_wrong(); // 重做错题
return 0;
}
int login()
{
char username[20]; // 用户名
char password[20]; // 密码
printf("欢迎使用十以内加减乘除运算自测小程序!\n");
printf("请输入您的用户名:");
scanf("%s", username);
printf("请输入您的密码:");
scanf("%s", password);
// 比较用户名和密码是否正确
if (strcmp(username, "admin") == 0 && strcmp(password, "123456") == 0) {
printf("登录成功!\n");
return 1; // 登录成功
} else {
return 0; // 登录失败
}
}
int generate_question()
{
srand(time(NULL)); // 生成随机数种子
int num1 = rand() % 10 + 1;
int num2 = rand() % 10 + 1;
int operator = rand() % 4; // 0-加法,1-减法,2-乘法,3-除法
int correct_answer; // 正确答案
char operator_char; // 运算符
// 根据运算符计算正确答案
switch (operator) {
case 0:
correct_answer = num1 + num2;
operator_char = '+';
break;
case 1:
correct_answer = num1 - num2;
operator_char = '-';
break;
case 2:
correct_answer = num1 * num2;
operator_char = '*';
break;
case 3:
correct_answer = num1 / num2;
operator_char = '/';
break;
}
// 输出问题
printf("%d %c %d = ", num1, operator_char, num2);
return check_answer(correct_answer); // 校验答案并返回是否正确
}
int check_answer(int correct_answer)
{
int user_answer; // 用户答案
scanf("%d", &user_answer);
if (user_answer == correct_answer) { // 回答正确
printf("回答正确!\n");
return 1;
} else { // 回答错误
printf("回答错误!正确答案是%d\n", correct_answer);
return 0;
}
}
void view_answer()
{
printf("\n正确答案如下:\n");
for (int i = 1; i <= 10; i++) {
int num1 = rand() % 10 + 1;
int num2 = rand() % 10 + 1;
int operator = rand() % 4; // 0-加法,1-减法,2-乘法,3-除法
int correct_answer; // 正确答案
char operator_char; // 运算符
// 根据运算符计算正确答案
switch (operator) {
case 0:
correct_answer = num1 + num2;
operator_char = '+';
break;
case 1:
correct_answer = num1 - num2;
operator_char = '-';
break;
case 2:
correct_answer = num1 * num2;
operator_char = '*';
break;
case 3:
correct_answer = num1 / num2;
operator_char = '/';
break;
}
printf("%d、%d %c %d = %d\n", i, num1, operator_char, num2, correct_answer);
}
}
void retry_wrong()
{
printf("\n是否重新做错题?(Y/N):");
char choice;
scanf(" %c", &choice);
if (choice == 'Y' || choice == 'y') {
printf("\n开始重新做错题:\n");
int retry_count = 0; // 重做次数
int wrong_list[10] = {-1}; // 错误题目列表
int wrong_count = 0; // 错误数量
while (wrong_count < 10) {
int question_index = rand() % 10 + 1; // 随机选择一道题目
int is_correct = generate_question(); // 生成问题并判断答案
if (is_correct == 0) { // 回答错误
int is_exist = 0; // 是否已经加入错误列表
for (int i = 0; i < wrong_count; i++) {
if (wrong_list[i] == question_index) {
is_exist = 1;
break;
}
}
if (!is_exist) { // 如果错误列表中没有该题目,则加入
wrong_list[wrong_count] = question_index;
wrong_count++;
}
}
retry_count++; // 重做次数+1
if (wrong_count == 10) { // 如果错误数量达到10,则退出循环
break;
}
}
printf("\n重做完毕,您一共重做了%d次,得分为:%d分\n", retry_count, (10 - wrong_count) * 10);
}
}
```
以上代码实现了一个简单的十以内加减乘除运算自测小程序,包含登录、生成问题、校验答案、查看答案、重做错题等功能。用户可以根据提示输入用户名和密码登录,然后开始答题,最后得到得分和正确答案。用户还可以选择查看正确答案和重做错题。如果用户回答错误,该题会被加入错误列表,用户可以在重做错题时重新回答这些错误题目。
阅读全文