编写加减乘除4个自定义函数add,sub,mul,div,在主函数中调用这4个函数去完成以下功能: (1)随机生成5道四则运算题,题目的类型自加,减,乘,除中任意混合出题(即5道题目中有各种类型的题目),每个题目的2个整数是20以内的随机数,题目显示在屏幕上,由用户输入答案(如下图所示)。 (2)程序判断用户输入的答案是否正确,统计答题的正确率。运行结束时,询问是否继续练习,如果回答“Y”则继续进行练习,如果回答“N”则退出练习。 (3)把每次所做的题目和答题的准确率输出在屏幕上,同时也把每次的运行结果保存到result.txt文本文件中。
时间: 2024-03-03 09:50:04 浏览: 18
好的,我可以帮你编写一个实现这个功能的程序,以下是代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void add(int a, int b);
void sub(int a, int b);
void mul(int a, int b);
void div(int a, int b);
int main() {
int a, b, answer, correct = 0, i;
char operator, choice;
srand(time(0)); // 随机数种子初始化
do {
printf("现在开始进行随机生成的5道四则运算题,每个题目的2个整数是20以内的随机数,题目类型也是随机的:\n");
for(i = 0; i < 5; i++) {
a = rand() % 20 + 1; // 生成1~20的随机数
b = rand() % 20 + 1;
switch(rand() % 4) { // 随机选择运算符
case 0:
operator = '+';
add(a, b);
break;
case 1:
operator = '-';
sub(a, b);
break;
case 2:
operator = '*';
mul(a, b);
break;
case 3:
operator = '/';
div(a, b);
break;
}
scanf("%d", &answer);
if(answer == (int)(eval(a, b, operator) + 0.5)) { // 判断答案是否正确
correct++;
printf("回答正确!\n");
} else {
printf("回答错误!正确答案是%d\n", (int)(eval(a, b, operator) + 0.5));
}
}
printf("本次练习的准确率为%.2f%%\n", (float)correct / 5 * 100); // 计算准确率
FILE *fp;
fp = fopen("result.txt", "a"); // 以追加模式打开文件
fprintf(fp, "本次练习的准确率为%.2f%%\n", (float)correct / 5 * 100); // 将结果写入文件
fclose(fp);
printf("是否继续练习?(Y/N)\n");
scanf(" %c", &choice);
} while(choice == 'Y' || choice == 'y');
return 0;
}
void add(int a, int b) {
printf("%d + %d = ", a, b);
}
void sub(int a, int b) {
printf("%d - %d = ", a, b);
}
void mul(int a, int b) {
printf("%d * %d = ", a, b);
}
void div(int a, int b) {
printf("%d / %d = ", a, b);
}
float eval(int a, int b, char operator) {
switch(operator) {
case '+':
return a + b;
case '-':
return a - b;
case '*':
return a * b;
case '/':
return (float)a / b;
default:
return 0;
}
}
```
这个程序首先会随机生成5道四则运算题,每个题目的2个整数是20以内的随机数,题目类型也是随机的。程序会提示用户输入答案,并根据用户输入的答案判断是否正确,统计答题的正确率。运行结束时,询问是否继续练习,如果回答“Y”则继续进行练习,如果回答“N”则退出练习。每次的运行结果也会保存到result.txt文本文件中。
你可以在编译器中运行这个程序,体验一下它的功能。希望能帮助到你!