软工第二次结对作业

四则运算

一、题目选择

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

二、任务分工

驾驶员:叶成威
基本完成全部代码工作,程序基本实现全部要求功能,并将代码上传到Conding.net代码托管系统(此处附代码地址)中,并对导航员在本次编程工作中起到的作用给出客观评价。
领航员:金宇航(博客地址)
能够辅助驾驶员完成全部代码工作,并且为关键函数选用合适的覆盖标准设计测试用例,并编写代码进行单元自动测试,并根据上次作业的代码检查表对驾驶员的本次工作进行评价。

三、源代码

代码托管

四、函数功能

4.1生成思路

void xshu(int n,int m,int lenth,int b[],int fil)//生成
{
    if(fil==1)
    {
    FILE *fp;//建立一个文件操作指针
    fp=fopen("ceshi.txt","w");//以追加的方式建立或打开ceshi.txt,默认位置在你程序的目录下面
    srand((unsigned)time(NULL));
    int i;//生成第i行算式
    int l;//老师需要的第l个算符
    int len;//随机算式长度
    double a[50];//用小数数组代表生成的算式
    for( i=0;i<n;i++)
    {
    len=rand()%9+3;
    int j;
    j=len%2;//判断随机生成的数组的第j位是否为算符位
    if(j==0)
    len=len-1;
    for(j=0;j<len;j++)
    {
     a[j]=rand()/(double)(RAND_MAX/m);//生成数组
    }
    for(j=0;j<len;j++)
    {
        if(j%2!=0)
            {
            if((((int)a[j])%4)==3)
            Divd(&a[j+1],m);//保证除数不为0
            }
    }
    for(j=0;j<len;j++)
      {
        if(j%2!=0)
        {
            for(l=0;l<lenth;l++)
            {
                if((int)a[j]==b[l])
                {
                 Symbol((int)a[j],fp);//生成的算符符号老师要求
                 break;
                }
            }
            if(l>=lenth)
            {
            int chong,m=0;
            while(1)//生成符合老师要求的算符
            {
                chong=rand()%4;
                for(l=0;l<lenth;l++)
                {
                  if(chong==b[l])
                   {
                      m=1;
                      Symbol(chong,fp);
                      break;
                   }
                }
                if(m==1)
                {
                break;
                }
            }
        }
      }
        else
        {
            if((((int)(a[j]*10))%10)==0)//若生成的为整数,则强制转换为整数输出
            {
            fprintf(fp,"%d",(int)a[j]);
            }
            else
            {
                fprintf(fp,"%.1lf",a[j]);//输出随机生成的算数
            }
        }
      }
      fprintf(fp,"=\n");
    }
    fclose(fp);//关闭流
    }
    else
    {
    srand((unsigned)time(NULL));
    int i;//生成第i行算式
    int l;//老师需要的第l个算符
    int len;//随机算式长度
    double a[50];//用小数数组代表生成的算式
    for( i=0;i<n;i++)
    {
    len=rand()%9+3;
    int j;
    j=len%2;//判断随机生成的数组的第j位是否为算符位
    if(j==0)
    len=len-1;
    for(j=0;j<len;j++)
    {
     a[j]=rand()/(double)(RAND_MAX/m);//生成数组
    }
    for(j=0;j<len;j++)
    {
        if(j%2!=0)
            {
            if((((int)a[j])%4)==3)
            Divd(&a[j+1],m);//保证除数不为0
            }
    }
    for(j=0;j<len;j++)
      {
        if(j%2!=0)
        {
            for(l=0;l<lenth;l++)
            {
                if((int)a[j]==b[l])
                {
                 Symbol2((int)a[j]);//生成的算符符号老师要求
                 break;
                }
            }
            if(l>=lenth)
            {
            int chong,m=0;
            while(1)//生成符合老师要求的算符
            {
                chong=rand()%4;
                for(l=0;l<lenth;l++)
                {
                  if(chong==b[l])
                   {
                      m=1;
                      Symbol2(chong);
                      break;
                   }
                }
                if(m==1)
                {
                break;
                }
            }
        }
      }
        else
        {
            if((((int)(a[j]*10))%10)==0)//若生成的为整数,则强制转换为整数输出
            {
            printf("%d",(int)a[j]);
            }
            else
            {
            printf("%.1lf",a[j]);//输出随机生成的算数
            }
        }
      }
      printf("=\n");
     }
    }
}
4.2运行截图

文件输出

直接打印

五、总结

在本次任务中由我负责整体的规划。在代码编写过程中不断改进,按照用户的要求实现,使我意识到软件工程思想的重要性,在过程中遇到的问题让我反思自己在整体规划方面能力的欠缺。在今后,我会在这方面努力加强自身。在结对编程中我发现我们能够更加专注,并提高解决问题的效率而且减少了错误的发生。

posted @ 2019-05-05 12:59  天边の一片云  阅读(137)  评论(0编辑  收藏  举报