四则运算3.0个人
题目要求:
1、实现在线答题;
2、答题结束后,可以判断对错;
3、并将错题的结果保存起来。
设计思路
本次实验运用选择和循环将运算分开简化。首先将所需四则运算中的负数分割出来,运用switch和case进行选择。在生成随机数时运用srand配合rand()生成真随机数,和运算符号。出题和答案则使用if选择和for循环进行这次难点在我看来是在将数据输出上,运用fprintf()函数将所需结果导入到txt格式文件中。
源代码
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <time.h>
4 int main()
5 {
6 FILE *fpt;
7 fpt = fopen("四则运算.txt","w");
8 fprintf(fpt,"四则运算在线答题错题记录\n");
9 int k,n,m,i,s,j,g,h;
10 n=5;
11 float score=0;
12 int a,b;
13 int answers[1000]={0},user_answer[1000]={0};
14 a=0;
15 b=0;
16 printf("\n请输入数字类型(1.正数 2.正负数) -1或其他数字为退出程序: ");
17 scanf("%d",&h);
18 fprintf(fpt,"\n请输入数字类型(1.正数 2.正负数) -1或其他数字为退出程序: %d ",h);
19
20
21 switch(h)
22 {
23 case 1:
24 {
25 printf("请输入题目数(1-1000)");
26 scanf("%d",&k);
27 if (k<1||k>1000)
28 {
29 printf("\n超出允许范围\n");
30 printf("请再次输入题目数\n");
31 scanf("%d",&k);
32 }
33 printf("请选择出题方式:0.加法 1.减法 2.乘法 3.除法 4.随机\n");
34 scanf("%d",&m);
35 if (m<0||m>4)
36 {
37 printf("\n出题方式选择错误\n");
38 printf("请再次输入出题方式前序号\n");
39 scanf("%d",&m);
40 }
41 printf("\n********************开始答题************************\n");
42 fprintf(fpt,"\n********************开始答题************************\n");
43 srand((int)time(0));
44 for (i=0;i<k;i++)
45 {
46 a=rand()%100;
47 b=rand()%100;
48 while(a<-100||a>100||b<-100||b>100)
49 {
50 a=rand()%201-100;
51 b=rand()%201-100;
52 }
53 a=a;
54 b=b;
55 if(m==4)
56 n=rand()%4;
57 if (m==0||n==0)
58 {
59 printf("\n第%d题:%d+%d=",i+1,a,b);
60 fprintf(fpt,"\n第%d题:%d+%d=",i+1,a,b);
61 scanf("%d",&user_answer[i]);
62 answers[i]=a+b;
63 }
64 if (m==1||n==1)
65 {
66 if (a>b)
67 {
68 printf("\n第%d题:%d-%d=",i+1,a,b);
69 fprintf(fpt,"\n第%d题:%d-%d=",i+1,a,b);
70 scanf("%d",&user_answer[i]);
71 answers[i]=a-b;
72 }
73 else
74 {
75 printf("\n第%d题:%d-%d=",i+1,b,a);
76 fprintf(fpt,"\n第%d题:%d-%d=",i+1,b,a);
77 scanf("%d",&user_answer[i]);
78 answers[i]=b-a;
79 }
80 }
81 if (m==2||n==2)
82 {
83 printf("\n第%d题:%d*%d=",i+1,a,b);
84 fprintf(fpt,"\n第%d题:%d*%d=",i+1,a,b);
85 scanf("%d",&user_answer[i]);
86 answers[i]=a*b;
87 }
88 if (m==3||n==3)
89 {
90 s=a*b;
91 while(s<-100||s>100||a==0)
92 {
93 a=rand()%100;
94 b=rand()%100;
95 s=a*b;
96 }
97 printf("\n第%d题:%d/%d=",i+1,s,a);
98 fprintf(fpt,"\n第%d题:%d/%d=",i+1,s,a);
99 scanf("%d",&user_answer[i]);
100 answers[i]=s/a;
101 }
102 }
103 printf("\n答题结果和正确答案:\n");
104 fprintf(fpt,"\n答题结果和正确答案:\n");
105 for (i=0;i<k;i++)
106 {
107 if (user_answer[i]==answers[i])
108 {
109 printf("%d:正确 %d\n",i+1,answers[i]);
110 fprintf(fpt,"%d:正确 %d\n",i+1,answers[i]);
111 score++;
112 }
113 else printf("%d:错误 %d\n",i+1,answers[i]);
114 fprintf(fpt,"%d:错误 %d\n",i+1,answers[i]);
115 }
116 score=100*score/k;
117 printf("\n总得分(百分制):%f\n",score);
118 fprintf(fpt,"\n总得分(百分制):%f\n",score);
119 if (score<60) {printf("很遗憾!你的分数不及格,继续努力\n");
120 fprintf(fpt,"很遗憾!你的分数不及格,继续努力\n");
121 }
122 else
123 {
124 printf("恭喜!你的成绩合格\n");
125 fprintf(fpt,"恭喜!你的成绩合格\n");
126 }
127 printf("*****************************************************\n");
128 fprintf(fpt,"*****************************************************\n");
129 fclose(fpt);
130 printf("继续答题请输入任意数字\n结束请点击右上角关闭程序\n");
131 scanf("%d",&g);
132 return main();
133 }
134 case 2:
135 {
136 printf("请输入题目数(1-1000)");
137 scanf("%d",&k);
138 if (k<1||k>1000)
139 {
140 printf("\n超出允许范围\n");
141 printf("请再次输入题目数\n");
142 scanf("%d",&k);
143 }
144 printf("请选择出题方式:0.加法 1.减法 2.乘法 3.除法 4.随机\n");
145 scanf("%d",&m);
146 if (m<0||m>4)
147 {
148 printf("\n出题方式选择错误\n");
149 printf("请再次输入出题方式前序号\n");
150 scanf("%d",&m);
151 }
152 printf("\n********************开始答题************************\n");
153 fprintf(fpt,"\n********************开始答题************************\n");
154 srand((int)time(0));
155 for (i=0;i<k;i++)
156 {
157 a=rand()%201-100;
158 b=rand()%201-100;
159 while(a<-100||a>100||b<-100||b>100)
160 {
161 a=rand()%201-100;
162 b=rand()%201-100;
163 }
164 a=a;
165 b=b;
166 if(m==4)
167 n=rand()%4;
168 if (m==0||n==0)
169 {
170 printf("\n第%d题:%d+%d=",i+1,a,b);
171 fprintf(fpt,"\n第%d题:%d+%d=",i+1,a,b);
172 scanf("%d",&user_answer[i]);
173 answers[i]=a+b;
174 }
175 if (m==1||n==1)
176 {
177 if (a>b)
178 {
179 printf("\n第%d题:%d-%d=",i+1,a,b);
180 fprintf(fpt,"\n第%d题:%d-%d=",i+1,a,b);
181 scanf("%d",&user_answer[i]);
182 answers[i]=a-b;
183 }
184 else
185 {
186 printf("\n第%d题:%d-%d=",i+1,b,a);
187 fprintf(fpt,"\n第%d题:%d-%d=",i+1,b,a);
188 scanf("%d",&user_answer[i]);
189 answers[i]=b-a;
190 }
191 }
192 if (m==2||n==2)
193 {
194 printf("\n第%d题:%d*%d=",i+1,a,b);
195 fprintf(fpt,"\n第%d题:%d*%d=",i+1,a,b);
196 scanf("%d",&user_answer[i]);
197 answers[i]=a*b;
198 }
199 if (m==3||n==3)
200 {
201 s=a*b;
202 while(s<-100||s>100||a==0)
203 {
204 a=rand()%201-100;
205 b=rand()%201-100;
206 s=a*b;
207 }
208 printf("\n第%d题:%d/%d=",i+1,s,a);
209 fprintf(fpt,"\n第%d题:%d/%d=",i+1,s,a);
210 scanf("%d",&user_answer[i]);
211 answers[i]=s/a;
212 }
213 }
214 printf("\n答题结果和正确答案:\n");
215 fprintf(fpt,"\n答题结果和正确答案:\n");
216 for (i=0;i<k;i++)
217 {
218 if (user_answer[i]==answers[i])
219 {
220 printf("%d:正确 %d\n",i+1,answers[i]);
221 fprintf(fpt,"%d:正确 %d\n",i+1,answers[i]);
222 score++;
223 }
224 else printf("%d:错误 %d\n",i+1,answers[i]);
225 fprintf(fpt,"%d:错误 %d\n",i+1,answers[i]);
226 }
227 score=100*score/k;
228 printf("\n总得分(百分制):%f\n",score);
229 fprintf(fpt,"\n总得分(百分制):%f\n",score);
230 if (score<60) {printf("很遗憾!你的分数不及格,继续努力\n");
231 fprintf(fpt,"很遗憾!你的分数不及格,继续努力\n");
232 }
233 else
234 {
235 printf("恭喜!你的成绩合格\n");
236 fprintf(fpt,"恭喜!你的成绩合格\n");
237 }
238 printf("*****************************************************\n");
239 fprintf(fpt,"*****************************************************\n");
240 fclose(fpt);
241 printf("继续答题请输入任意数字\n结束请点击右上角关闭程序\n");
242 scanf("%d",&g);
243 return main();
244 }
245 while(h!=-1);
246 }
247 }