结对题目:四则运算

Posted ftsprimadonna

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了结对题目:四则运算相关的知识,希望对你有一定的参考价值。

git:https://github.com/yyyyyykx/yyyyyyykx98/blob/master/1.cpp

成员:于可欣   梁子君

PSP表格:

PSP2.1

Personal Software Process Stages

预估耗时(分钟)

实际耗时(分钟)

Planning

计划

30

40

· Estimate

· 估计这个任务需要多少时间

30

40

Development

开发

1260

1560

· Analysis

· 需求分析 (包括学习新技术)

300

400

· Design Spec

· 生成设计文档

30

40

· Design Review

· 设计复审 (和同事审核设计文档)

30

40

· Coding Standard

· 代码规范 (为目前的开发制定合适的规范)

40

45

· Design

· 具体设计

60

65

· Coding

· 具体编码

400

500

· Code Review

· 代码复审

240

245

· Test

· 测试(自我测试,修改代码,提交修改)

160

225

Reporting

报告

120

120

· Test Report

· 测试报告

40

50

· Size Measurement

· 计算工作量

40

30

· Postmortem & Process Improvement Plan

· 事后总结, 并提出过程改进计划

40

40

合计

 

1410

1720

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

设计实现过程

设计代码由12个函数组成,要自动生成四则运算题目并得出算术式的答案可以分成两个部分,分别为算术式的生成和算术式结果。自动生成就表示要靠随机函数rand()来完成,运算符的个数,运算符的种类,数字的个数,数字的大小都是随机的。其中运算符的个数和数字的个数是相互制约的。算术式结果的计算就是要根据先算括号内的然后按照先乘除后加减的从左向右的运算顺序来完成的。

技术分享图片

 

代码说明:

算术式的生成函数,先调用随机生成运算符和随机数的函数,然后用数组形式把它们列出来

//生成一个算术式并输出
char Formula(int range, int no,FILE *fp) {
    int i,j=1;
    RandomNum(range,no);  //生成随机运算符
    SignOfOperator(no);  //生成随机数
    for( i=0;i<=no; i++) {
        if(n[i][1]==1) {   //若分母为1则可以确定数字为自然数
            fprintf(fp,"%d",n[i][0]);
            printf("%d",n[i][0]);
        }
        else {   //若为分数
            fprintf(fp,"%d‘%d/%d",n[i][0],n[i][2],n[i][1]);
            printf("%d‘%d/%d",n[i][0],n[i][2],n[i][1]);
        }
        fprintf(fp,"%c",sign[i]);
        printf("%c",sign[i]);
    }
    fprintf(fp,"
");
    printf("
");
}

主函数部分:

尝试过括号部分但没有成功:

//随机是否加括号
int Bracket() {
    int num;
    int choice[2] = {1, 2};   //1为添加( 2为否
    srand ((unsigned)time(NULL));
    num = rand()%2;
    return choice[num];
}
//生成一个算术式
void Formula(string &t) {
    int i, j, b;
    int num = SignOfOperatorNum();
    int s[4];
    char c[5];
    for(i=0; i<num+1; i++) {
        s[i] = RandomNum(range);   //将随机生成的数字存入数组
    }
    for(j=0; j<num; j++) {
        c[j] = SignOfOperator();   //将随机生成的符号存入数组
    }
    b = Bracket();   //判断是否存在括号
    int n, m;
    if(b==1 && num!=1) {   //添加括号
        if(num==2) {   //当有两个运算符时
            n = rand()%2;
            if(n==0) {   //在开头加入括号
                c[3] = c[1];
                c[2] = );
                c[1] = c[0];
                c[0] = (;
            } else if(n==1) {   //在第一个符号后加入括号
                c[3] = );
                c[2] = c[1];
                c[1] = (;
            }
        } else if(num==3) {   //当有三个运算符时
            n = rand()%3;
            for( ; num>n; num--) {
                c[num] = c[num-1];
            }
            c[n] = (;
            if(n==0) {   //在开头加入括号后
                m = rand()%2;
                for( ; num>m+1; num--) {
                    c[num+1] = c[num];
                }
                c[m+2] = );
            } else if(n==1) {   //在第一个运算符后加入括号后
                m = rand()%2;
                for( ; num>m+2; num--) {
                    c[num+1] = c[num];
                }
                c[m+3] = );
            } else {   //在第二个运算符后加入括号后
                c[num+1] = );
            }
        }
    }
    c[num+2] = =;
    int k;
    i = 0, j = 0;
    for( k=0; k<num; k++) {
        if(c[j]==() {
            t += c[j];
            j++;
        }
        t += s[i];
        i++;
        if(c[j]==)) {
            t += c[j];
            j++;
        }
        t += c[j];
        j++;
    }
}

 

 

测试运行

输出题目

技术分享图片

技术分享图片

技术分享图片

技术分享图片

 

项目小结

在这次结对项目中,首先要感谢我的搭档的积极性,作为一个有拖延症的人,我的搭档首先对项目进行了了解并开始,我随后才跟上。我也感受到和别人结对的困难,因为两人思路上的不同,会导致了解对方思路的困难。但同时,我们也看到对方看不到的东西。

自身对C语言还是不够熟悉,在编程的过程中多次出现问题导致停滞不前和一些需求并没有实现。对学过的知识印象不够深刻,比如数据结构。自己寻找程序bug的能力还需要锻炼和提升。

 

以上是关于结对题目:四则运算的主要内容,如果未能解决你的问题,请参考以下文章

20172316 结对编程-四则运算 第一周 阶段总结

结对编程项目---四则运算

20165302结对编程

作业四:结对编程四则运算

20165203 结对编程 四则运算(第一周)

20165318 结对编程项目-四则运算 整体总结