• 实现“小学生算术题出题器”


    本次作业要求:(1)出题器可以随机出四则运算。(2)真分数的运算。以下为程序运行截图:

    根据使用说明来输入整数题目的数量,以及分数题目的数量,这里分别以5道题为例。

    如果回答正确就会提示“回答正确”,回答错误则会提示“回答错误”。所有题目全部回答完毕将会给出得分情况。

    为了便于打印,将所有的算术题存到了文本中。

    以上为该程序的内容和使用详情,以下为程序源代码:

    Coding链接(https://coding.net/u/Kingsman/p/xiaoxuesuanshu/git/blob/master/%E5%B0%8F%E5%AD%A6%E7%AE%97%E6%9C%AF)

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
        int add(int);
        int sub(int);
        int mult(int);
        int divi(int);
        int max(int,int);
        int gys(int,int);
    
    int main()
    {
        FILE *fp;fp=fopen("count.txt","a+");
        srand((unsigned)(time(NULL)));
        int i,m,n;int answer,t,right=0,score=0;
        printf("\t\t\t\t\t欢迎使用小学四则运算出题器\n使用说明:请根据提示输入题目的数量,需要多少道分数题。\n\t  整数除法题目如果存在余数请输入余数。\n\t  真分数计算题的答案先输入分子再输入分母。");
        printf("\n请输出整数题目数量:\n");
        scanf("%d",&n);
        printf("\n请输入分数题目数量:\n");
        scanf("%d",&t);
        for(m=0;m<n;m++)                                                   //整数计算
        {
            i=rand()%4+1;
            switch(i)
            {
                case 1:answer=add(1);
                if(answer==1){right++;score=score+10;printf("回答正确\n");}else printf("回答错误\n");break;
                case 2:answer=sub(1);
                if(answer==1){right++;score=score+10;printf("回答正确\n");}else printf("回答错误\n");break;
                case 3:answer=mult(1);
                if(answer==1){right++;score=score+10;printf("回答正确\n");}else printf("回答错误\n");break;
                case 4:answer=divi(1);
                if(answer==1){right++;score=score+10;printf("回答正确\n");}else printf("回答错误\n");break;
            }
        }
        for(m=0;m<t;m++)                                                     //分数计算
        {
             i=rand()%4+1;
            switch(i)
            {
                case 1:answer=add(2);
                if(answer==1){right++;score=score+10;printf("回答正确\n");}else printf("回答错误\n");break;
                case 2:answer=sub(2);
                if(answer==1){right++;score=score+10;printf("回答正确\n");}else printf("回答错误\n");break;
                case 3:answer=mult(2);
                if(answer==1){right++;score=score+10;printf("回答正确\n");}else printf("回答错误\n");break;
                case 4:answer=divi(2);
                if(answer==1){right++;score=score+10;printf("回答正确\n");}else printf("回答错误\n");break;
            }
        }
        printf("共有%d道题,答对%d道,总得分:%d\n",n+t,right,score);               //输出
        fclose(fp);
        return 0;
    }
    int max(int a,int b)
    {
        if(a>=b)return a;
        else return b;
        }                                            //求最大值
    int gys(int a,int b)
    {
        if(a%b)return gys(b,a%b);
        return b;
    }                                                //求最大公约数
    int add(int q)
    {
        FILE *fp;fp=fopen("count.txt","a+");                                                                                                            //加法
        if(q==1)
        {
        srand((unsigned)(time(NULL)));
        int a=rand()%100+1,b=rand()%100+1;int answer;
        printf("%d + %d =",a,b);
        fprintf(fp,"%d + %d =\n",a,b);
        scanf("%d",&answer);
        if(a+b==answer)
        return 1;
        else return 0;
        }
        if(q==2){
            int e,f,x,y,z,x1,x2,x3,x4,a=rand()%15+1,b=rand()%13+1,c=rand()%13+1,d=rand()%15+1;
            char ch;
            srand((unsigned)(time(NULL)));
            x1=a+b-max(a,b);
            x2=max(a,b);
            x3=c+d-max(c,d);
            x4=max(c,d);
            x=gys(x1,x2);
            x1=x1/x;
            x2=x2/x;
            x=gys(x3,x4);
            x3=x3/x;
            x4=x4/x;
            printf("%d/%d + %d/%d =",x1,x2,x3,x4);
            fprintf(fp,"%d/%d + %d/%d =\n",x1,x2,x3,x4);
            scanf("%d%c%d",&e,&ch,&f);                                                                                                               //e为分子,f为分母
            y=(x2*x4)/gys(x2,x4);                                                                                                                                   //同分分母 y
            x=(x1)*y/x2+(x3)*y/x4;                                                                                                                               //同分分子 x
            z=gys(x,y);
            if(z==1)
            {
                if(x==e&&y==f)return 1;
                else return 0;
                }
                else if(x/z==e&&y/z==f)
                return 1;
                else return 0;
        }
    }
    int sub(int q)
    {
        int p;
        FILE *fp;
        fp=fopen("count.txt","a+");
        if(q==1)
        {
        srand((unsigned)(time(NULL)));
        int a=rand()%100+1,b=rand()%100+1;
        int answer;
        if(a>b)
        printf("%d - %d =",a,b);
        else
        {
            p=a;
            a=b;
            b=p;
            printf("%d - %d =",a,b);
        }
        fprintf(fp,"%d - %d =\n",a,b);
        scanf("%d",&answer);
        if(a-b==answer)
        return 1;
        else return 0;
        }
        if(q==2)
        {
            int e,f,x,y,z,x1,x2,x3,x4,a=rand()%15+1,b=rand()%15+1,c=rand()%15+1,d=rand()%15+1;
            char ch;
            srand((unsigned)(time(NULL)));
            x1=a+b-max(a,b);
            x2=max(a,b);
            x3=c+d-max(c,d);
            x4=max(c,d);                                                            
            x=gys(x1,x2);
            x1=x1/x;
            x2=x2/x;
            x=gys(x3,x4);
            x3=x3/x;x4=x4/x;
            x=gys(x2,x4);
            y=x1*x4/x;
            z=x3*x2/x;
            if(y-z<0)
            {
                x=x1;
                x1=x3;
                x3=x;
                x=x2;
                x2=x4;
                x4=x;
                }
            printf("%d/%d - %d/%d =",x1,x2,x3,x4);
            fprintf(fp,"%d/%d - %d/%d =\n",x1,x2,x3,x4);
            scanf("%d%c%d",&e,&ch,&f);                                    
            y=(x2*x4)/gys(x2,x4);                                                                                                                              //同分分母 y
            x=(x1)*y/x2-(x3)*y/x4;                                                                                                                           //同分分子 x
            z=gys(x,y);
            if(z==1)
            {
                if(x==e&&y==f)
                return 1;
                else return 0;
                }
                else if(x/z==e&&y/z==f)
                return 1;
                else return 0;
        }
    }
    int mult(int q)
    {
        FILE *fp;
        fp=fopen("count.txt","a+");
        if(q==1){
        srand((unsigned)(time(NULL)));
        int a=rand()%60+1,b=rand()%60+1;
        int answer;
        printf("%d * %d =",a,b);
        fprintf(fp,"%d * %d =\n",a,b);
        scanf("%d",&answer);
        if(a*b==answer)
        return 1;
        else return 0;
        }
        if(q==2){
            int e,f,x,y,z,x1,x2,x3,x4,a=rand()%15+1,b=rand()%15+1,c=rand()%15+1,d=rand()%15+1;
            char ch;
            srand((unsigned)(time(NULL)));
            x1=a+b-max(a,b);
            x2=max(a,b);
            x3=c+d-max(c,d);
            x4=max(c,d);                                                   //x1是被乘数分子,x2被乘数分母,x3乘数分子,x4乘数分母
            x=gys(x1,x2);
            x1=x1/x;
            x2=x2/x;
            x=gys(x3,x4);
            x3=x3/x;
            x4=x4/x;
            printf("%d/%d * %d/%d =",x1,x2,x3,x4);
            fprintf(fp,"%d/%d * %d/%d =\n",x1,x2,x3,x4);
            scanf("%d%c%d",&e,&ch,&f);                                      //e为分子,f为分母
            y=x2*x4;                                                                                                                                                     //同分分母 y
            x=x1*x3;                                                                                                                                                      //同分分子 x
            z=gys(x,y);
            if(z==1)
            {
                if(x==e&&y==f)
                return 1;
                else return 0;
                }
                else if(x/z==e&&y/z==f)
                return 1;
                else return 0;
        }
    }
    int divi(int q){
        FILE *fp;
        fp=fopen("count.txt","a+");
        if(q==1)
        {
        srand((unsigned)(time(NULL)));
        int a=rand()%40+1,b=rand()%20+1;
        int answer,re;
        printf("%d / %d =",a,b);
        fprintf(fp,"%d / %d =\n",a,b);
        if(a%b==0)
        {
            scanf("%d",&answer);
            if(a/b==answer)
            return 1;
            else return 0;
            }
        else
        {
            scanf("%d",&answer);
            printf("余数为:");
            scanf("%d",&re);
            if(a/b==answer&&a%b==re)
            return 1;
            else return 0;
            }
        }
        if(q==2)
        {
             int e,f,x,y,z,x1,x2,x3,x4,a=rand()%15+1,b=rand()%15+1,c=rand()%15+1,d=rand()%15+1;
             char ch;
            srand((unsigned)(time(NULL)));
            x1=a+b-max(a,b);
            x2=max(a,b);
            x3=c+d-max(c,d);
            x4=max(c,d);                                              //x1是被乘数分子,x2被乘数分母,x3乘数分子,x4乘数分母
            x=gys(x1,x2);
            x1=x1/x;
            x2=x2/x;
            x=gys(x3,x4);
            x3=x3/x;
            x4=x4/x;
            printf("(%d/%d) / (%d/%d) =",x1,x2,x3,x4);
            fprintf(fp,"(%d/%d) / (%d/%d) =\n",x1,x2,x3,x4);
            scanf("%d%c%d",&e,&ch,&f);                                //e为分子,f为分母
            y=x2*x3;                                                                                                                                                     //同分分母 y
            x=x1*x4;                                                                                                                                                      //同分分子 x
            z=gys(x,y);
            if(z==1)
            {
                if(x==e&&y==f)
                return 1;
                else return 0;
                }
                else if(x/z==e&&y/z==f)
                return 1;
                else return 0;
        }
    }
  • 相关阅读:
    Qt/Qml 电子书阅读器
    Qt/Qml 翻页特效
    vue如何引入本地js(不被打包编译的js)文件
    CSS3解决移动端手指点击或滑动屏幕时出现的浅蓝色背景框
    vue移动端touch插件
    vue组件间通信六种方式(完整版)
    Vue 过渡实现轮播图
    vue中遇到的坑 --- 变化检测问题(数组相关)
    Vue判断设备是移动端还是pc端
    vue项目如何监听窗口变化,达到页面自适应?
  • 原文地址:https://www.cnblogs.com/kingsman/p/5263032.html
Copyright © 2020-2023  润新知