设计思想:
1,定义二维数组,生成随机数后在数组内进行依次比较从而避免重复
2,循环体终止条件可定义从而可以定义数量
3,控制生成符号的随机数从而控制有没有乘除法
4,控制生成随机数从而控制数值范围
5,定义全局变量控制加减有无负数,控制随机数的生成范围
6,通过全局变量控制是否有余数生成,在除法部分进行判断
程序源代码:
1 #include<iostream> 2 #include<time.h> 3 using namespace std; 4 5 void output(int a,int b,int c,int d,int e) 6 { 7 for(int i=a;i>1;i--) 8 { 9 if(a%i==0&&b%i==0) 10 { 11 a=a/i; 12 b=b/i; 13 break; 14 } 15 } 16 for(int i=c;i>1;i--) 17 { 18 if(c%i==0&&d%i==0) 19 { 20 c=c/i; 21 d=d/i; 22 break; 23 } 24 } 25 switch(e) 26 { 27 case 0:cout<<"("<<a<<"/"<<b<<")"<<"+"<<"("<<c<<"/"<<d<<")"<<"=?";break; 28 case 1:cout<<"("<<a<<"/"<<b<<")"<<"-"<<"("<<c<<"/"<<d<<")"<<"=?";break; 29 case 2:cout<<"("<<a<<"/"<<b<<")"<<"*"<<"("<<c<<"/"<<d<<")"<<"=?";break; 30 case 3:cout<<"("<<a<<"/"<<b<<")"<<"/"<<"("<<c<<"/"<<d<<")"<<"=?";break; 31 } 32 } 33 void main() 34 { 35 int z[30][3],x[30][5],m; 36 int cheng=1,kuo,ma,mi,jia=1,yu=1,amount; 37 cout<<"请定义以下参数:"; 38 cout<<"生成多少个式子?"; 39 cin>>amount; 40 cout<<"是否有乘除法?(0没有1有)"; 41 cin>>cheng; 42 cout<<"数值范围?(最大和最小)"; 43 cin>>ma; 44 cin>>mi; 45 cout<<"加减有无负数?(1可以有0不能有)"; 46 cin>>jia; 47 cout<<"除法有无余数?(可以有0没有)"; 48 cin>>yu; 49 srand((unsigned)time(NULL));//产生随机种子 50 for(int i=0;i<amount;i++) 51 { 52 cout<<"题目"<<i+1<<"为:"; 53 int e=rand()%2;//两种情况,当为0时为整数四则运算,当为一时为真分数 54 if(e==0) 55 { 56 int a=rand()%ma+mi; 57 int b=rand()%ma+mi; 58 int c=rand()%4;//产生加减乘除四种情况 59 if(i>1) 60 { 61 while(m==1) 62 { 63 for(int n=0;n<i;n++) 64 { 65 if(z[i][1]==z[n][1]&&z[i][1]==z[n][2]&&z[i][2]==z[n][2]) 66 { 67 int a=rand()%ma+mi; 68 int b=rand()%ma+mi; 69 int c=rand()%4; 70 n=0; 71 } 72 if() 73 } 74 } 75 } 76 z[i][1]=a; 77 z[i][2]=b; 78 z[i][3]=c; 79 if(cheng==0) 80 { 81 c=rand()%2; 82 } 83 switch(c) 84 { 85 case 0: cout<<a<<"+"<<b<<"=?";break; 86 87 case 1: if(jia==0) 88 { 89 while((a-b)<0) 90 { 91 srand((unsigned)time(NULL)); 92 b=rand()%ma+mi; 93 } 94 } 95 cout<<a<<"-"<<b<<"=?";break; 96 case 2: cout<<a<<"*"<<b<<"=?";break; 97 98 case 3: 99 if(yu==0) 100 { 101 while(a%b!=0) 102 { 103 srand((unsigned)time(NULL)); 104 b=rand()%100; 105 } 106 } 107 while(b==0)//去掉分母为零的情况 108 { 109 srand((unsigned)time(NULL)); 110 b=rand()%100; 111 } 112 cout<<a<<"/"<<b<<"=?"; 113 114 } 115 cout<<endl; 116 } 117 else 118 { 119 int a=rand()%100; 120 int b=rand()%100; 121 int d=rand()%100; 122 int e=rand()%100; 123 124 int c=rand()%4; 125 126 if(cheng==0) 127 { 128 c=rand()%2; 129 } 130 if(b==0)//去掉分母为零的情况 131 { 132 b=rand()%100; 133 } 134 if(e==0) 135 { 136 e=rand()%100; 137 } 138 if(a>b)//调整为真分数 139 { 140 int x; 141 x=a; 142 a=b; 143 b=x; 144 } 145 if(d>e)//调整为真分数 146 { 147 int x; 148 x=e; 149 e=d; 150 d=x; 151 } 152 switch(c) 153 { 154 case 0: output(a,b,d,e,c);break; 155 156 case 1: 157 if(jia==0) 158 { 159 while((double(a/b)-double(d/e))<0) 160 { 161 srand((unsigned)time(NULL)); 162 a=rand()%100; 163 d=rand()%100; 164 } 165 } 166 output(a,b,d,e,c);break; 167 168 case 2: output(a,b,d,e,c);break; 169 170 case 3: output(a,b,d,e,c);break; 171 172 } 173 cout<<endl; 174 } 175 } 176 }
运行结果截图:
psp 0级项目计划日志:
日期 | 课堂(分钟) | 读书(分钟) | 博客(分钟) | 编程(分钟) | 日总结(分钟) |
周一 | 120 | 40 | 30 | 190 | |
周二 | 40 | 40 | |||
周三 | 30 | 30 | |||
周四 | |||||
周五 | |||||
周六 | 60 | 40 | 100 | ||
周日 | 40 | 60 | 120 | 220 | |
周总结 | 120 | 120 | 120 | 220 | 580 |
事件记录日志:
时间名称 | 开始时间 | 结束时间 | 汇总时间 |
上课 | 周一上午八点 | 周一上午十点 | 两小时 |
阅读 |
周一下午三点 周二下午四点十五 |
周一下午四点 周二下午五点 |
一个小时四十五分钟 |
写博客 | 周日下午四点 | 周日下午六点 | 两个小时 |
编程 |
周日下午三点 周三晚上七点 |
周日下午五点 周三晚上九点 |
四小时 |
汇总 | 九小时四十五分钟 |
缺陷记录日志:
日期 | 编号 | 类型 | 引入 | 排除 | 修复时间 | 修复 |
周二 | 1 | 随机数生成的范围控制 | 5 | 在生成随机数加上输入的数字范围 | ||
周日 | 2 | 随机生成的分数显示出来要是最简模式 | 20 | 另外定义函数执行分数的输出部分 |
仍然存在的问题:不能解决重复还有括号的问题