标签:
一、程序设计题目要求和设计思想
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