结对编程队友代码分析

结队编程队友使用的是C++语言,主函数循环是三个出题函数以及一个主函数进行登录选择,下面进行一部分的代码分析。

代码的一些不足之处:

①代码重用度较差

    未使用面向对象编程,部分重复代码可以更充分封装。

    如

    time_t now_time = time(NULL);  //获取当前时间 
    struct tm *p;
    p = gmtime(&now_time);
    char filename[256] = {0};
    sprintf(filename,"%d-%d-%d-%d-%02d-%02d.txt", 1900 + p->tm_year, 1 + p->tm_mon, p->tm_mday, 8 + p->tm_hour, p->tm_min, p->tm_sec);  //将当前时间作为为文件名 
    ofstream mycout(filename);   //生成txt文件    

   部分大量出现,可封装为函数。

②算式生成算法亟需改进

int bracket_l[10][3] = {0, 0, 0, 5, 0, 0, 0, 11, 0, 0, 1, 0, 0, 5, 0, 5, 11, 0, 0, 1, 11, 0, 1, 2, 0, 5, 17, 5, 11, 17}; //左半括号可能的位置 
int bracket_r[10][3] = {9, 0, 0, 14, 0, 0, 9, 19, 0, 14, 9, 0, 15, 14, 0, 20, 19, 0, 20, 9, 19, 19, 14, 9, 15, 14, 24, 26, 25, 24};  //与左半括号分别对应的右半括号位置 

    这部分是括号的位置,没有用算法,暴力枚举了几种括号的插入位置,虽然支持部分多个括号的插入,但是治标不治本。

    但这种方法也并不是没有可取之处,此方法简化了复杂的括号生成,用了一种较为简单的方法解决较为复杂的问题,而且在绝大多数下是能够满足需要的。

③未进行查重操作

    需求文档中要求进行查重,但代码中未进行查重操作。

可取之处

①使用定长字符数组

    

string str1[27];  //考虑括号所有位置后创建一个长度为27的字符串数组存储算式 
int flag = rand() % 2;  //算式中是否出现括号 
int flag1 = rand() % 3;  //算式中是否出现平方或开根号 

        用一个定长字符数组,且仅仅是用于存储标记。

  for (int j = 0; j < 27; j++)
        {
            if ((n > 0) && (j == 3 || j == 8 || j == 13 || j == 18 || j == 23))  //操作数的位置直接输出随机数 
            {
                if (radical[n - 1] == "")  //是否输出开根号 
                {
                    mycout << radical[n - 1];
                }
                if (trig_sit[n - 1] != 3)  //是否输出三角函数符号 
                {
                    mycout << trig[trig_sit[n - 1]];
                }
                mycout << rand() % 100 + 1;
                if (square[n - 1] == "^2")  //是否输出平方 
                {
                    mycout << square[n - 1];
                }
                n--; 
            }
            else if (str1[j] != " ")
            {
                mycout << str1[j];
            }
        }
        mycout << "=" << endl << endl;
    }

    生成对应的各个算式标记后,再统一遍历该字符数组的各个标记,从而产生各个的算式。

    避免了因为不断的字符插入导致的字符串各字符的index紊乱的情况,极大地减轻了工作量。

② 整体效率较高

    未使用C++的String类的成员函数,避免了耗时的插入查找操作,使程序运行效率较大提高。

猜你喜欢

转载自www.cnblogs.com/cadenza/p/9712619.html