题目:二柱子将做好的项目交给了老师,几天后又得到了新的需求:

作业要求1、实现在线答题。

              2、答题结束后,可以判断对错。

              3、并将错题的结果保存起来。

出现的问题:

1、对于系统的分类一开始没有考虑全面,在经过一次一次的使用之后才使程序比较完善。

2、程序较长出现了思路断裂的情况。

源代码

 #define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#define N 20
typedef struct _ti {
int a, b;
int op;
int result;
int input;
int rw;
}ti;
ti timu[N];
int fen;
int flag;
int mulu()
{
int s;
while (1) {
printf("1)开始考试\n");
printf("2)显示答案\n");
printf("3)退出系统\n\n");
scanf("%d", &s);
while (getchar() != '\n');

if (s < 1 || s > 5)
printf("选择有误!请重新输入.\n");
else
break;
}
return s;
}

void kaoshi()
{
int i, f;
for (i = 0, f = 1; i < N; f ? i++ : 0) {
timu[i].a = rand() % 200-100 + 1;
timu[i].b = rand() % 200-100 + 1;
timu[i].op = rand() % 4;
if (timu[i].b == 0 && timu[i].op == 3) {
f = 0;
continue;
}
else
f = 1;
switch (timu[i].op) {
case 0: timu[i].result = timu[i].a + timu[i].b; break;
case 1: timu[i].result = timu[i].a - timu[i].b; break;
case 2: timu[i].result = timu[i].a * timu[i].b; break;
case 3: timu[i].result = timu[i].a / timu[i].b; break;
}
}
int n;
char op[] = "+-*/";
if (!flag) {}
fen = 0;
for (i = 0, f = 1; i < N; f ? ++i : 0) {
printf("题目%d: %d %c %d = ", i + 1, timu[i].a, op[timu[i].op], timu[i].b);
if (!scanf("%d", &n)) {
printf("输入有误!请重试.\n");
f = 0;
}
else {
timu[i].input = n;
timu[i].rw = (n == timu[i].result ? (fen += 10, 1) : 0);
f = 1;
}
}
printf("练习完毕!\n");
char* a[] = { "S", "A", "B", "F" };
char** p;
p = a + 3;
n = fen / 1;

if (n >= 12)p--;
if (n >= 16)p--;
if (n == 20)p--;

printf("你上次测试的总分为 %s:%d分\n", *p, fen);
}

void shijuan()
{
int i;
FILE *fp;
fp = fopen("上一次答题的答案.txt", "w");
if (fp == NULL)
printf("不能打开文件\n");
char op[] = "+-*/";
printf("可在TXT中查看并保存最近一次的答案\n");
for (i = 0; i < N; ++i){
printf(" 第%d题:",i);
fprintf(fp, " 第%d题:", i+1);
printf("%d %c %d = %d\t%s", timu[i].a, op[timu[i].op],
timu[i].b, timu[i].input, timu[i].rw ? "√" : "×");
fprintf(fp, "%d %c %d = %d\t%s", timu[i].a, op[timu[i].op],
timu[i].b, timu[i].input, timu[i].rw ? "√" : "×");
if (!timu[i].rw)
printf(" 正确答案: %d", timu[i].result);
fprintf(fp, " 正确答案: %d", timu[i].result);
putchar('\n');

}

}
int main()
{
int i;
srand(time(0));
void(*f[])() = { kaoshi, shijuan };
while ((i = mulu()) != 3) {
f[i - 1]();
printf("按任意键继续...");
system("pause");
}
return 0;
}

 

 

团队成员;吕浩宇,王超群