编程语言
首页 > 编程语言> > 软件工程(2018)结对编程第二次作业

软件工程(2018)结对编程第二次作业

作者:互联网

四则运算自动生成程序.


题目要求:

任务分工:

项目成果

1.选择练习题目的最大的数量:
这里选择10题

2.设置最大数:
因为题目要求是10以内或者100以内,这里我就设置为输入0为10以内,输入其他数字为100。
这里选择100以为,输入1。

3.选择是否含有小数:
设置为输入0为不含有小数,输入其他数字含有小数
选择含有小数,输入1

4.选择运算符:
数字1~5分别代表加,减,乘,除,混合运算。
选择5,进行混合运算

  1. 选择是否输出到文件中:
    输入0不输出到文件中,输入其他数字输入到文件中
    选择输入到文件中,输入1

  2. 选择时候带括号:
    输入0不带括号,否则带括号
    选择带括号,输入1

7.题目打印:

由于我设置的是每次都需要判断是否带括号,所以每输出一个四则运算就需要判断一次,后期我们对这个进行了更改

8.判断10次后结果展示:

算法细节:

1.函数模块设计

加法模块:.

void add(double a,double b,int file)

void add(double a,double b,int file)
{

    if(file==0)
    {
        printf("请回答:%.2lf+%.2lf=",a,b);
        printf("\n");
    }
    else
    {
        printf("请回答:%.2lf+%.2lf=",a,b);
        if((fp=fopen("aa.txt","a"))==NULL)    //将表达式写入到文件
       {
        printf("不能打开文件!\n");
        exit(0);
       }
       fprintf(fp,"%.2lf+%.2lf=\n",a,b);
       fclose(fp);
       printf("\n");
    }
}

减法模块:.
void minu(double a,double b,int file)

void minu(double a,double b,int file)
{

     if(file == 0)
     {
         printf("请回答:%.2lf-%.2lf=",a,b);
         printf("\n");
     }
     else
     {
         printf("请回答:%.2lf-%.2lf=",a,b);
         if((fp=fopen("aa.txt","a"))==NULL)
        {
         printf("不能打开文件!\n");
         exit(0);
        }
        fprintf(fp,"%.2lf-%.2lf=\n",a,b);
        fclose(fp);
        printf("\n");
     }
}

乘法模块:.
void mul(double a,double b,int file)

void mul(double a,double b,int file)
{
    if(file==0)
    {
        printf("请回答:%.2lf*%.2lf=",a,b);
        printf("\n");
    }
    else
    {
        printf("请回答:%.2lf*%.2lf=",a,b);
        if((fp=fopen("aa.txt","a"))==NULL)
       {
        printf("不能打开文件!\n");
        exit(0);
       }
       fprintf(fp,"%.2lf*%.2lf=\n",a,b);
       fclose(fp);
       printf("\n");
    }
}

除法模块:.
void di(double a,double b,int file)

void di(double a,double b,int file)
{
    if(file==0)
    {
         printf("请回答:%.2lf÷%.2lf=",a,b);
         printf("\n");
    }
    else
    {

        if((fp=fopen("aa.txt","a"))==NULL)
       {
        printf("不能打开文件!\n");
        exit(0);
       }
       fprintf(fp,"%.2lf÷%.2lf=\n",a,b);
       fclose(fp);
       printf("\n");
    }
}

随机产生运算符模块:.
void random_2(double a,double b,double c,int sign) //随机产生两个运算符的算式

