作业四:个人项目---小学四则运算

本次作业要求来自:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2186

我的github远程仓库的地址:https://github.com/Ingramm/lxc

一、题目要求

像《构建之法》的人物阿超那样,写一个能自动生成小学四则运算题目的命令行 “软件”。

具体要求:任何编程语言都可以,命令行程序接受一个数字输入,然后输出相应数目的四则运算题目和答案。例如输入数字是 30, 那就输出 30 道题目和答案。 运算式子必须至少有两个运算符,运算数字是在 100 之内的正整数,答案不能是负数。 如:23 - 3 * 4 = 11。

扩展要求:

1) 要求能出和真分数 (二分之一, 十二分之五,等)相关的练习题。

2) 并且要求能处理用户的输入,并判断对错,打分统计。 要求能处理用户输入的真分数, 如 1/2, 5/12 等。

二、设计思路

开发工具:Code::Blocks

编程语言:C语言

代码主要函数:

main()函数、randomNumber(int n)函数、add(int m,int n)函数、jianfa(int m,int n)函数、chengfa(int m,int n)函数、chufa(int m,int n)函数。

代码实现思路:

用结构体定义运算式子,包含运算式子的属性。在main()函数中,用户输入式子数量后,调用randomNumber(int n)函数随机产生式子,并存入结构体变量中,然后通过switch语句来判断式子符号优先级,计算式子结果,并存入结构体变量中。最后判断用户输入的答案是否正确并给出本次做题总分。

三、主要代码

main()函数主要代码:

  for(i=0;i<n;i++)
    {
        if(formula[i].m >= 2 && formula[i].n <2)
        {
            switch(formula[i].m)
            {
            case 2:
                sum1[i] = chengfa(formula[i].firstNumber,formula[i].secondNumber);
                break;
            case 3:
                sum1[i] = chufa(formula[i].firstNumber,formula[i].secondNumber);
                break;
            }
            switch(formula[i].n)
            {
            case 0:
                formula[i].sum = add(sum1[i],formula[i].thirdNumber);
                break;
            case 1:
                formula[i].sum = jianfa(sum1[i],formula[i].thirdNumber);
                break;
            }
        }
        else if(formula[i].n >= 2 && formula[i].m <2)
        {
            switch(formula[i].n)
            {
            case 2:
                sum1[i] = chengfa(formula[i].secondNumber,formula[i].thirdNumber);
                break;
            case 3:
                sum1[i] = chufa(formula[i].secondNumber,formula[i].thirdNumber);
                break;
            }
            switch(formula[i].m)
            {
            case 0:
                formula[i].sum = add(formula[i].firstNumber,sum1[i]);
                break;
            case 1:
                formula[i].sum = jianfa(formula[i].firstNumber,sum1[i]);
                break;
            }
        }

randomNumber(int n)函数的主要代码:

void randomNumber(int n)
{
    int i;
    srand(time(NULL));
    for(i=0;i<n;i++)
    {
        formula[i].firstNumber = rand()%100 + 1;
        formula[i].secondNumber = rand()%100 + 1;
        formula[i].thirdNumber = rand()%100 + 1;
        formula[i].m = rand()%4;
        switch(formula[i].m)
        {
        case 0:
            formula[i].fuhao1 = '+';
            break;
        case 1:
            formula[i].fuhao1 = '-';
            break;
        case 2:
            formula[i].fuhao1 = '*';
            break;
        case 3:
            formula[i].fuhao1 = '/';
            break;
        }
        formula[i].n = rand()%4;
        switch(formula[i].n)
        {
        case 0:
            formula[i].fuhao2 = '+';
            break;
        case 1:
            formula[i].fuhao2 = '-';
            break;
        case 2:
            formula[i].fuhao2 = '*';
            break;
        case 3:
            formula[i].fuhao2 = '/';
            break;
        }
    }
}

运算函数代码:

int add(int m,int n)
{
    int sum = 0;
    sum = m + n;
    return sum;
}
int jianfa(int m,int n)
{
    int sum = 0;
    sum = m - n;
    return sum;
}
int chengfa(int m,int n)
{
    int sum = 0;
    sum = m * n;
    return sum;
}
int chufa(int m,int n)
{
    int sum = 0;
    sum = m / n;
    return sum;
}

四、运行结果

五、主要问题

主要问题:本次作业主要是用结构体来实现的,用结构体来对运算式子进行保存。但做完作业后,发现其实用结构体是有弊端的,在内存资源上,结构体数组要固定给它分配内存空间,如果用不完,就会出现内存浪费的情况,而用指针来对式子进行保存,就不用预留内存空间,就比结构体要好。不过,由于本次作业做好了,只能课后再进行更改。

六、时间估计

PSP2.1 Personal Software Process Stages Time Senior Student Time
Planning 计划 8 6
· Estimate 估计这个任务需要多少时间 12 10
Development 开发 85 80
· Analysis 需求分析 (包括学习新技术) 8 10
· Design Spec 生成设计文档 0 0
· Design Review 设计复审 3 5
· Coding Standard 代码规范 4 3
· Design 具体设计 10 15
· Coding 具体编码 30 30
· Code Review 代码复审 10 10
· Test 测试(自我测试,修改代码,提交修改) 15 30
Reporting 报告 9 6
· 测试报告 5 9
· 计算工作量 5 2
· 并提出过程改进计划 0

posted on 2018-10-15 12:41  李先灿  阅读(215)  评论(1编辑  收藏  举报

导航