C语言试编写一个程序来帮助小学生学习四则运算。参考本章介绍的猜数游戏(例6.7、例6.11和例6.12)程序,按下列任务要求以循序渐进的方式编程。 任务1:程序首先显示菜单,选择做加减乘除哪一种运算。根据用户选择的运算类型,随机产生两个1~10之间的正整数,在屏幕上打印出问题,例如: 6 * 7 = 然后让学生输入答案。程序检查学生输入的答案是否正确。若学生回答正确,则显示“Right!”,否则显示“Wrong!”。 任务2:10道题全部做完后,按每题10分统计并输出总分,同时为了记录学生能力提高的过程,再输出学生的回答正确率,根据准确率输出不同的评价。 任务3:在任务2的基础上,为使学生通过反复练习熟练掌握所学内容,在学生完成10道运算题后,若回答正确率低于75%,则重新做10道题,直到回答正确率高于75%时才退出程序。 任务4:错题本功能记录做错的题目,选择该选项可以重做之前做过的错题。(最多记录20道)。
时间: 2023-06-14 20:05:26 浏览: 354
以下是一个参考代码,实现了任务1和任务2的要求:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
int choice;
int score = 0, total = 0;
int correct = 0, incorrect = 0;
int wrong_list[20], wrong_count = 0;
srand(time(NULL)); // 设置随机数种子
printf("欢迎使用四则运算学习程序!\n");
do {
printf("\n请选择要做的运算类型:\n");
printf("1. 加法\n");
printf("2. 减法\n");
printf("3. 乘法\n");
printf("4. 除法\n");
printf("0. 退出程序\n");
printf("请选择:");
scanf("%d", &choice);
if (choice < 0 || choice > 4) {
printf("输入错误,请重新选择!\n");
continue;
}
if (choice == 0) {
break;
}
printf("\n开始做题(10道):\n");
for (int i = 1; i <= 10; i++) {
int a = rand() % 10 + 1;
int b = rand() % 10 + 1;
char op;
int result, answer;
switch (choice) {
case 1:
op = '+';
result = a + b;
break;
case 2:
op = '-';
result = a - b;
break;
case 3:
op = '*';
result = a * b;
break;
case 4:
op = '/';
result = a / b;
a = result * b; // 重新计算a,保证a是b的倍数
break;
}
printf("%d %c %d = ", a, op, b);
scanf("%d", &answer);
if (answer == result) {
printf("Right!\n");
score += 10;
correct++;
} else {
printf("Wrong!\n");
incorrect++;
if (wrong_count < 20) {
wrong_list[wrong_count] = i;
wrong_count++;
}
}
total++;
}
printf("\n本次得分:%d\n", score);
printf("总分:%d,总题数:%d,正确:%d,错误:%d\n", score, total, correct, incorrect);
printf("准确率:%.2f%%\n", (float) correct / total * 100);
if (correct == 0) {
printf("评价:你需要更多的练习!\n");
} else if ((float) correct / total < 0.5) {
printf("评价:你需要加强练习!\n");
} else if ((float) correct / total < 0.75) {
printf("评价:你已经有一定的水平了!\n");
} else {
printf("评价:你已经非常优秀了!\n");
}
} while (1);
printf("\n感谢使用四则运算学习程序!\n");
return 0;
}
```
以上代码实现了任务1和任务2的要求,用户可以选择运算类型,并且程序会随机生成10道题目,让用户回答,并且统计得分、总分、正确率等信息。
接下来我们实现任务3和任务4的要求。
任务3的要求是在学生完成10道运算题后,若回答正确率低于75%,则重新做10道题,直到回答正确率高于75%时才退出程序。我们可以在每次做完10道题后,检查正确率是否低于75%,如果是,则回到选择运算类型的菜单,让用户重新选择,否则继续做题。为了方便实现,我们可以把做题的部分封装成一个函数,每次做题时调用该函数:
```c
// 做10道题,返回正确率
float do_10_questions(int choice) {
int score = 0, total = 0;
int correct = 0, incorrect = 0;
srand(time(NULL)); // 设置随机数种子
for (int i = 1; i <= 10; i++) {
int a = rand() % 10 + 1;
int b = rand() % 10 + 1;
char op;
int result, answer;
switch (choice) {
case 1:
op = '+';
result = a + b;
break;
case 2:
op = '-';
result = a - b;
break;
case 3:
op = '*';
result = a * b;
break;
case 4:
op = '/';
result = a / b;
a = result * b; // 重新计算a,保证a是b的倍数
break;
}
printf("%d %c %d = ", a, op, b);
scanf("%d", &answer);
if (answer == result) {
printf("Right!\n");
score += 10;
correct++;
} else {
printf("Wrong!\n");
incorrect++;
}
total++;
}
printf("\n本次得分:%d\n", score);
printf("总分:%d,总题数:%d,正确:%d,错误:%d\n", score, total, correct, incorrect);
printf("准确率:%.2f%%\n", (float) correct / total * 100);
if (correct == 0) {
printf("评价:你需要更多的练习!\n");
} else if ((float) correct / total < 0.5) {
printf("评价:你需要加强练习!\n");
} else if ((float) correct / total < 0.75) {
printf("评价:你已经有一定的水平了!\n");
} else {
printf("评价:你已经非常优秀了!\n");
}
return (float) correct / total;
}
int main() {
int choice;
int score = 0, total = 0;
int correct = 0, incorrect = 0;
int wrong_list[20], wrong_count = 0;
srand(time(NULL)); // 设置随机数种子
printf("欢迎使用四则运算学习程序!\n");
do {
printf("\n请选择要做的运算类型:\n");
printf("1. 加法\n");
printf("2. 减法\n");
printf("3. 乘法\n");
printf("4. 除法\n");
printf("0. 退出程序\n");
printf("请选择:");
scanf("%d", &choice);
if (choice < 0 || choice > 4) {
printf("输入错误,请重新选择!\n");
continue;
}
if (choice == 0) {
break;
}
printf("\n开始做题:\n");
float accuracy;
do {
accuracy = do_10_questions(choice);
} while (accuracy < 0.75);
} while (1);
printf("\n感谢使用四则运算学习程序!\n");
return 0;
}
```
以上代码实现了任务3的要求,每次做完10道题后,检查正确率是否低于75%,如果是,则回到选择运算类型的菜单,让用户重新选择,否则继续做题。
任务4的要求是记录做错的题目,并且提供错误题目的重做功能。我们可以在程序中增加一个数组`wrong_list`来记录做错的题目,每次做错题目时,把题目的编号(从1开始)存入该数组中。当用户选择重做错题本时,先输出错题,然后让用户回答这些题目。
```c
int main() {
int choice;
int score = 0, total = 0;
int correct = 0, incorrect = 0;
int wrong_list[20], wrong_count = 0;
srand(time(NULL)); // 设置随机数种子
printf("欢迎使用四则运算学习程序!\n");
do {
printf("\n请选择要做的运算类型:\n");
printf("1. 加法\n");
printf("2. 减法\n");
printf("3. 乘法\n");
printf("4. 除法\n");
printf("5. 错题本\n");
printf("0. 退出程序\n");
printf("请选择:");
scanf("%d", &choice);
if (choice < 0 || choice > 5) {
printf("输入错误,请重新选择!\n");
continue;
}
if (choice == 0) {
break;
}
if (choice == 5) {
printf("\n错题本:\n");
if (wrong_count == 0) {
printf("没有错题!\n");
continue;
}
for (int i = 0; i < wrong_count; i++) {
int index = wrong_list[i];
int a = rand() % 10 + 1;
int b = rand() % 10 + 1;
char op;
int result, answer;
switch (choice) {
case 1:
op = '+';
result = a + b;
break;
case 2:
op = '-';
result = a - b;
break;
case 3:
op = '*';
result = a * b;
break;
case 4:
op = '/';
result = a / b;
a = result * b; // 重新计算a,保证a是b的倍数
break;
}
printf("%d. %d %c %d = ", index, a, op, b);
scanf("%d", &answer);
if (answer == result) {
printf("Right!\n");
} else {
printf("Wrong!\n");
}
}
continue;
}
printf("\n开始做题:\n");
float accuracy;
do {
accuracy = do_10_questions(choice);
} while (accuracy < 0.75);
} while (1);
printf("\n感谢使用四则运算学习程序!\n");
return 0;
}
```
以上代码增加了选择菜单中的第5项,即错误题目重做功能。当用户选择该项时,程序会输出错题列表,并且让用户回答这些题目。注意,为了方便起见,我们没有限制重做次数,用户可以重复回答错题,直到正确为止。
完整代码如下:
阅读全文