可以在线答题,并且能判断对错,将错题保存起来

问题分析:

要求在线答题并且判断对错,就是要输出题目之后可以输入答案,然后可以与正确答案做比较,当输入的答案出现错误时,可以新建一个 一个txt文本将错题保存下来,然后继续循环。

 遇到的困难:

1.约分,分数运算结果不是最简的。

解决方法:写一个寻找最大公约数的函数。

2.不会保存错题。

解决方法:看书了解如何将printf输出的数据保存到txt文本中。

3.分母为0。

设置随机生成的数字,使函数不会生成数字0;

#include<stdio.h>
#include <stdlib.h>
#include<conio.h>
#include<time.h>
#include<string.h>
int fun(int x,int y)//求最大公约数
{
    int z,s,u,v;
    if(x<y)
    {
        z=x;
        x=y;
        y=z;
    }
    s=x;
    u=y;
    while(u!=0)
    {
        v=s%u;
        s=u;
        u=v;
    }
    return s;
}

int main()
{
    int a=0;
    int b=0;
    int c=0;
    int d=0;
    int m=0;
    int i,t,h,n,k,x,y,p,l,q;
    int r;
    scanf("%d",&n);
    FILE *fp;
    fp=fopen("D://a.txt","w");
    if(fp==NULL)
    printf("不能打开文件
");//打开文件并指定文件的存储位置以及文件名
    srand((unsigned)time(NULL));
    for(i=0;i<n;i++)
    {
        a=rand()%99+1;
        b=rand()%99+1;
        c=rand()%99+1;
        d=rand()%99+1;
        m=rand()%8;
        if(a<b)
            {
                t=a;
                a=b;
                b=t;
            }//使a的值大于b的值
        if(c<d)
            {
                h=c;
                c=d;
                d=h;
            }//使c的值大于d的值
       switch(m)
            {
                case 0:
                    printf("
%d+%d=",a,b);
                    scanf("%d",&k);
                    r=a+b;
                    if(k==r)
                        printf("right

");
                    else
                    {
                        printf("wrong

");
                        fprintf(fp,"
%d+%d=%d",a,b,k);//如果给出的答案错误将会把错题保存在文件中
                    }
                    break;
                 case 1:
                     printf("
%d-%d=",a,b);
                     scanf("%d",&k);
                     r=a-b;
                     if(k==r)
                         printf("right

");
                     else
                     {
                          printf("wrong

");
                          fprintf(fp,"
%d-%d=%d",a,b,k);
                     }
                     break;
                case 2:
                    printf("
%d*%d=",a,b);
                    scanf("%d",&k);
                    r=a*b;
                    if(k==r)
                    printf("right

");
                    else
                    {
                       printf("wrong

");
                       fprintf(fp,"
%d*%d=%d",a,b,k);
                    }
                    break;
                case 3:
                    printf("
%d/%d=",a,b);
                    scanf("%d",&k);
                    printf("");
                    scanf("%d",&p);
                    r=a/b;
                    q=a-b*r;
                    if(k*b+p==r*b+q)
                    printf("right

");
                    else
                    {
                        printf("wrong

");
                        fprintf(fp,"
%d/%d=%d余%d",a,b,k,p);
                    }
                    break;
                case 4:
                    {y=b*c+a*d;x=a*c;}
                    l=fun(x,y);
                    x=x/l;
                    y=y/l;
                    printf("
%d/%d+%d/%d=",b,a,d,c);
                    scanf("%d/%d",&k,&h);
                    if(k==y&&h==x)
                    printf("right

");
                    else
                    {
                        printf("wrong

");
                        fprintf(fp,"
%d/%d+%d/%d=%d/%d",b,a,d,c,k,h);
                    }
                    break;
                case 5:
                    {y=b*c-a*d;x=a*c;}
                    l=fun(x,y);
                    x=x/l;
                    y=y/l;
                    printf("
%d/%d-%d/%d=",b,a,d,c);
                    scanf("%d/%d",&k,&h);
                    if(k==y&&h==x)
                    printf("right

");
                    else
                    {
                        printf("wrong

");
                        fprintf(fp,"
%d/%d-%d/%d=%d/%d",b,a,d,c,k,h);
                    }
                    break;
                case 6:
                    {y=b*d;x=a*c;}
                    l=fun(x,y);
                    x=x/l;
                    y=y/l;
                    printf("
%d/%d*%d/%d=",b,a,d,c);
                    scanf("%d/%d",&k,&h);
                    if(k==y&&h==x)
                    printf("
right");
                    else
                    {
                        printf("
wrong");
                        fprintf(fp,"
%d/%d*%d/%d=%d/%d",b,a,d,c,k,h);
                    }
                    break;
                case 7:
                    {y=b*c;x=a*d;}
                    l=fun(x,y);
                    x=x/l;
                    y=y/l;
                    printf("
(%d/%d)/(%d/%d)=",b,a,d,c);
                    scanf("%d/%d",&k,&h);
                    if(k==y&&h==x)
                    printf("right

");
                    else
                    {
                        printf("wrong

");
                        fprintf(fp,"
%d/%d/%d/%d=%d/%d",b,a,d,c,k,h);
                    }
                    break;
                default:
                    printf("something is wrong!
");
                    break;
         printf("
");
      }
   }
    return 0;
}
 
原文地址:https://www.cnblogs.com/09-15/p/9883295.html