可以在線答題,並且能判斷對錯,將錯題保存起來


問題分析:

要求在線答題並且判斷對錯,就是要輸出題目之后可以輸入答案,然后可以與正確答案做比較,當輸入的答案出現錯誤時,可以新建一個 一個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("不能打開文件\n");//打開文件並指定文件的存儲位置以及文件名
    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("\n%d+%d=",a,b);
                    scanf("%d",&k);
                    r=a+b;
                    if(k==r)
                        printf("right\n\n");
                    else
                    {
                        printf("wrong\n\n");
                        fprintf(fp,"\n%d+%d=%d",a,b,k);//如果給出的答案錯誤將會把錯題保存在文件中
                    }
                    break;
                 case 1:
                     printf("\n%d-%d=",a,b);
                     scanf("%d",&k);
                     r=a-b;
                     if(k==r)
                         printf("right\n\n");
                     else
                     {
                          printf("wrong\n\n");
                          fprintf(fp,"\n%d-%d=%d",a,b,k);
                     }
                     break;
                case 2:
                    printf("\n%d*%d=",a,b);
                    scanf("%d",&k);
                    r=a*b;
                    if(k==r)
                    printf("right\n\n");
                    else
                    {
                       printf("wrong\n\n");
                       fprintf(fp,"\n%d*%d=%d",a,b,k);
                    }
                    break;
                case 3:
                    printf("\n%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\n\n");
                    else
                    {
                        printf("wrong\n\n");
                        fprintf(fp,"\n%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("\n%d/%d+%d/%d=",b,a,d,c);
                    scanf("%d/%d",&k,&h);
                    if(k==y&&h==x)
                    printf("right\n\n");
                    else
                    {
                        printf("wrong\n\n");
                        fprintf(fp,"\n%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("\n%d/%d-%d/%d=",b,a,d,c);
                    scanf("%d/%d",&k,&h);
                    if(k==y&&h==x)
                    printf("right\n\n");
                    else
                    {
                        printf("wrong\n\n");
                        fprintf(fp,"\n%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("\n%d/%d*%d/%d=",b,a,d,c);
                    scanf("%d/%d",&k,&h);
                    if(k==y&&h==x)
                    printf("\nright");
                    else
                    {
                        printf("\nwrong");
                        fprintf(fp,"\n%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("\n(%d/%d)/(%d/%d)=",b,a,d,c);
                    scanf("%d/%d",&k,&h);
                    if(k==y&&h==x)
                    printf("right\n\n");
                    else
                    {
                        printf("wrong\n\n");
                        fprintf(fp,"\n%d/%d/%d/%d=%d/%d",b,a,d,c,k,h);
                    }
                    break;
                default:
                    printf("something is wrong!\n");
                    break;
         printf("\n");
      }
   }
    return 0;
}
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM