看别人的代码,我觉得是一个痛苦又会有所收获的过程,很多和自己的逻辑不相符的算法思路都是皱着眉头硬看下去,但有的完全理解后,转念一想好像又确实没啥毛病,甚至还比自己的思路巧妙了那么一些,拓展了自己下一次在面对同样问题时的解决思路
队友和我自己一样,也是用了c++(虽然和java一样都半斤八两,但毕竟是大一就学的语言总有点亲切的味道?)
先说优点,首先是注释很清楚,清晰的注释无疑让我的阅读体验上升了不少,可以明了地看出算法的思路(缓缓放下了手中的刀.......)
int Primary(int number,string file_Name) //生成小学试卷的函数 ,number为生成题目数量,file_Name为储存.txt文件目录 { int num_Bracket=0; //括号数目 int bra_left; //左括号 int bra_right; //右括号 int flag; int sum=0; srand(std::time(NULL)); //随机种子 ofstream file; file.open(file_Name.data()); //打开需要储存的.txt文件 for(int i=0;i<number;i++) //循环生成题目 { file<<i+1<<"."; //题目编号 int num=rand()%4+1; //随机操作数 for(int j=0;j<=num;j++) { bra_left=rand()%3+1; //随机数,判断是否生成左括号 flag=rand()%4; //随机符号 if(bra_left!=1) //不产生左括号 { if(num_Bracket!=0) //前面的算式存在左括号 { int bar_right=rand()%2+1; //随机右括号 ,概率为1/2 if(bar_right==1) //生成右括号情况 { file<<rand()%100+1<<")"<<sym_Pri[flag]; num_Bracket--; //括号数目减一 } else file<<rand()%100+1<<sym_Pri[flag]; //不生成右括号 } else file<<rand()%100+1<<sym_Pri[flag]; //没有左括号不生成右括号 } else if(j==0) { file<<rand()%100+1<<sym_Pri[flag]; } else { file<<"("<<rand()%100+1<<sym_Pri[flag]; //生成左括号,括号数目加一 num_Bracket++; } } file<<rand()%100+1; //保证至少存在两个操作数 if(num_Bracket!=0) //是否都有对应的右括号 { for(int i=0;i<num_Bracket;i++) { file<<")"; //不对应则吧右括号全部加在最后 } } num_Bracket=0; file<<"="<<endl; file<<endl; //换行 } file.close(); //文件关闭 }
其次是老师上课时提到的高内聚问题,本次项目需求的小学、初中、高中出题算法都作为单独的方法放到了主函数外,每个模块都做好了自己的事,main函数中的调用就显得简单明了
再就是变量命名,虽然有点单词不太恰当(hhh),但该大写的地方都大写了,再加上注释也不会让人对变量或者函数的作用产生什么异议
然后就说到不好的地方
问题首先也出在上面粘出的代码上,在生成小学题目的算法中,为了不让一个括号直接包住了整个算式这样的情况发生,队友用这样的语句
else if(j==0) { file<<tri<<rand()%100+1<<sym_Pri[flag]; }
即第一个操作数前一定不会有左括号,强行阻止了这一情况的发生,但这样的话,就导致了如(1+2)*3这样的算式不会存在的缺陷
再然后的话,就是回车打少了代码看着有点拥挤,按照我自己的习惯的话,我是习惯在一个功能模块写完之后多打一行回车,以分隔一下代码,感觉就像写作文时分自然段一样?
最后的话,众所周知,结对编程要写ui了,然后!我们!都用的!c++!
也许这就是命吧
eclipse,打开
我继续改代码了
溜了溜了
。
原文地址:https://www.cnblogs.com/suru723/p/9715210.html
时间: 2024-11-06 12:46:37