四则运算

思路:这是一个有35道运算题的学习系统,先设计系统的界面,然后再编写出题的代码,之后再依次编写训练、评分的代码。这是一个很有挑战性的程序,一开始很苦恼,借鉴了一些网络上的代码,得到了同学的帮助,最终我们编好了这个代码。

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
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <conio.h>
#define N 35
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 z;
    while(1) {
        printf(" 三相之力之四则运算系统 ");
        printf("1随机出题 ");
        printf("2开始训练 ");
        printf("3训练评分 ");
        printf("4显示批改的试卷 ");
        printf("5退出系统 ");
        printf("请选择:");
      
        scanf("%d", &z);
        while(getchar() != ' ');
          
        if(z< 1 || z > 5)
            printf("选择有误!请重新输入. ");
        else
            break;
    }
    return z;
}
void chuti()
{
    int i, f;
    printf("确认随机出%d道题吗?(y确认):", N);
    if(getchar() != 'y')
        return;
    for(i = 0, f = 1; i < N; f ? i++ : 0) {
        timu[i].a = rand() % 100+1;
        timu[i].b = rand() % 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; continue;
        case 1: timu[i].result = timu[i].a - timu[i].b; continue;
        case 2: timu[i].result = timu[i].a * timu[i].b; continue;
        case 3: timu[i].result = timu[i].a / timu[i].b; continue;
        }
    }
    printf("出题完毕! ");
    flag = 1;
}
void xunlian()
{
    int i, f, n;
    char op[] = "+-*/";
    if(!flag) {
        printf("还未出题! ");
        return;
    }
    printf("确认开始练习吗?(y确认):");
    if(getchar() != 'y')
        return;
    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("输入有误!请重试. ");
            f = 0;
        } else {
            timu[i].input = n;
            timu[i].rw = (n == timu[i].result ? (fen += 10, 1) : 0);
            f = 1;
        }
    }
    printf("练习完毕! ");
}
void pingfen()
{
    char* a[] = {"棒棒哒", "很棒", "不错呀", "还需努力偶"};
    char** p;
    int n;
    p = a + 3;
    n = fen / 10;
      
    if(n >= 6)p--;
    if(n >= 8)p--;
    if(n == 10)p--;
      
    printf("您测试的总分为 %s:%d分 ", *p, fen);
}
void shijuan()
{
    int i;
    char op[] = "+-*/";
    for(i = 0; i < N; ++i){
        printf("%d %c %d = %d %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);
        putchar(' ');
    }
}
int main()
{
    int i;
    srand(time(0));
    void (*f[])() = {chuti,xunlian, pingfen, shijuan};
    while((i = mulu()) != 5) {
        f[i-1]();
        printf("按任意键继续...");
        getch();
    }
    printf("欢迎下一次使用");
    return 0;
}
运行结果
总结:这是我们小组成员共同努力的结果,我们团结一致完成了这个小程序
原文地址:https://www.cnblogs.com/ljw199106m/p/9919596.html