void random_2(double a,double b,double c,int sign) //随机产生两个运算符的算式
{
    int r;
    r=rand()%4+1;
    switch(r)
    {
    case 1:
        {
            if(sign==0)
            {
                printf("%.2lf+%.2lf-%.2lf=\n",a,b,c);
                break;
            }
            else
            {
                printf("%.2lf+%.2lf-%.2lf=\n",a,b,c);
                if((fp=fopen("aa.txt","w"))==NULL)
                {
                printf("不能打开文件!\n");
                exit(0);
                }
                fprintf(fp,"%.2lf+%.2lf-%.2lf=\n",a,b,c);
                fclose(fp);break;
            }
        }
    case 2:
        {
        if(sign==0)
        {
            printf("%.2lf*%.2lf+%.2lf=\n",a,b,c);
            break;
        }
        else
        {
            printf("%.2lf*%.2lf+%.2lf=\n",a,b,c);
            if((fp=fopen("aa.txt","a"))==NULL)
            {
            printf("不能打开文件!\n");
            exit(0);
            }
            fprintf(fp,"%.2lf*%.2lf+%.2lf=\n",a,b,c);
             fclose(fp);break;
        }
        }
    case 3:
        {
            if(sign==0)
            {
                 printf("%.2lf÷%.2lf+%.2lf=\n",a,b,c);
                 break;
            }
            else
            {
                printf("%.2lf÷%.2lf+%.2lf=\n",a,b,c);
            if((fp=fopen("aa.txt","a"))==NULL)
            {
            printf("不能打开文件!\n");
            exit(0);
            }
            fprintf(fp,"%.2lf÷%.2lf+%.2lf=\n",a,b,c);
            fclose(fp);break;
            }
            }
    case 4:
        {
        if(sign==0)
        {
            printf("%.2lf*%.2lf÷%.2lf=\n",a,c,b);
            break;
        }
        else
        {
            printf("%.2lf*%.2lf÷%.2lf=\n",a,c,b);
            if((fp=fopen("aa.txt","a"))==NULL)
            {
            printf("不能打开文件!\n");
            exit(0);
            }
            fprintf(fp,"%.2lf*%.2lf÷%.2lf=\n",a,c,b);
            fclose(fp);break;
        }
        }
    default :break;
    }
}

void random_3(double a,double b,double c,double d,int sign) //随机产生三个运算符的算式

void random_3(double a,double b,double c,double d,int sign) //随机产生三个运算符的算式
{
    int r;
    r=rand()%4+1;
    switch(r)
    {
    case 1:
        {
            if(sign==0 )
            {
                printf("%.2lf+%.2lf-%.2lf*%.2lf=\n",a,b,c,d);
                break;
            }
            else
            {
                printf("%.2lf+%.2lf-%.2lf*%.2lf=\n",a,b,c,d);
                if((fp=fopen("aa.txt","a"))==NULL)
                {
                printf("不能打开文件!\n");
                exit(0);
                }
                fprintf(fp,"%.2lf+%.2lf-%.2lf*%.2lf=\n",a,b,c,d);
                fclose(fp);break;
            }
            }
    case 2:
        {
        if(sign==0)
        {
            printf("%.2lf*%.2lf+%.2lf*%.2lf=\n",a,b,c,d);
            break;
        }
        else
        {
             printf("%.2lf*%.2lf+%.2lf*%.2lf=\n",a,b,c,d);
             if((fp=fopen("aa.txt","a"))==NULL)
             {
             printf("不能打开文件!\n");
             exit(0);
             }
             fprintf(fp,"%.2lf*%.2lf+%.2lf*%.2lf=\n",a,b,c,d);
             fclose(fp);break;
        }
       }
    case 3:
        {
            if(sign==0)
            {
                printf("%.2lf÷%.2lf*%.2lf+%.2lf=\n",a,b,c,d);
                break;
            }
            else
            {
                printf("%.2lf÷%.2lf*%.2lf+%.2lf=\n",a,b,c,d);
                if((fp=fopen("aa.txt","a"))==NULL)
                {
                printf("不能打开文件!\n");
                exit(0);
                }
                fprintf(fp,"%.2lf÷%.2lf*%.2lf+%.2lf=\n",a,b,c,d);
                fclose(fp);break;
            }
        }
   case 4:
       {
       if(sign==0)
       {
           printf("%.2lf*%.2lf-%.2lf÷%.2lf=\n",a,b,c,d);
           break;
       }
       else
       {
           printf("%.2lf*%.2lf-%.2lf÷%.2lf=\n",a,b,c,d);
           if((fp=fopen("aa.txt","a"))==NULL)
           {
           printf("不能打开文件!\n");
           exit(0);
           }
           fprintf(fp,"%.2lf*%.2lf-%.2lf÷%.2lf=\n",a,b,c,d);
           fclose(fp);break;
       }
       }
    default :break;
    }

}

