zoukankan      html  css  js  c++  java
  • 《软件工程》个人项目二:增加功能后的四则运算“软件”

    要求:

    1.支持真分数运算;

    2.一次出的题目避免重复;

    3.可定制出题数目;

    #include<stdio.h>
    #include<stdlib.h>
    #include<math.h>
    #define MAX 100
    void simple(int &m,int &n) //约去分子分母公约数
    {
    int p;
    p=(m+n-abs(m-n))/2;
    for(int i=2;i<=p;i++)
    if(m%i==0&&n%i==0)
    {
    m/=i;
    n/=i;
    i=2;
    }
    }
    
    void show(int &x,int &y) //输出整数或分数
    {
    if(x%y==0)
    printf("%d",x/y);
    else
    printf("%d/%d",x,y);
    }
    
    static int number=0;
    void judge(int p,int q,int f,int g) //判断输入结果的对错
    {
    if(p==f&&q==g)
    {
    printf("回答正确!
    ");
    number+=1;
    }
    else
    printf("回答错误!
    ");
    }
    
    int main()
    {
    FILE *fp;
    //文件的打开
    if((fp=fopen("mytiku.txt","w"))==NULL)
    {
    printf("Cannot open this file!
    ");
    exit(0);
    }
    for(int i=0;i<MAX;i++)
    {
    int a,b,c,d,e,f,g,p,q,x,y;
    int *A=(int *)malloc(MAX*sizeof(int)),*B=(int *)malloc(MAX*sizeof(int));
    int *C=(int *)malloc(MAX*sizeof(int)),*D=(int *)malloc(MAX*sizeof(int));
    a=rand()%MAX+1;
    b=rand()%MAX+1;
    c=rand()%MAX+1;
    d=rand()%MAX+1;
    e=rand()%4+1;
    simple(a,c);
    simple(b,d);
    A[i]=a;
    B[i]=b;
    C[i]=c;
    D[i]=d;
    
    //保证没有重复的题目
    for(int j=0;j<i;j++)
    if((A[i]==A[j]&&B[i]==B[j]&&C[i]==C[j]&&D[i]==D[j])||(A[i]==B[j]&&B[i]==A[j])&&C[i]==D[j]&&D[i]==C[j])
    {
    a=rand()%MAX+1;
    b=rand()%MAX+1;
    c=rand()%MAX+1;
    d=rand()%MAX+1;
    simple(a,c);
    simple(b,d);
    j=0;
    }
    
    //显示产生的算式
    show(a,c);
    switch(e)
    {
    case 1: printf("+");break;
    case 2: printf("-");break;
    case 3: printf("*");break;
    case 4: printf("/");break;
    }
    show(b,d);
    printf("=");
    
    //对结果进行判断
    switch(e)
    {
    case 1: f=a*d+b*c;
    g=c*d;
    simple(f,g);
    if(g!=1)
    {
    scanf("%d/%d",&p,&q);
    simple(p,q);
    judge(p,q,f,g);
    }
    else
    {
    scanf("%d",&p);
    judge(p,1,f,1);
    }
    fprintf(fp,"%d/%d+%d/%d=%d/%d
    ",a,c,b,d,f,g);break;
    //减法可能产生负数,要对其进行判断
    case 2: f=abs(a*d-b*c);
    g=c*d;
    x=a*d;
    y=b*c;
    simple(f,g);
    if(x>=y)
    {
    if(g!=1)
    {
    scanf("%d/%d",&p,&q);
    simple(p,q);
    judge(p,q,f,g);
    }
    else
    {
    scanf("-%d",&p);
    judge(p,1,f,1);
    }
    fprintf(fp,"%d/%d-%d/%d=%d/%d
    ",a,c,b,d,f,g);
    }
    else
    {
    if(g!=1)
    {
    scanf("-%d/%d",&p,&q);
    simple(p,q);
    judge(p,q,f,g);
    }
    else
    {
    scanf("%d",&p);
    judge(p,1,f,1);
    }
    fprintf(fp,"%d/%d-%d/%d=-%d/%d
    ",a,c,b,d,f,g);
    }break;
    case 3: f=a*b;
    g=c*d;
    simple(f,g);
    if(g!=1)
    {
    scanf("%d/%d",&p,&q);
    simple(p,q);
    judge(p,q,f,g);
    }
    else
    {
    scanf("%d",&p);
    judge(p,1,f,1);
    }
    fprintf(fp,"%d/%d*%d/%d=%d/%d
    ",a,c,b,d,f,g);break;
    case 4: f=a*d;
    g=b*c;
    simple(f,g);
    if(g!=1)
    {
    scanf("%d/%d",&p,&q);
    simple(p,q);
    judge(p,q,f,g);
    }
    else
    {
    scanf("%d",&p);
    judge(p,1,f,1);
    }
    fprintf(fp,"%d/%d/%d/%d=%d/%d
    ",a,c,b,d,f,g);break;
    }
    }
    fprintf(fp,"做对题目的数目为%d
    ",number);
    fclose(fp);
    return 0;
    }

    结果:

  • 相关阅读:
    Best Practices for Using Alpha
    Android手机 Fildder真机抓包
    Android调用MediaScanner进行新产生的媒体文件扫描
    读书笔记-----Java并发编程实战(二)对象的共享
    项目经验谈---IM新消息界面刷新异常处理记录
    读书笔记-----Java并发编程实战(一)线程安全性
    OnScroll与OnTouchEvent方法的区别与联系
    View的getLeft, getRight, getTop, getBottom
    如何用DNS+GeoIP+Nginx+Varnish做世界级的CDN
    更改ubuntu mysql data目录位置
  • 原文地址:https://www.cnblogs.com/xinyue6/p/9750531.html
Copyright © 2011-2022 走看看