一、设计思想
1.为了保证题目避免重复,我采用了srand函数来实现;
2.可定制(数量/打印方式)
定制数量:手动输入一个数n,然后把原来循环中的固定的数30,改成n,然后自动出题。
打印方式:可以自己选择每行可以打印几个
3.可以控制下列参数:
(1)是否有乘除法:通过编写两个函数来实现,一个函数带乘除,另一个函数不带乘除。通过提示来选择是否有乘除即可。
(2)数值范围:可以控制出的四则运算的题目是几进制的,就用rand()%f,通过输入f的值来实现。
(3)加减有无负数:保证减法无负数,就要做到被减数大于减数,可以把随机产生的两个数进行比较,让最大的做被减数;有负数即不用比较两个数的大小,直接产生即可;
(4)打印中每行的间隔可调整:只要再换行时用一个循环语句,循环输出endl即可。
由于能力有限,其余四个功能:{是否有括号,是否支持分数(真分数,假分数……),是否支持小数(精确到多少位),打印中每行的间隔可调整;}尚未实现
二、代码
下面是我不太成熟的代码:
1 #include<iostream.h> 2 #include<stdlib.h> 3 #include<time.h> 4 5 void hycc() 6 { 7 int f;//定义要测试的是四则运算是几进制 8 cout<<"请输入要测试的四则运算是几进制?"<<endl; 9 cin>>f; 10 int x,y,z,t; //x,y分别表示所产生的两个数,z来控制做加减乘除 11 int e;//输入每行算数题的个数 12 srand(time(NULL)); 13 int n; 14 int b;//表示有无负数 15 int a;//用来输入行间距 16 cout<<"需要列出多少到数学题?"<<endl; 17 cin>>n; //n代表出题的个数 18 cout<<"加减有无负数?(0代表有负数,1代表无负数)"<<endl; 19 cin>>b; 20 cout<<"每行需要打印几个算数题?"<<endl; 21 cin>>e; 22 cout<<"打印时行间距是多少?"<<endl; 23 cin>>a; 24 25 cout<<"********************************"<<endl; 26 for(int i=0;i<n;i++) 27 { 28 x=rand()%f; 29 y=rand()%f; 30 z=rand()%4; 31 switch(z) 32 { 33 case 0: 34 cout<<i+1<<"、 "<<x<<"+"<<y<<"="<<" "; 35 break; 36 37 case 1: 38 if(b==1) 39 { 40 if(x<y) 41 { 42 t=x; 43 x=y; 44 y=t; 45 } 46 cout<<i+1<<"、 "<<x<<"-"<<y<<"="<<" "; 47 break; 48 } 49 else if(b==0) 50 { 51 cout<<i+1<<"、 "<<x<<"-"<<y<<"="<<" "; 52 } 53 case 2: 54 cout<<i+1<<"、 "<<x<<"*"<<y<<"="<<" "; 55 break; 56 case 3: 57 if(y!=0) 58 { 59 cout<<i+1<<"、 "<<x<<"/"<<y<<"="<<" "; 60 } 61 else 62 { 63 i=i-1; 64 } 65 break; 66 default: 67 cout<<"超出测试范围"<<endl; 68 break; 69 } 70 if((i+1)%e==0) 71 { 72 for(int c=0;c<=a;c++) 73 { 74 cout<<endl; 75 } 76 } 77 if((i+1)==n) 78 { 79 cout<<endl; 80 } 81 } 82 } 83 84 void bhycc() 85 { 86 int f; 87 cout<<"请输入要测试的四则运算是几进制?"<<endl; 88 cin>>f; 89 int e;//输入每行算数题的个数 90 int x,y,z,t; //x,y分别表示所产生的两个数,z来控制做加减乘除 91 srand(time(NULL)); 92 int n;//n代表出题个数 93 int b;//代表加减有无负数 94 int a;//用来输入行间距 95 cout<<"需要列出多少到数学题"<<endl; 96 cin>>n; //n代表出题的个 97 cout<<"加减有无负数?(0代表有负数,1代表无负数)"<<endl; 98 cin>>b; 99 cout<<"每行需要打印几个算数题?"<<endl; 100 cin>>e; 101 cout<<"打印时行间距是多少?"<<endl; 102 cin>>a; 103 cout<<"********************************"<<endl; 104 for(int i=0;i<n;i++) 105 { 106 x=rand()%f; 107 y=rand()%f; 108 z=rand()%2; 109 switch(z) 110 { 111 case 0: 112 cout<<i+1<<"、 "<<x<<"+"<<y<<"="<<" "; 113 break; 114 case 1: 115 if(b==1) 116 { 117 if(x<y) 118 { 119 t=x; 120 x=y; 121 y=t; 122 } 123 cout<<i+1<<"、 "<<x<<"-"<<y<<"="<<" "; 124 } 125 else if(b==0) 126 { 127 cout<<i+1<<"、 "<<x<<"-"<<y<<"="<<" "; 128 } 129 break; 130 default: 131 cout<<"超出测试范围"<<endl; 132 break; 133 } 134 if((i+1)%e==0) 135 { 136 for(int c=0;c<=a;c++) 137 { 138 cout<<endl; 139 } 140 } 141 if((i+1)==n) 142 { 143 cout<<endl; 144 } 145 } 146 } 147 148 149 int main() 150 { 151 152 char ch; 153 cout<<"是否支持乘除?(Y/N)"<<endl; 154 cin>>ch; 155 if(ch=='Y'||ch=='y') 156 { 157 hycc(); 158 cout<<"********************************"<<endl; 159 } 160 161 else if(ch=='N'||ch=='n') 162 { 163 bhycc(); 164 cout<<"********************************"<<endl; 165 } 166 else 167 { 168 cout<<"输入错误,无法为您出题!"<<endl; 169 } 170 171 return 0; 172 }
三、运行结果
四、实验总结
虽然我的程序实现了一部分功能,但是由于我不会定义全局变量,还有一些功能尚未实现;而且在编写程序时遇到的最大的问题就是不会函数调用;有的功能如何实现我还根本没有思路,以后还需要多加练习。