四则运算编程题第二版

编写一个四则运算代码,要求在实现加减乘除以及真分数四则运算的基础上,实现以下功能:

1、实现在线答题;
2、答题结束后,可以判断对错;
3、并将错题的结果保存起来。

具体代码:

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int yuefen(int a, int b)
{
    int temp;
    while(a%b != 0)
    {
        temp = a%b;
        a = b;
        b = temp;
    }
    return b;
}
int _tmain(int argc, _TCHAR* argv[])
{
    int i,j,n,o,a[1000],b[1000],c[1000],d[1000],e[1000],f[1000],g[1000],h[1000],k[1000],l[1000];
    int x[1000],y[1000],z[1000],answer1[1000],answer2[1000];
    char m[1000];
    float answer3[1000],answer4[1000],answer5[1000],answer6[1000];
    srand(time(NULL));
    FILE  *fp;
    fp=fopen("错题集.txt","ab");
    printf("请输入题目的个数:\n");
    scanf("%d",&j);
    for(i=0;i<j;i++)
    {
        a[i]=rand()%8+2;
        b[i]=rand()%8+2;
        c[i]=rand()%18+2;
        d[i]=rand()%18+2;
        e[i]=rand()%18+2;
        f[i]=rand()%18+2;
    }
    for(i=0;i<j;i++)
    {
        while((a[i]==b[i])||(a[i]>b[i]))
        {
            a[i]=rand()%8+2;
            b[i]=rand()%8+2;
        }
        k[i]=yuefen(a[i],b[i]);
        a[i]/=k[i];
        b[i]/=k[i];
        while(c[i]==d[i])
        {
            c[i]=rand()%18+2;
        }
        while(e[i]==f[i])
        {
            e[i]=rand()%18+2;
        }

    }
    printf("计算下列各题:\n");
    for(n=0;n<j;n++)
    {
        printf("%d/%d+(%d-%d)×%d÷%d\n",a[n],b[n],c[n],d[n],e[n],f[n]);
    }
    printf("请输入题目答案,以分数形式输入,分号用“/”代替:\n");
    for(i=0;i<j;i++)
    {
     scanf("%d%c%d",&answer1[i],&m[i],&answer2[i]);
    }
    printf("正确答案:\n");
    for(i=0;i<j;i++)
    {
        g[i]=(c[i]-d[i])*e[i];
        h[i]=g[i]*b[i];
        l[i]=a[i]*f[i];
        x[i]=h[i]+l[i];
        y[i]=b[i]*f[i];
        z[i]=yuefen(x[i],y[i]);
        x[i]/=z[i];
        y[i]/=z[i];
        if(y[i]<0)
        {
            y[i]=0-y[i];
            x[i]=(-x[i]);
        }
        printf("%d/%d\n",x[i],y[i]);
    }

    o=0;
    for(i=0;i<j;i++)
    {
        answer3[i]=(float)answer1[i];
        answer4[i]=(float)answer2[i];
        answer5[i]=(float)x[i];
        answer6[i]=(float)y[i];
        if((answer3[i]/answer4[i])==(answer5[i]/answer6[i]))
        {
            o++;
        }
    }
    printf("你一共做对了%d道\n",o);
    for(i=0;i<j;i++)
    {
        if((answer1[i]/answer2[i])!=(x[i]/y[i]))
        {
            fprintf(fp,"%d/%d+(%d-%d)×%d÷%d=",a[i],b[i],c[i],d[i],e[i],f[i]);
            fprintf(fp,"%d/%d\t",x[i],y[i]);
        }
    }
    fclose(fp);
    return 0;
}

运行界面:

错题集界面:

posted on 2018-11-06 20:22  宁静致远123456  阅读(167)  评论(0编辑  收藏  举报