结对作业
一、团队成员
姓名 | 学号 |
---|---|
陈嘉豪 | 3122001849 |
林诗芸 | 3222004596 |
二、PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 40 | 90 |
· Estimate | · 估计这个任务需要多少时间 | 10 | 16 |
Development | 开发 | 360 | 450 |
· Analysis | · 需求分析 (包括学习新技术) | 100 | 60 |
· Design Spec | · 生成设计文档 | 18 | 40 |
· Design Review | · 设计复审 | 10 | 5 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 20 | 5 |
· Design | · 具体设计 | 40 | 60 |
· Coding | · 具体编码 | 125 | 60 |
· Code Review | · 代码复审 | 20 | 15 |
· Test | · 测试(自我测试,修改代码,提交修改) | 60 | 60 |
Reporting | 报告 | 40 | 45 |
· Test Repor | · 测试报告 | 20 | 30 |
· Size Measurement | · 计算工作量 | 10 | 5 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 10 | 10 |
合计 | 643 | 648 |
三、说明
自然数:0, 1, 2, …。
-
真分数:1/2, 1/3, 2/3, 1/4, 1’1/2, …。
-
运算符:+, −, ×, ÷。
-
括号:(, )。
-
等号:=。
-
分隔符:空格(用于四则运算符和等号前后)。
-
算术表达式:
e = n | e1 + e2 | e1 − e2 | e1 × e2 | e1 ÷ e2 | (e),
其中e, e1和e2为表达式,n为自然数或真分数。
四则运算题目:e = ,其中e为算术表达式。
四、流程分析
五、主要的代码
生成题目
void WriteAnswer(int digital_index,int result){
FILE *fp;
fp=fopen("Answers.txt","a");
fprintf(fp,"%d:",digital_index);
fprintf(fp,"%d\n",result);
fclose(fp);
}
生成答案
void WriteQuestion(char *str,int digital_index){
int k=0;
FILE *fp;
fp=fopen("Exercises.txt","a");<details>
fprintf(fp,"%d:",digital_index);
while(str[k]!=NULL){
if(str[k] == '+' ||str[k] == '-' ||str[k] == '*' ||str[k] == '/' || str[k] == '='){
fprintf(fp," %c ",str[k]);
}else fprintf(fp,"%c",str[k]);
k++;
}
fprintf(fp," =\n");
fclose(fp);
}
主函数
int main(int argc,char*argv[]){
if(argc<2){
printf("you must input argc!");
return 0;
}
srand((int)time(0));//设置rand()产生随机数时的随机数种子
FILE *fp1,*fp2;
int n,r;
if(!strcmp(argv[1],"-n") && !strcmp(argv[3],"-r")){//生成题目和答案
fp1=fopen("Exercises.txt","w");
fp2=fopen("Answers.txt","w");
fclose(fp1);
fclose(fp2);
n=atoi(argv[2]);
r=atoi(argv[4]);
int answer;
int digital_index=1;
while(digital_index<=n){
CreatQuestion(r,digital_index,&answer);
if(answer>=0){
digital_index++;
}
}
}else if(!strcmp(argv[1],"-e") && !strcmp(argv[3],"-a")){//检查答案
CheckAnswer(argv[2],argv[4]);
}
return 0;
}
生成的表达式
{
char str[250] = {'0'}; //定义一个字符数组存放算术表达式
int x, num, ran_num, j = 0;
num = random_number( 3 );//生成随机运算符数目
//循环生成算术表达式
for ( int k = 0; k < num; k++ )
{
ran_num = random_number ( m ); //生成一个参与表达式的数值,m是数值范围 (1~10)
x = 1;
while ( ran_num / x )
{
x *= 10;
}
x /= 10;//x=10,x=1
while ( x )//x=10执行两次
{
str[j++] = ran_num / x + '0';//将数字型转换为字符串型
ran_num = ran_num % x;
x /= 10;
}
str[j++] = random_symbol(); //随机生成一个运算符
}
//生成一个随机结尾数值
ran_num = random_number( m );
x = 1;
while ( ran_num / x )
{
x *= 10;
}
x /= 10;
while ( x )
{
str[j++] = ran_num / x + '0';
ran_num = ran_num % x;
x /= 10;
}
int result = Answer(str,digital_index);
*answer = result;
if(result>=0){
WriteQuestion(str,digital_index);
WriteAnswer(digital_index,result);
}
}
六、测试文件
- 十道题目的题目文件和答案
七、总结与不足
结对项目成功与否往往取决于团队成员之间的沟通、协作以及项目管理的有效性。以下是关于结对项目的小结:
1.沟通是关键:
沟通是合作项目成功的基石。我们在合作时需要清晰地表达想法、问题和需求,并且要倾听和理解其他人的观点。及时更新项目进展,分享新的想法和解决方案,以确保团队成员都在同一方向上。
2.明确责任和角色:
在项目开始阶段就明确每个成员的责任和角色,确保每个人都清楚自己的任务和贡献。避免重叠或者任务缺失,确保每个部分都有人负责。
3.使用适当的工具:
使用适当的项目管理和协作工具,如GitHub,以便团队成员可以共享代码、跟踪任务和保持沟通。
确保所有团队成员都熟悉并且能够有效地使用这些工具。
4.定期检查和评估:
定期进行项目进展的检查和评估,以确保项目朝着正确的方向发展,并且及时发现和解决问题,以不断改进工作流程和团队协作方式。
结对感受:在老师上课时了解了结对项目的大概流程,通过这次结对项目我们更加实在地体会了结对项目的流程,感受到了合作的时候沟通的重要性,为以后团队合作开发打好了基础。
两个人对彼此结对中的闪光点或建议:
陈嘉豪在项目中非常主动,在他的带领下我们很快完成了,他很有领导力,做事情很认真。
林诗芸在此次作业中做了很好的计划,每一次沟通都是非常有效的沟通,能够快速解决我们的问题
八、GitHub链接
https://github.com/JiaHaohen/teamwork/tree/c1d38d5bee245784ae665639cd431a88fa3e51d7/结对作业