软件工程第二次作业 四则运算

需求分析:
设计出一个程序,可以自动生成10道100以内的2个操作数的四则运算算式(+ - * /),

功能实现:
基本功能:
(1)自动生成10道100以内的2个操作数的四则运算算式(+ - * /),要求运算结果也在100以内
(2)题目数量可定制
(3)相关参数可控制
是否包含乘法和除法
操作数数值范围可控(如操作数 在100以内 还是1000以内)
操作数是否含负数   
扩展功能: 
(4)剔除重复算式。 2 + 3 = 和 2 + 3 = 是重复算式 2 + 3 = 和 3 + 2 = 不属于重复算式
(5)生成的运算题存储到外部文件result.txt中

设计实现:
使用time头文件与random()函数设置时间函数,先完成最初的大体框架,再一步一步往上加功能,用switch来判断符号,用单独的函数判断是否包含乘法,除法,和负数.为了防止除法出现结果为0的情况,选用double类型

运行测试:
包括乘法和除法,不包括负数:

不包括乘法和除法,包括负数:

既包括乘法和除法,也包括负数:

将运算结果保存在外部result.txt中:

代码:

判断:

//判断是否为负数,返回整形temp2中,judgeMinusYesOrno返回值为1则包括负数,0为不包括
int judgeMinus(char MinusYesOrno,int judgeMinusYesOrno)
{
    if(MinusYesOrno == 'Y'  ||MinusYesOrno == 'y')
    {
        judgeMinusYesOrno = 1;
        return  judgeMinusYesOrno;
    }
    else if(MinusYesOrno == 'N' ||MinusYesOrno == 'n')
    {
        judgeMinusYesOrno = 0;
        return  judgeMinusYesOrno;
    }
    else
    {
        printf("请输入Y/N或者y/n");      //用户录入其他字符时返回该指令
        exit(1);
    }

}

主实现方法:

while(1)
    {
        double count1 = rand() % countscope -(int)(countscope / 2);    //生成随机数1
        double count2 = rand() % countscope -(int)(countscope / 2);    //生成随机数2
        if(temp2 == 0 &&(count1 <0 || count2 <0))
            continue;                                                  //判断是否包括负数
        int sign =rand() % 4 + 1;                                      //随机数字为1-4,1为+,2为-,3为*,4为/
        switch(sign)                                                   //选择结构
        {
        case 1:                                                        //情况1
            result = count1 + count2;
            if(result <= 100)
            {
                printf("%.1lf + %.1lf = %.1lf\n",count1,count2,result);  //将将结果输出到外部文件
                fprintf(fp,"%.1lf + %.1lf = %.1lf\n",count1,count2,result);
                temp++;                                                 //累加器,当与用户录入的数量相等时,执行break;
                break;
            }
        case 2:                                                         //情况2
            result = count1 - count2;
            if(result <= 100)
            {
                printf("%.1lf - %.1lf = %.1lf\n",count1,count2,result);
                fprintf(fp,"%.1lf - %.1lf = %.1lf\n",count1,count2,result);
                temp++;
                break;
            }
        case 3:                                                         //情况3
            result = count1 * count2;
            if(result <= 100 && temp3 == 1)                             //temp3为判断是否包括乘除法
            {
                printf("%.1lf * %.1lf = %.1lf\n",count1,count2,result);
                fprintf(fp,"%.1lf * %.1lf = %.1lf\n",count1,count2,result);
                temp++;
                break;
            }
        case 4:                                                         //情况4
            result = count1 / count2;
            if(result <= 100 && temp3 == 1 )
            {
                printf("%.1lf / %.1lf = %.1lf\n",count1,count2,result);
                fprintf(fp,"%.1lf / %.1lf = %.1lf\n",count1,count2,result);
                temp++;
                break;
            }
        }
        if(temp ==counter)
            break;
    }

总结:
实现四则运算时还是比较简单的,但在一步一步往上加功能时,就需要一些逻辑能力了,最初我是想要分文件写的,但最后发现并不需要,大致上只需要几个函数既可以写出来,最后尝试了把所有的语句都封装成函数,main函数中只有几条函数语句的方式,但是由于循环的主方法有些难弄(事前分析不够),就只封装了怕判断负数和乘除法的函数.

psp:

posted on 2019-09-16 16:56  李基民  阅读(179)  评论(2编辑  收藏  举报