软件工程课后作业一之30道随机四则运算程序2测试

对上次程序进行多次测试过程结果如下:

#include<iostream.h>
#include<stdlib.h>
#include<time.h>
void display(int number,int column,int mul,int rage,int neg,int remainder)//先自定义输出函数
{
	int first[1000],second[1000],opt[1000];//分别代表第一个数、第二数和运算符
	for(int i=0;i<number;i++)//随机两个生成运算操作数
	{  
	    int m=1;//避免题目重复并初始化
		first[i]=rand()%rage;//随机产生第一个数
		second[i]=rand()%rage;//随机产生第二个数
		if(mul==0)//没有乘除法
		{	
			opt[i]=rand()%2;//随机生成0~1的数字,分别表示加减
		}
		if(mul==1)
		{
			opt[i]=rand()%4;//随机生成0~3的数字,分别表示加减乘除
		}
		for(int j=0;j<i;j++)
		{
			if(first[j]==first[i]&&second[j]==second[i]&&opt[j]==opt[i])//比较新产生的算式与原来的是否重复
			{
				i=i-1;
				m=0;
			}
		}
		while(m)//若算式都不重复则输出
		{
			switch(opt[i])
			{
			case 0:
				cout<<first[i]<<"+"<<second[i]<<"=";break;
			case 1:
				if(neg==0)//0表示减法结果不允许出现负数,1表示允许出现负数
				{
					int temp;//中间变量
					if(first[i]<second[i])
					{
						temp=first[i];
						first[i]=second[i];
						second[i]=temp;
					}
					cout<<first[i]<<"-"<<second[i]<<"=";break;
				}
				else
				{
					cout<<first[i]<<"-"<<second[i]<<"=";break;
				}
			case 2:
				cout<<first[i]<<"*"<<second[i]<<"=";break;
			case 3:
				if(second[i]==0)//避免分母为零的处理
				{   
					i=i-1;break;
				}
				else
				{
					if(remainder==0)//0表示除法不允许余数
				{
					if(first[i]%second[i]==0)
					{
						cout<<first[i]<<"/"<<second[i]<<"=";break;
					}
					else
					{
						i=i-1;break;
					}
				}
				else if(remainder==1)//1表示除法允许有余数
				{
					if(first[i]%second[i]!=0)
					{
						cout<<first[i]<<"/"<<second[i]<<"=";break;
					}
					else
					{
						i=i-1;break;
					}
				}
				}
			}
			if((i+1)%column==0)
			{
				cout<<endl;
			}
			else
			{
				cout<<"\t";
			}
			break;//跳出循环
		}
	}
}
void main()
{
	srand((unsigned) time(NULL));//初始化随机数发生器,使得每次运行生成的随机数不同
	int number;//定制题目数量
	int column;//控制输出的列数
	int mul;//是否需要乘除法
	int rage;//控制数值范围
	int neg;//控制减法结果是否允许有负数
	int remainder;//控制除法是否允许有余数
	cout<<"请输入要打印的题目数量:";
	cin>>number;
	cout<<endl;
	cout<<"请输入要输出的列数(1-10):";
	cin>>column;
	cout<<endl;
    cout<<"请输入正整数的数值范围(即最大数):";
	cin>>rage;
	cout<<endl;
	cout<<"是否有乘除法(0表示没有;1表示有):";
	cin>>mul;
	cout<<endl;
	if(mul==1)//有乘除法时继续选择是否除法有无余数,否则没必要选择除法有无余数
	{
		cout<<"除法有无余数(0表示没有;1表示有):";
	    cin>>remainder;
	}
	else
	{
		remainder=1;
	}
	cout<<endl;
	cout<<"减法有无负数(0表示没有;1表示有):";
	cin>>neg;
	cout<<endl;
	display(number,column,mul,rage,neg,remainder);//调用函数
}

  当打印数量输入负数时,结果如下:

当打印数量输入字母时,结果如下:

当请输入正整数的数值范围为1000000时,不能显示超过65536的数,结果如下:

当请输入要输出的列数<1-10>为11时,最多显示10列,结果如下

所以将相关主函数代码修改下,提示用户若输入错误则提示重新输入,以当打印数量为负数时为例,相关截图和代码如下:

void main()
{
	srand((unsigned) time(NULL));//初始化随机数发生器,使得每次运行生成的随机数不同
	int number;//定制题目数量
	int column;//控制输出的列数
	int mul;//是否需要乘除法
	int rage;//控制数值范围
	int neg;//控制减法结果是否允许有负数
	int remainder;//控制除法是否允许有余数
	cout<<"请输入要打印的题目数量:";
	cin>>number;
	if(number>0)
	{
		cout<<endl;
		cout<<"请输入要输出的列数(1-10):";
		cin>>column;
		cout<<endl;
		cout<<"请输入正整数的数值范围(即最大数):";
		cin>>rage;
		cout<<endl;
		cout<<"是否有乘除法(0表示没有;1表示有):";
		cin>>mul;
		cout<<endl;
		if(mul==1)//有乘除法时继续选择是否除法有无余数,否则没必要选择除法有无余数
		{
			cout<<"除法有无余数(0表示没有;1表示有):";
			cin>>remainder;
		}
		else
		{
			remainder=1;
		}
		cout<<endl;
		cout<<"减法有无负数(0表示没有;1表示有):";
		cin>>neg;
		cout<<endl;
	}
	else
	{
		cout<<"输入错误,请重新输入!"<<endl;
        cout<<"请输入要打印的题目数量:";
		cin>>number;
		cout<<endl;
		cout<<"请输入要输出的列数(1-10):";
		cin>>column;
		cout<<endl;
        cout<<"请输入正整数的数值范围(即最大数):";
		cin>>rage;
		cout<<endl;
		cout<<"是否有乘除法(0表示没有;1表示有):";
		cin>>mul;
		cout<<endl;
		if(mul==1)//有乘除法时继续选择是否除法有无余数,否则没必要选择除法有无余数
		{
			cout<<"除法有无余数(0表示没有;1表示有):";
			cin>>remainder;
		}
		else
		{
			remainder=1;
		}
		cout<<endl;
		cout<<"减法有无负数(0表示没有;1表示有):";
		cin>>neg;
		cout<<endl;
	}
	display(number,column,mul,rage,neg,remainder);//调用函数
}

  

总结:

这次测试实验发现了程序的一些不足,原因可能是当时编写程序时没考虑所有可能出现的情况,代码给用户提示的还不够充分,今后要吸取经验,尽量做到完善。

posted @ 2015-03-16 16:40  computer有前途  阅读(131)  评论(0编辑  收藏  举报