标签:
一、设计思想
1.由于程序的功能要求较多,可以划分为多个模块实现,便于多个功能的组合
2.将小数使用生成多个随机数进行拼接的方式实现
3.为避免重复可以生成三个数组分别存放算数式的三个部分,依次比较
4.
二.源程序
1 #include <iostream> 2 #include<time.h> 3 using namespace std; 4 int main() 5 { 6 srand(time(NULL)); 7 int ph[10]; //建立捕获数组,用以存放输入的选则 8 int Pway,num1,num2; //用来表示打印方式 9 int i,j; 10 int judge; 11 do 12 { 13 cout<<"*********************欢迎登录答题系统*********************"; 14 cout<<"1.题目定制 2.打印方式"<<endl; 15 cout<<"3.算数类型 4.输出数量"<<endl; 16 printf("以下均用0表示输入“否”,用1表示输入“是”\n"); 17 printf("请输入要打印的题目数量:"); 18 scanf("%d",&ph[0]); //a[0]存放打印题的数量 19 printf("请输入打印的方式(列数):"); 20 scanf("%d",&ph[1]); //a[1]代表输入的列数 21 printf("请输入是否有乘除法:"); 22 scanf("%d",&ph[2]); //a[2]代表有无乘除法 23 printf("请输入数值范围:"); 24 scanf("%d",&ph[3]); 25 printf("请输入加减是否有负数:"); 26 scanf("%d",&ph[4]); 27 printf("请输入间隔数:"); 28 scanf("%d",&ph[6]); 29 if(ph[2] == 1) 30 { 31 printf("请输入除法的算式中是否有余数出现(0/1):"); 32 scanf("%d",&ph[5]); 33 } 34 for(i=0; i<ph[0]; i++) 35 { 36 num1 = rand()%(ph[3]+1); 37 num2 = rand()%(ph[3]+1); 38 switch(ph[2]) 39 { 40 case 0: //如果没有乘除法 41 Pway = rand()%2; //构造随机函数,输出只有加减法的运算 42 if(Pway == 0) //加法 43 { 44 printf("<%d>%d+%d=\t",i+1,num1,num2); 45 if((i+1)%ph[1] == 0) 46 { 47 printf("\n"); 48 if(ph[6]!=0) //ph[6]表示每行间隔的数量 49 { 50 for(j = 0;j<ph[6];j++) 51 { 52 printf("\n"); 53 } 54 } 55 } 56 } 57 else 58 { 59 if(ph[4] == 0) //如果不允许出现负数 60 { 61 if(num1<num2) //确定被减数大于减数 62 { 63 i = i-1; 64 } 65 else 66 { 67 printf("<%d>%d-%d=\t",i+1,num1,num2); 68 if((i+1)%ph[1] == 0) //判断是否换行 69 { 70 printf("\n"); 71 if(ph[6]!=0) //ph[6]表示每行间隔的数量 72 { 73 for(j = 0;j<ph[6];j++) 74 { 75 printf("\n"); 76 } 77 } 78 } 79 } 80 } 81 else //如果允许出现负数 82 { 83 printf("<%d>%d-%d=\t",i+1,num1,num2); 84 if((i+1)%ph[1] == 0) //判断是否换行 85 { 86 printf("\n"); 87 if(ph[6]!=0) //ph[6]表示每行间隔的数量 88 { 89 for(j = 0;j<ph[6];j++) 90 { 91 printf("\n"); 92 } 93 } 94 } 95 } 96 } 97 break; 98 case 1: //有乘除法的输出 99 Pway = rand()%4; 100 switch(Pway) 101 { 102 case 0: //加法 103 printf("<%d>%d+%d=\t",i+1,num1,num2); 104 if((i+1)%ph[1] == 0) 105 { 106 printf("\n"); 107 if(ph[6]!=0) //ph[6]表示每行间隔的数量 108 { 109 for(j = 0;j<ph[6];j++) 110 { 111 printf("\n"); 112 } 113 } 114 } 115 break; 116 case 1: 117 if(ph[4] == 0) 118 { 119 if(num1<num2) //确定被减数大于减数,其他的控制如上述减法的控制 120 { 121 i = i-1; 122 } 123 else 124 { 125 printf("<%d>%d-%d=\t",i+1,num1,num2); 126 if((i+1)%ph[1] == 0) 127 { 128 printf("\n"); 129 if(ph[6]!=0) //ph[6]表示每行间隔的数量 130 { 131 for(j = 0;j<ph[6];j++) 132 { 133 printf("\n"); 134 } 135 } 136 } 137 } 138 } 139 else 140 { 141 printf("<%d>%d-%d=\t",i+1,num1,num2); 142 if((i+1)%ph[1] == 0) 143 { 144 printf("\n"); 145 if(ph[6]!=0) //ph[6]表示每行间隔的数量 146 { 147 for(j = 0;j<ph[6];j++) 148 { 149 printf("\n"); 150 } 151 } 152 } 153 } 154 break; 155 case 2: //乘法 156 printf("<%d>%d×%d=\t",i+1,num1,num2); 157 if((i+1)%ph[1] == 0) 158 { 159 printf("\n"); 160 if(ph[6]!=0) //ph[6]表示每行间隔的数量 161 { 162 for(j = 0;j<ph[6];j++) 163 { 164 printf("\n"); 165 } 166 } 167 } 168 break; 169 case 3: //除法 170 if(num2 == 0) //除数不能为零 171 { 172 i = i - 1; 173 } 174 else 175 { 176 if(ph[5] == 1) //判断选择是否有余数,如果能有余数 177 { 178 printf("<%d>%d÷%d=\t",i+1,num1,num2); 179 if((i+1)%ph[1] == 0) 180 { 181 printf("\n"); 182 if(ph[6]!=0) //ph[6]表示每行间隔的数量 183 { 184 for(j = 0;j<ph[6];j++) 185 { 186 printf("\n"); 187 } 188 } 189 } 190 } 191 else //如果不能有余数 192 if(num1%num2!=0) 193 { 194 i = i-1; 195 } 196 else 197 { 198 printf("<%d>%d÷%d=\t",i+1,num1,num2); 199 if((i+1)%ph[1] == 0) 200 { 201 printf("\n"); 202 if(ph[6]!=0) //ph[6]表示每行间隔的数量 203 { 204 for(j = 0;j<ph[6];j++) 205 { 206 printf("\n"); 207 } 208 } 209 } 210 } 211 } 212 break; 213 default: 214 printf("出错!\n"); 215 break; 216 } 217 break; 218 default: 219 printf("出错!\n"); 220 break; 221 } 222 } 223 printf("\n"); 224 printf("是否继续打印:"); 225 scanf("%d",&judge); 226 }while(judge == 1); 227 return 0; 228 }
三.运行结果
四.感想
其实一个稍微大点的程序都是有许多的小功能模块搭建起来的,把一个大的问题细分成多个小问题,一个一个的解决,会发现事情没有想象的那么复杂。
标签:
原文地址:http://www.cnblogs.com/KaliLinux/p/4340133.html