软件工程第二次作业 四则运算
需求分析:
设计出一个程序,可以自动生成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: