四则运算升级

作业要求:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/2213

GitHub远程地址:https://github.com/Tily288/Tily

一、基本要求

从个人项目出发,将程序改造成一个单机带用户界面(不是控制台)的程序,这个程序最基本要达到:

        1.自动生成题目,单个题目最多不能超过4个运算符,操作数小于100。

        2.用户可以输入答案

        3.若用户输入答案正确,则提示正确;若答案错误,则提示错误,并要提示正确答案是多少。

二、扩展方向

  1. 程序可以出带括号的正整数四则运算,支持分数,除法保留两位小数,如:(1/3+1)*2 = 2.67,特别注意:这里是2.67而非2.66(保留两位小数功能实现,不支持出带括号题目)
  2. 用户可以选择出题的个数(最多不能超过5个题目),答题结束可以显示用户答错的题目个数和答对的题目个数(实现)

三、时间记录表

PSP2.1 Personal Software Process Stages 预估时间(h) 实际时间(h)

Planning

计划 10 9
Estimate 估计这个任务需要多少时间 10 15
Development 开发 80 100
Analysis 需求分析 (包括学习新技术) 1 1
Coding Standard 代码规范 2 3
Design 具体设计 6 3
Coding 具体编码 28 36
Code Review 代码复审 4 5
Test 测试(自我测试,修改代码,提交修改) 11 5

 

四、开发环境调试:Visual C++

五、代码呈现

#include<stdio.h>
#include<math.h>
#include<time.h>
#include <stdlib.h>
void operation(void);
float plus(float a,float b);
float minus(float a,float b);
float multiply(float a,float b);
float divide(float a,float b);
float caculate(int i,float a,float b);
char Operator(int i);
void main()
{
    int i=0,n;
    printf("你想要输入的运算题目数为:");
    scanf("%d",&n);
    do{
        operation();
        i++;
    }while(i<n);
    system("pause");
}
void operation()
{
    float answer;
    float x,y,z;
    int a,b,c;
    int j,k;
    char op1,op2;
    srand((unsigned)time(NULL));
    do{
        a=rand()%100;
        b=rand()%100;
        c=rand()%100;
        //0,1为加减 2,3为乘除
        j=rand()%4;
        k=rand()%4;
        if(j>1){
            y=(float)a;
            z=(float)b;
            x=caculate(j,y,z);
            y=x;
            z=(float)c;
            x=caculate(k,y,z);
        }
        else
        {
            if(k<2)
            {
                y=(float)a;
                z=(float)b;
                x=caculate(j,y,z);
                y=x;
                z=(float)c;
                x=caculate(k,y,z);
            }
            else
            {
                y=(float)b;
                z=(float)c;
                x=caculate(k,y,z);
                y=(float)a;
                z=x;
                x=caculate(j,y,z);
            }
        }
    }while(x<0.0);
    op1=Operator(j);
    op2=Operator(k);
    printf("%d %c %d %c %d = ",a,op1,b,op2,c);
    scanf("%f",&answer);
    if(j==3&&k==3)
    {
        if((answer-x)<0.01)
        {
            printf("恭喜你,答对啦!\n");
        }
        else
        {
            printf("很遗憾,你答错了!正确答案是:%.1f\n",x);
        }
    }
    else
    {
        if((x-answer)<0.01)
        {
            printf("恭喜你,答对啦!\n");
        }
        else
        {
            printf("很遗憾,你答错了!正确答案是:%.1f\n",x);
        }
    }
}
float caculate(int i,float a,float b)      //当它是哪种符号就进行哪个计算
{
    float x;
    switch(i)
    {
    case 0:
        x=plus(a,b);
        break;
    case 1:
        x=minus(a,b);
        break;
    case 2:
        x=multiply(a,b);
        break;
    case 3:
        x=divide(a,b);
        break;
    default:
        break;
    }
    return x;
}
float plus(float a,float b)
{
    float x;
    x=a+b;
    return x;
}
float minus(float a,float b)
{
    float x;
    x=a-b;
    return x;
}
float multiply(float a,float b)
{
    float x;
    x=a*b;
    return x;
}
float divide(float a,float b)
{
    float x;
    x=a/b;
    return x;
}
char Operator(int i)   //运算符
{
    char fh;
    switch(i)
    {
    case 0:
        fh='+';
        break;
    case 1:
        fh='-';
        break;
    case 2:
        fh='*';
        break;
    default:
        fh='/';
        break;
    }
    return fh;
}

六、运行结果截图

七、总结

        这次项目没能按老师要求完成,由于自己的基础不够扎实,很多地方无法完成,为了不拖其他同学后腿所以自己完成了本次作业,并没能把升级版做出来,很多地方都没有完善,希望自己在学习中发现自己的不足努力前进,为以后结对能不拖人后退。

posted @ 2018-10-24 21:37  TILY  阅读(254)  评论(0编辑  收藏  举报