void random_33(double a,double b,double c,double d,int sign) //随机产生含三个运算符的带括号的算式

void random_33(double a,double b,double c,double d,int sign)//随机产生含三个运算符的带括号的算式
{
    int r;
    r=rand()%7+1;
    switch(r)
    {
    case 1:
        {
        if(sign==0)
        {
            printf("%.2lf+(%.2lf-%.2lf)*%.2lf=\n",a,b,c,d);
            break;
        }
        else
        {
            printf("%.2lf+(%.2lf-%.2lf)*%.2lf=\n",a,b,c,d);
            if((fp=fopen("aa.txt","a"))==NULL)
            {
            printf("不能打开文件!\n");
            exit(0);
            }
            fprintf(fp,"%.2lf+(%.2lf-%.2lf)*%.2lf=\n",a,b,c,d);
            fclose(fp);break;
        }
        }
    case 2:
        {
        if(sign==0)
        {
            printf("%.2lf*(%.2lf÷%.2lf)*%.2lf=\n",a,c,b,d);
            break;
        }
        else
        {
            printf("%.2lf*(%.2lf÷%.2lf)*%.2lf=\n",a,c,b,d);
            if((fp=fopen("aa.txt","a"))==NULL)
            {
            printf("不能打开文件!\n");
            exit(0);
            }
            fprintf(fp,"%.2lf*(%.2lf÷%.2lf)*%.2lf=\n",a,c,b,d);
            fclose(fp);break;
        }
        }
    case 3:
        {
            if(sign==0)
            {
                printf("%.2lf÷%.2lf*(%.2lf+%.2lf)=\n",a,b,c,d);
                break;
            }
            else
            {
                printf("%.2lf÷%.2lf*(%.2lf+%.2lf)=\n",a,b,c,d);
                if((fp=fopen("aa.txt","a"))==NULL)
                {
                 printf("不能打开文件!\n");
                 exit(0);
                }
                fprintf(fp,"%.2lf÷%.2lf*(%.2lf+%.2lf)=\n",a,b,c,d);
                fclose(fp);break;
            }
        }
    case 4:
        {
        if(sign==0)
        {
            printf("%.2lf+(%.2lf*%.2lf)÷%.2lf=\n",a,b,c,d);
            break;
        }
        else
        {
            printf("%.2lf+(%.2lf*%.2lf)÷%.2lf=\n",a,b,c,d);
            if((fp=fopen("aa.txt","a"))==NULL)
            {
            printf("不能打开文件!\n");
            exit(0);
            }
            fprintf(fp,"%.2lf+(%.2lf*%.2lf)÷%.2lf=\n",a,b,c,d);
            fclose(fp);break;
        }
        }
    case 5:
        {
        if(sign==0)
        {
            printf("%.2lf-(%.2lf+%.2lf*%.2lf)=\n",a,b,c,d);
            break;
        }
        else
        {
            printf("%.2lf-(%.2lf+%.2lf*%.2lf)=\n",a,b,c,d);
            if((fp=fopen("aa.txt","a"))==NULL)
            {
            printf("不能打开文件!\n");
            exit(0);
            }
            fprintf(fp,"%.2lf-(%.2lf+%.2lf*%.2lf)=\n",a,b,c,d);
            fclose(fp);break;
        }
        }
    case 6:
        {
        if(sign==0)
        {
            printf("(%.2lf+%.2lf-%.2lf)*%.2lf=\n",a,b,c,d);
            break;
        }
        else
        {
            printf("(%.2lf+%.2lf-%.2lf)*%.2lf=\n",a,b,c,d);
            if((fp=fopen("aa.txt","a"))==NULL)
            {
            printf("不能打开文件!\n");
            exit(0);
            }
            fprintf(fp,"(%.2lf+%.2lf-%.2lf)*%.2lf=\n",a,b,c,d);
            fclose(fp);break;
        }
        }

    case 7:
        {
        if(sign==0)
        {
            printf("%.2lf*(%.2lf+%.2lf÷%.2lf)=\n",a,b,c,d);
            break;
        }
        else
        {
             printf("%.2lf*(%.2lf+%.2lf÷%.2lf)=\n",a,b,c,d);
             if((fp=fopen("aa.txt","a"))==NULL)
             {
             printf("不能打开文件!\n");
             exit(0);
             }
             fprintf(fp,"%.2lf*(%.2lf+%.2lf÷%.2lf)=\n",a,b,c,d);
             fclose(fp);break;
    default :break;
        }
       }
    }

}

