zoukankan      html  css  js  c++  java
  • 四则运算题目程序

    一.作业信息

    博客班级 软件工程
    作业要求 作业要求
    作业目标 能够精准高效完成四则运算并输出结果;迅速理解需求制定功能
    学号 3180701221

    目录

    * 一.作业信息
    * 二.作业要求
    * 三.代码提交与截图
    * 四.个人小结

    写一个能自动生成小学四则运算题目的程序,然后在此基础上扩展:

    1. 除了整数以外,还要支持真分数的四则运算,例如:1/6+1/8=7/24
    2. 程序要求能处理用户的输入,判断对错,累积分数
    3. 程序支持可以由用户自行选择加、减、乘、除运算
    4. 使用-n参数控制生成题目的个数,例如Myapp.exe -n 10,将生成10个题目

    1.主要函数

    char getSignal();                      //获取随机运算符函数
    int random(double, double);             //获取随机数函数
    int getResult(int, int, char);           //结果计算函数
    int takeTest();                        //题目生成函数
    

    2.主函数

    {
        int n, a, right = 0;
        double percent;
        printf("Please enter the number of the test:");
        scanf("%d", &n);
        for (int i = 0; i < n; i++)
        {
            a = takeTest();
            right = right + a;
        }
        printf("Powerful!
    ");
        printf("The number of right:%d
    ", right);
        percent = ((double)right * 100.00) / (double)n;
        printf("The percent of right:%0.2f %%
    ", percent);
    }
    

    3.获取随机运算符函数

    char getSignal()
    {
        char signal[4]={'+','-','*','/'};
        srand((unsigned)time(NULL));
        return signal[rand()%4];
    }
    

    4.获取随机数函数

    int random(double start, double end)
    {
        return (int)(start+(end-start)*rand()/(RAND_MAX+ 1.0));
    }
    

    5.计算结果函数

    int getResult(int num1,int num2,char signal)//整数四则运算
    {
        int res;
        switch(signal)
        {
        case '+':
            res=num1+num2;break;
        case '-':
            res=num1-num2;break;
        case '*':
            res=num1*num2;break;
        case '/':
            res=num1/num2;break;
        default:
            printf("运算符错误!
    ");
        }
        return res;
    }
    

    6.真分数运算函数

    void fs() //分数 
    {
        int x1,y1,x2,y2,p,fz,fm,temp; //分子fz 分母fm 
        char answer[20],result[20],s[9];
        int d;
        d=rand()%4;
        srand((int)time(0));
        x1=rand()%20+1;
        y1=rand()%20+1;
        if(x1>y1||x1==y1)
            {    
                x1=rand()%20+1;
                y1=rand()%20+1;
            }
        temp=gcd(x1,y1);
        if(temp>0) {
                    x1=x1/temp;
                    y1=y1/temp;
                }
        else if (temp<0)
                {
                    x1=-x1/temp;
                    y1=-y1/temp;
                }
        x2=rand()%20+1;
        y2=rand()%20+1;
        if(x2>y2||x2==y2)
            {    
                x2=rand()%20+1;
                y2=rand()%20+1;
            }
        temp=gcd(x2,y2);
        if(temp>0) {
                    x2=x2/temp;
                    y2=y2/temp;
                }
        else if (temp<0)
                {
                    x2=-x2/temp;
                    y2=-y2/temp;
                }
        switch(d)
        {
            case 0:   printf("%d/%d+%d/%d=",x1,y1,x2,y2);   
                        fz=x1*y2+x2*y1; 
                        fm=y1*y2; break;
            case 1:   printf("%d/%d-%d/%d=",x1,y1,x2,y2);   
                        fz=x1*y2-x2*y1; 
                        fm=y1*y2; break;
            case 2:    printf("%d/%d×%d/%d=",x1,y1,x2,y2);  
                        fz=x1*x2;       
                        fm=y1*y2; break;
            case 3:    printf("%d/%d÷%d/%d=",x1,y1,x2,y2); 
                            fz=x1*y2; 
                            fm=y1*x2; break; 
            }
        p=gcd(fz,fm);
        if(p>0) {
                    fz=fz/p;
                    fm=fm/p;
                }
        else if (p<0)
                {
                    fz=-fz/p;
                    fm=-fm/p;
                }
        if(fz%fm==0)
        {
            temp=fz/fm;
            itoa(fz,result,10);
        }
        else
        {
            itoa(fz,result,10);
            itoa(fm,s,10);
            strcat(result,"/");
            strcat(result,s);
        }
        scanf("%s:",&answer);
        if(strcmp(result,answer)==0)
            {
                printf("正确
    ");
                ttrue++;
            }
            else 
                printf("错误  	答案是%s
    ",result);
        
    }
    

    7.题目生成函数

    int takeTest()
    {
        int get;
        int num1,num2,a;
        char signal;
    
        srand((unsigned)time(NULL));
        signal=getSignal();
        num1=random(0,1000);
        num2=random(1,1000);
    if(signal=='-')
        {
            if(num1<num2)
            {
                int temp;
                temp=num1;
                num1=num2;
                num2=temp;
            }
        }
        if(signal=='/')
        {
            if(num2==0)
            {
                int temp;
                temp=num1;
                num1=num2;
                num2=temp;
            }
        }
        printf("%d%c%d=",num1,signal,num2);
        scanf("%d",&get);
        fflush(stdin);   //清空输入缓冲区
        if(getResult(num1,num2,signal)==get)
            {
            printf("You're right!
    ");
            a=1;
            }
        else
        {
            printf("It's wrong!
    ");
            printf("The right answer is: %d
    ",getResult(num1,num2,signal));
            a=0;
        }
        return a;
    }
    

    运行结果

    psp2.1 任务内容 计划完成需要的时间(min) 实际完成需要的时间(min)
    Planning 计划 2000 250
    Estimate 估计这个任务需要多少时间,并规划大致工作步骤 20 40
    Development 开发 10 30
    Analysis 需求分析(包括学习新技术) 10 10
    Design Spec 生成设计文档 10 20
    Design Review 设计复审 10 20
    Coding Standard 代码规范 10 10
    Design 具体设计 20 30
    Coding 具体编码 30 20
    Code Review 代码复审 20 30
    Test 测试(自我测试,修改代码,提交修改) 20 30
    Reporting 报告 10 20
    Test Report 测试报告 10 15
    Size Measurement 计算工作量 20 20
    Postmortem & Process Improvement Plan 事后总结,并提出过程改进计划 10 20
    本次四则运算的软件工程练习还是做得不够完善,运用的方法只是比较初级的方法,代码比较冗余,时间复杂度和空间复杂度较大,目前对分数运算的方法还不够简洁,此项目将会继续完善下去。
    通过这次的作业发布我了解到了如何用markdow编辑器来编写,学到了许多知识,并且还有许多的不足之处,在今后的学习中不断完善。
  • 相关阅读:
    无线网络技术知识点
    中国高校计算机大赛—网络技术挑战赛
    实验二 软件工程个人项目
    实验一 软件工程准备
    2018年春季软件工程教学设计(初稿)
    2017-2018春季学期软件工程教学资源目录
    2017-2018春季学期软件工程教学纲要
    如何解决Android Studio解决DDMS真机/模拟器无法查看data目录问题
    GitHub的Windows客户端的使用教程
    2017面向对象程序设计(JAVA)课程总结
  • 原文地址:https://www.cnblogs.com/ahahwhr/p/13942232.html
Copyright © 2011-2022 走看看