第二次结对作业

四则运算


1.题目要求

  
(1)可以定制题目数量
(2)用户可以选择运算符
(3)用户设置最大数(如十以内、百以内等)
(4)用户选择是否有括号、是否有小数
(5)用户选择输出方式(如输出到文件、打印机等)
(6)最好能提供图形用户界面(根据自己能力选做,以完成上述功能为主)


2.任务分工

  
驾驶员:王妍楠
要求:能够完成全部代码工作,程序基本实现全部要求功能,并将代码上传至coding.net或者GitHub代码托管系统中。
能够对导航员在本次编程工作中起到的作用给出客观评价,并完成500字以上的总结。
领航员:彭辰麟
能够辅助驾驶员完成全部代码工作,并且为关键函数选用合适的覆盖标准设计测试用例,并编写代码进行单元自动测试。
能够根据上次作业的代码检查表对驾驶员的本次工作进行评价。
能够对本次工作完成500字以上的总结。


3.代码地址

  
https://dev.tencent.com/u/chengzinaiyou/p/sizeyunsuan/git


4.函数功能

(1)随机生成四则运算

  首先先随机n个可指定范围的随机整数或小数,再随机生成n-1的随机符号,将其组合成数字列,再通过转换成字符串

int ch_f;
    int ch_k;
    int i=0;
    float afk[shu];
    float num[shu];
   float answer[100];
   char ans[100];
    int au=0;
    int t,p;
    int ak=0;
    ch_k=zautorand(2,3);
    if(flag==1)
    {

            for(int p=0;p<shu;p++)
            {
                num[p]=zautorand(a,b);
            }
            for(int p=0;p<shu-1;p++)
            {
                afk[p]=choose(1);
            }



            t=0;
            i=0;
            p=0;
            answer[t]=num[i];
            t++;
            answer[t]=afk[p]*10000;
            t++;
            answer[t]=50000;
            t++;
            for(int u=0;;)
            {
                i++;
                answer[t]=num[i];
                t++;
                u++;
                if(u==ch_k)
                {
                    break;
                }
                p++;
                answer[t]=afk[p]*10000;
                t++;
            }
            answer[t]=60000;
            t++;
            for(int u=ch_k+1;;)
            {
                p++;
                answer[t]=afk[p]*10000;
                t++;
                u++;
                if(u>shu)
                {
                    break;
                }
                i++;
                answer[t]=num[i];
                t++;
            }
            au=t;

        }
    if(flag==2)
    {
        for(int p=0;p<shu;p++)
            {
                num[p]=xautorand(a,b);
            }
            for(int p=0;p<shu-1;p++)
            {
                afk[p]=choose(1);
            }



            t=0;
            i=0;
            p=0;
            answer[t]=num[i];
            t++;
            answer[t]=afk[p]*10000;
            t++;
            answer[t]=50000;
            t++;
            for(int u=0;;)
            {
                i++;
                answer[t]=num[i];
                t++;
                u++;
                if(u==ch_k)
                {
                    break;
                }
                p++;
                answer[t]=afk[p]*10000;
                t++;
            }
            answer[t]=60000;
            t++;
            for(int u=ch_k+1;;)
            {
                p++;
                answer[t]=afk[p]*10000;
                t++;
                u++;
                if(u>shu)
                {
                    break;
                }
                i++;
                answer[t]=num[i];
                t++;
            }
            au=t;


    }
    /*for(int u=0;u<au-1;u++)
            {
                printf("%.3f,",answer[u]);
            }
            printf("\n");
*/
            int k=0;
            int u=0;
            for( ;k<au-1;)
            {

                if(answer[k]==50000)
                {

                    ans[u]='(';
                    u++;
                }
                else if(answer[k]==10000)
                {
                     ans[u]='+';
                    u++;
                }
                else if(answer[k]==20000)
                {
                     ans[u]='-';
                    u++;
                }
                else if(answer[k]==30000)
                {
                     ans[u]='*';
                     u++;
                }
                else if(answer[k]==40000)
                {
                     ans[u]='/';
                     u++;
                }
                else if(answer[k]==60000)
                {
                     ans[u]=')';
                     u++;
                }
                else
                {
                    char ch[100];
                    sprintf(ch,"%.2f",answer[k]);
                    int n;
                    n=strlen(ch);
                    for(int i=0;i<n;i++)
                    {
                        ans[u]=ch[i];
                        u++;
                    }

                }

                k++;
            }
                ans[u]='=';
                ans[u+1]='\0';

        printf("%s\n",ans);

        //FILE *fptr;
        FILE *fptr1,*fptr2;
        fptr1=fopen("1.txt","a");
        fprintf(fptr1,"%s",ans);
        fprintf(fptr1,"\n");
        fclose(fptr1);
        fptr2=fopen("end.txt","a");
        fprintf(fptr2,"%s",ans);
        fprintf(fptr2,"\n");
        fclose(fptr2);

(2)运用逆波兰式计算

  应注意小数的转换,具体代码见详细代码


5.运行截图


6.总结

  在本次任务中我担任驾驶员的角色,在刚开始编写代码时,毫无思路,在不断摸索和讨论中终于决定了现在这个思路。由于时间紧促,代码还有很多不完善的地方,代码也有些冗余。在编程中有时会有新的想法,思路但在实践中并不是都能成功,所以应该在无路可走时要及时放弃,重新思考。在这次编程中我学会了合作,也加强了逻辑思维能力。太久没有编写读写文件的代码,对于各种格式已经遗忘的差不多了,只能通过上网查询,查看以前的程序来重新学习,不过最后还是有点瑕疵。逆波兰式在编译原理的课程上学习过,但并没有进行过编程实现,重新翻书了解理论,上网上查询相关文章程序,进行代码的整合,终于得到了现在的结果。
  我的领航员彭辰麟在任务中给了我极大的帮助,两人在一起编写完成代码,增加了效率,也减少了错误,提供了新的思路。在以后的工作和学习中可以选择结对编程。

posted @ 2019-05-05 16:42  Ermengarde  阅读(184)  评论(0编辑  收藏  举报