这次题目的要求是:1、题目避免重复;2、可定制(数量、打印方式);3、可以控制下列参数:是否有乘除法、是否有括号、数值范围、加减有无负数、除法有无余数。刚拿到这个题目的时候有点懵,因为要求很多,感觉很难,后来又仔细分析了一下,将题目进行分解,感觉稍微有了点思路。
首先题目避免重复的话就应该跟之前的四则运算一样用一个时间种子;然后就是打印题目的数量以及数值范围,这个可以让用户进行输入;然后可以用switch语句控制是否有乘除法,是否有括号;当有乘除法时要判断除数是否为0,为0的话就交换除数和被除数的位置;另外还要判断是否有余数,可以用求余运算,如果判断出来有余数,就可以通过被除数减去余数得到一个新的数值,然后输出的时候直接输出这个新的数值除以除数;当判断加减有无负数时,可以判断减数和被减数的大小,若被减数小于减数,则将两者交换位置,否则直接输出;当有括号时,我想的是用堆栈,但是具体怎样实现还没有想出来。
我本来是打算用2个小时的时间编出来,实际则用了3个小时还要多一点,具体代码如下:
1 //张晓菲,2016/3/12 2 //要求:1、题目避免重复; 3 // 2、可定制(数量、打印方式); 4 // 3、可以控制下列参数:是否有乘除法、是否有括号、数值范围、加减有无负数、除法有无余数。 5 6 #include7 #include 8 #include 9 #include 10 using namespace std; 11 12 void main() 13 { 14 srand( (unsigned)time( NULL ) );//时间种子防止每次产生的随机数相同 15 int num1,num2,max,oper; 16 int ran[10]; 17 int i; 18 19 cout<<"请输入要打印的数量:"; 20 cin>>num1; 21 if(num1<=0) 22 { 23 cout<<"请重新输入要打印的数量:"; 24 cin>>num1; 25 } 26 27 cout<<"请输入可以允许随机产生的最大数值:"; 28 cin>>max; 29 if(max<=0) 30 { 31 cout<<"请重新输入可以允许的最大数值:"; 32 cin>>max; 33 } 34 35 cout<<"请输入允许几个操作数:"; 36 cin>>num2; 37 if(num2<=1) 38 { 39 cout<<"请重新输入允许几个操作数(1 <=3):"; 40 cin>>num2; 41 } 42 43 cout<<"请选择是否有乘除法(1:是 0:否):"; 44 cin>>i; 45 46 for(int x=0;x
运行结果如下图:
这次是否有括号这个功能用户不能选择,没有支持分数的运算,也没让它输出到文件,还有我设定只能有两个或三个操作数,如果操作数再多的话我就不知道该怎么办了,感觉自己用的方法很笨很啰嗦,但是不知道怎么能更简单,虽然感觉自己的编程能力挺不好的,但是通过这么一次次的努力,也提升了不少,希望以后自己更加努力,然后有一个更大的提升。
时间记录: