结对作业

一、团队成员

姓名 学号
陈嘉豪 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/结对作业

posted on 2024-03-26 10:26  chen!q  阅读(11)  评论(0编辑  收藏  举报

导航