/
hhh.cpp
142 lines (127 loc) · 3.18 KB
/
hhh.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <iostream.h>
//主要函数:
char getSignal(); //获取随机运算符函数
int random(double,double); //获取随机数函数
int getResult(int,int,int,char,char); //结果计算函数
int takeTest(); //题目生成函数
//主函数
void main()
{
int n,a,right=0;
double percent;//正确率
float score;//分数
printf("Please enter the number of the test:");//输入你要生成的题目数量
scanf("%d",&n);
for(int i=0;i<n;i++)
{
a=takeTest();
right=right+a;
}
printf("You finish all test!\n");
printf("The number of right:%d\n",right);
percent=((double)right*100.00)/(double)n;
score=percent;
printf("The percent of right:%0.2f %%\n",percent);
printf("The score of right:%0.2f %\n",score);
}
//获取随机运算符函数:
char getSignal()
{
char signal[4]={'+','-','*','/'};
return signal[rand()%4];
}
//获取随机数函数:
int random(double start, double end)
{
return (int)(start+(end-start)*rand()/(RAND_MAX+ 1.0));
}
//结果计算函数:
int getResult(int num1,int num2,int num3,char signal,char signal2)
{
int res;
switch(signal)
{
case '+': //第一个运算符为加号的运算
switch(signal2){
case '+':
res=num1+num2+num3;break;
case '-':
res=num1+num2-num3;break;
case '*':
res=num1+num2*num3;break;
case '/':
res=num1+num2/num3;break;
}
break;
case '-': //第一个运算符为减号的运算
switch(signal2){
case '+':
res=num1-num2+num3;break;
case '-':
res=num1-num2-num3;break;
case '*':
res=num1-num2*num3;break;
case '/':
res=num1-num2/num3;break;
}
break;
case '*': //第一个运算符为乘号的运算
switch(signal2){
case '+':
res=num1*num2+num3;break;
case '-':
res=num1*num2-num3;break;
case '*':
res=num1*num2*num3;break;
case '/':
res=num1*num2/num3;break;
}
break;
case '/': //第一个运算符为除号的运算
switch(signal2){
case '+':
res=num1/num2+num3;break;
case '-':
res=num1/num2-num3;break;
case '*':
res=num1/num2*num3;break;
case '/':
res=num1/num2/num3;break;
}
break;
default:
printf("运算符错误!\n");
}
return res;
}
//题目生成函数:
int takeTest()
{
int get;
int num1,num2,num3,a;
char signal,signal2;
srand((unsigned)time(NULL));//随机数种子
signal2=getSignal();//两个运算符的调用函数
signal=getSignal();
num1=random(1,100);
num2=random(1,100);
num3=random(1,100);
printf("%d%c%d%c%d=",num1,signal,num2,signal2,num3);
scanf("%d",&get);
fflush(stdin); //清空输入缓冲区
if(getResult(num1,num2,num3,signal,signal2)==get)//运算结果和自己输入的结果作比较
{
printf("You're right!\n");
a=1;
}
else
{
printf("It's wrong!\n");
printf("The right answer is: %d\n",getResult(num1,num2,num3,signal,signal2));
a=0;
}
return a;
}