混合运算模块:.
void mix(double a,double b,double c,double d,int file)

void mix(double a,double b,double c,double d,int file)
{
    int num;
    int flag;  //为0不带括号,为其他带括号
    int sign;
    sign = file;
    num=rand()%2+2;  //运算符的数量
    printf("你已经进入混合运算,请选择是否带括号(0不带括号,其他数字带括号):");
    scanf("%d",&flag);
         if(flag==0)
      {
        switch(num)
        {
        case 2:random_2(a,b,c,sign);break;
        case 3:random_3(a,b,c,d,sign);break;
        default :break;
        }
      }
         if(flag!=0)
         random_33(a,b,c,d,sign);
}

发现问题:

通过与领航员的交流,我们发现了以下几个问题:
1.括号判断语句的位置有问题,每次进行混合运算前需要进行判断是否带括号;
2.随机数小数只是0.xx而无法生成x.xx的形式;
3.最大值只能为10或100,不够灵活
4.随机数生成种子不变
5.如果输入无效选项,无提示的问题

随后与领航员合作,解决了这些问题,并对代码进行了优化,解决了部分模块代码冗长且不高效的问题
具体解决办法请看领航员牛斌帅的博客 https://www.cnblogs.com/nbsdbk/p/10787254.html

总结:

1.整个项目用了大约两天的时间。看到两个题目,对本题有解题思路,但是对电梯调度算法没有太多的想法,而且不知道多部电梯该如何同时控制。
课后有时间需要对这部分进行思考,并进行解决。
2.由于我选择的是C语言,所以在进行界面图形化的时候遇到了部分问题,而且至今没有解决。这真的很尴尬。课后需要进一步研究。
3.对自己的代码不能静下心来进行审查。很多错误在测试的时候就应该察觉出来,但是事实上这些错误是领航员在帮我审查代码时候检查出来的。日后
应该改掉这个毛病。静下心来审查自己的代码,争取在自查时就把错误检查出来。
4.领航员这个角色真的非常重要。在编码时领航员就不断为我提供思路,并帮我检查语法或逻辑错误。编码结束后进行代码检测以及再次审查,并进一步优化代码。
如果没有领航员,这次作业可能不会快速的完成,质量也不会这么好。在结对编程中我发现我们能够更加专注,并提高解决问题的效率,而且减少了错误的发生,
要知道错误发现的越早,修复成本越低,更不用提无形中促进了个人知识的提高与传递,友谊也在不知不觉中巩固。在这里感谢我的领航员牛斌帅同学。

标签:fp,结对,%.,double,2lf,break,软件工程,2018,printf
来源: https://www.cnblogs.com/FangXu1998/p/10817856.html