标签:
一、程序设计题目要求和设计思想
1、题目
(1)、题目避免重复;
(2)、可定制(数量/打印方式);
(3)、可以控制下列参数: 是否有乘除法、是否有括号、 数值范围、加减有无负数、除法有无余数、
否支持分数 (真分数, 假分数, …)、是否支持小数 (精确到多少位)、打印中每行的间隔可调整;
2、设计思想
(1)、将随机生成的算式保存起来,方便后续生成的算式进行比对,后续产生的算式与之前所有算式
比对,当结果一致说明算是重复,应当排除。
(2)、产生算式的函数进行循环操作,引进控制参数,操作数与行数以及间隔由用户决定。
(3)、一系列参数通过一组型参变量传递给产生式函数,产生符合要求的算式。
3、程序源代码(本程序由C/C++编程语言编写,编辑器为VC++6.0):
#include<iostream.h> #include<conio.h> #include<stdlib.h> #include<time.h> #include <iomanip> void Rand_Cal_one(int digits[],char characters[],int range) //随机产生运算数(包含乘除) { for(int i=0;i<6;i++){ if(i<3){ digits[i]=rand()%range;//生成四则运算的计算随机数 continue; } else if(i<5){ digits[i]=rand()%4;//随机产生标志判断计算符号 continue; } else{ digits[i]=rand()%2;//随机产生标志数判断括号位置 } } } void Rand_Cal_two(int digits[],char characters[],int range) //随机产生运算数(不含乘除) { for(int i=0;i<6;i++){ if(i<3){ digits[i]=rand()%range;//生成四则运算的计算随机数 continue; } else if(i<5){ digits[i]=rand()%2;//随机产生标志判断计算符号 continue; } else{ digits[i]=rand()%2;//随机产生标志数判断括号位置 } } } void Demo(int digits[],char characters[],char * Arithmetic_arr[],int m,int n) //产生符合要求的运算式 { char character1,character2; int character3,character4,range; cout<<"请输入数字范围(最大值):"<<endl; cin>>range; cout<<"请选择是否带括号: Y表示带括号,N表示不带括号"<<endl; cin>>character1; cout<<"请选择是否有乘除: Y表示有乘除,N表示无乘除"<<endl; cin>>character2; cout<<"请选择每行容纳算是数量: 1 or 2"<<endl; cin>>character3; if(character3!=1){ cout<<"请选择行间距(tab): 1 or 2 or 3"<<endl; cin>>character4; } cout<<"-------------------"<<m<<"道算式题如下-------------------------"<<endl; for(int k=0; k<m; k++){ int flag=k; P: if (character2==‘Y‘){ Rand_Cal_one(digits,characters,range); } else{ Rand_Cal_two(digits,characters,range); } Arithmetic_arr[k]=new char[n]; if(k!=0){ for(int i=0;i<k;i++){ if( digits[0]==Arithmetic_arr[i][0] //避免重复 && characters[digits[3]]==Arithmetic_arr[i][1] && digits[1]==Arithmetic_arr[i][2] && characters[digits[4]]==Arithmetic_arr[i][3] && digits[2]==Arithmetic_arr[i][2]) goto P; } } Arithmetic_arr[k][0]=digits[0]; Arithmetic_arr[k][1]=characters[digits[3]]; Arithmetic_arr[k][2]=digits[1]; Arithmetic_arr[k][3]=characters[digits[4]]; Arithmetic_arr[k][4]=digits[2]; if (character1==‘Y‘){ switch(digits[5]){ case 0: if((characters[digits[3]]==‘+‘||characters[digits[3]]==‘-‘) &&(characters[digits[4]]==‘*‘||characters[digits[4]]==‘/‘)) { if (character1==‘Y‘){ cout<<"("; if((int)Arithmetic_arr[k][0]<0) { cout<<"("<<(int)Arithmetic_arr[k][0]<<")"; } else cout<<(int)Arithmetic_arr[k][0]; cout<<Arithmetic_arr[k][1]; if((int)Arithmetic_arr[k][2]<0) { cout<<"("<<(int)Arithmetic_arr[k][2]<<")"; } else cout<<(int)Arithmetic_arr[k][2]; cout<<")"<<Arithmetic_arr[k][3]; if((int)Arithmetic_arr[k][4]<0) { cout<<"("<<(int)Arithmetic_arr[k][4]<<")"; } else cout<<(int)Arithmetic_arr[k][4]; cout<<"="; } switch(character4){ case 1:cout<<" ";break; case 2:cout<<" ";break; case 3:cout<<" ";break; default:cout<<" ";break; } if(character3==1){ cout<<endl; } else{ if(flag%2==1)cout<<endl; } break; } else goto P; case 1: if(characters[digits[3]]==‘*‘||characters[digits[3]]==‘/‘ ||(characters[digits[3]]==‘+‘||characters[digits[3]]==‘-‘) &&(characters[digits[4]]==‘+‘||characters[digits[4]]==‘-‘)) { if((int)Arithmetic_arr[k][0]<0) { cout<<"("<<(int)Arithmetic_arr[k][0]<<")"; } else cout<<(int)Arithmetic_arr[k][0]; cout<<Arithmetic_arr[k][1]; cout<<"("; if((int)Arithmetic_arr[k][2]<0) { cout<<"("<<(int)Arithmetic_arr[k][2]<<")"; } else cout<<(int)Arithmetic_arr[k][2]; cout<<Arithmetic_arr[k][3]; if((int)Arithmetic_arr[k][4]<0) { cout<<"("<<(int)Arithmetic_arr[k][4]<<")"; } else cout<<(int)Arithmetic_arr[k][4]; cout<<")"<<"="; switch(character4){ case 1:cout<<" ";break; case 2:cout<<" ";break; case 3:cout<<" ";break; default:cout<<" ";break; } if(character3==1){ cout<<endl; } else{ if(flag%2==1)cout<<endl; } break; } else goto P; } } else{ if((int)Arithmetic_arr[k][0]<0) { cout<<"("<<(int)Arithmetic_arr[k][0]<<")"; } else cout<<(int)Arithmetic_arr[k][0]; cout<<Arithmetic_arr[k][1]; if((int)Arithmetic_arr[k][2]<0) { cout<<"("<<(int)Arithmetic_arr[k][2]<<")"; } else cout<<(int)Arithmetic_arr[k][2]; cout<<Arithmetic_arr[k][3]; if((int)Arithmetic_arr[k][4]<0) { cout<<"("<<(int)Arithmetic_arr[k][4]<<")"; } else cout<<(int)Arithmetic_arr[k][4]; cout<<"="; switch(character4){ case 1:cout<<" ";break; case 2:cout<<" ";break; case 3:cout<<" ";break; default:cout<<" ";break; } if(character3==1){ cout<<endl; } else{ if(flag%2==1)cout<<endl; } } } } int main() { while(1) { cout<<"------------------小学生四则运算产生器-------------------"<<endl; srand((unsigned)time(NULL)); //为rand()函数生成不同的随机种子 int num1,num2=5; cout<<"请输入定制数目(输入零结束):"<<endl; //题目数 cin>>num1; if(num1==0){ cout<<"---------------------谢谢使用!!!----------------------"<<endl;; exit(0); } char ** Arithmetic_arr=new char*[num1]; //存放运算式动态数组 int digits[6]; //存放计算的随机数字的数组,前三个为随机运算数字,第四第 //五为随机产生运算符号标志数,第六为判断括号位置标志数。 char characters[6]={‘+‘,‘-‘,‘*‘,‘/‘,‘(‘,‘)‘}; //存放加减乘除及括号等字符数组 Demo(digits,characters,Arithmetic_arr,num1,num2); //是否带括号 delete [] Arithmetic_arr; //释放动态数组空间 cout<<"------------------请输入任意键继续!---------------------"<<endl; getch(); system("CLS"); } return 0; }
4、 程序运行结果(截图):
5、程序结果分析:
1.程序产生的算式对数学要素要求不够严格,没有设定除数不能为零,需要改进;
2.程序行间距设定会出现问题,不能够左对齐;
3.程序目前只能产生三个数的算式。
4.题目要求3未能全部实现。
标签:
原文地址:http://www.cnblogs.com/bill927/p/CKbill.html