关于随机四则运算的小程序
2015-03-12
基本上是按上一篇博文中的思想,粗略的编写了一个beta版,不足也是有的,一些判断机智,程序的健壮性有待改进。
1 #include<iostream> 2 #include<time.h> 3 using namespace std; 4 typedef struct node{ 5 int num1; 6 int num2; 7 char ope; 8 struct node *next; 9 }node,*linknode; //定义三个操作数的数据结构,用于对产生数据的记录 10 11 void Math(int num,linknode &L,int chengchu,int fanwei,int yushu); //产生数据 12 void InitList(linknode &L); //链表初始化 13 void Insertlist(linknode &L,int one,int two,char thr); //插入数据 14 int Serchlist(linknode L,int one,int two,char thr); //查询节点 15 void Printrecord(linknode &L,int hang); //输出数据 16 void menu1(); //大要求的菜单选项 17 void choice(int *n); //对用户的提供的选择 18 void menu2(); //是否有乘除法,数值范围,打印中每行的间隔可调整,除法有无余数, 19 void standerd(int *n,int *f,int *y,int *h); 20 21 void main() 22 { 23 int num=5; //出题数量 24 int chengchucan=0; 25 int fanweican=100; 26 int yushucan=0; 27 int hangcan=0; 28 linknode l; 29 InitList(l); 30 choice(&num); 31 standerd(&chengchucan,&fanweican,&yushucan,&hangcan); 32 Math(num,l,chengchucan,fanweican,yushucan); //调用函数,产生数据 33 Printrecord(l,hangcan); 34 } 35 36 void menu1() 37 { 38 cout<<"- - - - - - - - - - - 菜单- - - - - - -- - - - - - "<<endl; 39 cout<<" 1.定制出题数量 "<<endl; 40 cout<<" 2.定制打印 "<<endl; //附加功能?? 41 cout<<" 3.退出菜单 "<<endl; 42 cout<<" 4.使用说明 "<<endl; 43 cout<<"- - - - - - - ---------------二柱子- "<<endl; 44 } 45 46 void menu2() 47 { 48 cout<<"~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~菜单~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~"<<endl; 49 cout<<" 1.是否有乘除法 "<<endl; 50 cout<<" 2.数值范围 "<<endl; 51 cout<<" 3.除法有无余数 "<<endl; 52 cout<<" 4.打印中每行的间隔可调整 "<<endl; 53 cout<<" 5.退出菜单 "<<endl; 54 cout<<"~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~~ ~ ~~ ~ ~ ~ ~ ~ ~ ~ 二柱子 ~"<<endl; 55 56 } 57 58 void choice(int *n) 59 { 60 int choi,number; 61 menu1(); 62 cout<<"请输入选择"<<endl; 63 cin>>choi; 64 while(choi!=3) 65 { 66 switch(choi) 67 { 68 case 1: 69 { 70 cout<<"请输入题目数量"<<endl; 71 cin>>number; 72 *n=number; 73 menu1(); 74 cin>>choi; 75 break; 76 } 77 case 2: 78 { 79 cout<<"定制打印"<<endl; 80 menu1(); 81 cin>>choi; 82 break; 83 } 84 case 4: 85 { 86 cout<<" 使用说明书"<<endl; 87 menu1(); 88 cin>>choi; 89 break; 90 } 91 92 } 93 } 94 } 95 96 void standerd(int *chengchu,int *fanwei,int *yushu,int *hangjian) 97 { 98 int select,can1,can2,can3,can4; 99 menu2(); 100 cout<<"请输入选择"<<endl; 101 cin>>select; 102 while(select!=5) 103 { 104 switch(select) 105 { 106 case 1: //是否有乘除法 107 { 108 cout<<"请输入选择 0代表设定乘除法1代表不设定乘除法(程序默认拥有乘除法)"<<endl; 109 cin>>can1; 110 if(can1==1) 111 *chengchu=1; 112 menu2(); 113 cin>>select; 114 break; 115 } 116 case 2: //数值范围 117 { 118 cout<<"请输入 您想要的出题数值范围(程序默认数值范围为100以内)"<<endl; 119 cin>>can2; 120 *fanwei=can2; 121 menu2(); 122 cin>>select; 123 break; 124 } 125 case 3: //除法有无余数 126 { 127 cout<<"请输入选择 0代表设定允许余数1代表不允许除法有余数(程序默认会有余数)"<<endl; 128 cin>>can3; 129 *yushu=can3; 130 menu2(); 131 cin>>select; 132 break; 133 } 134 case 4: //打印中每行的间隔可调整 135 { 136 cout<<"请输入 您想要的打印题目之间的间隔(程序默认打印题目之间的间隔为0)"<<endl; 137 cin>>can4; 138 *hangjian=can4; 139 menu2(); 140 cin>>select; 141 break; 142 } 143 } 144 } 145 146 } 147 void Math(int num,linknode &L,int chengchu,int fanwei,int yushu) 148 { 149 srand(time(NULL)); 150 int a,b,c,rule; 151 char d; 152 int sancan=4; 153 int onecan=100; 154 if(chengchu==1) //对乘除参数进行判断,为1时设置参数的改变 155 sancan=2; 156 157 onecan=fanwei; //对数值范围的修改,默认为 158 for(int x=0;x<num;x++) 159 { 160 a=rand()%onecan; 161 b=rand()%onecan; 162 c=rand()%sancan; 163 //cout<<"连续输入三个数"<<endl; //测试产生数据相同时的结构是否成立 164 //cin>>a>>b>>c; 165 rule=0; 166 switch(c) 167 { 168 case 0: 169 d='+'; 170 break; 171 case 1: 172 d='-'; 173 break; 174 case 2: 175 d='*'; 176 break; 177 case 3: 178 d='/'; 179 break; 180 } 181 rule=Serchlist(L,a,b,d); 182 if(rule==0) 183 { 184 x--; 185 //cout<<"ji zhi "<<endl; 186 } 187 else if(yushu==1&&c==3&&a%b!=0) 188 { 189 x--; 190 cout<<"余数设置规则"<<endl; 191 } 192 else 193 Insertlist(L,a,b,d); 194 195 } 196 } 197 198 void InitList(linknode &L) 199 { 200 L=new node; 201 L->next=NULL; 202 } 203 204 void Insertlist(linknode &L,int one,int two,char thr) 205 { 206 linknode p=L; 207 while(p->next!=NULL) 208 p=p->next; 209 node * s=NULL; 210 s = (node *) malloc (sizeof(node)); 211 s->num1=one; 212 s->num2=two; 213 s->ope=thr; 214 s->next=p->next; 215 p->next=s; 216 } 217 218 int Serchlist(linknode L,int one,int two,char thr) 219 { 220 if(L->next==NULL) 221 return 1; 222 linknode p=L->next; 223 while(p!=NULL) 224 { 225 if(p->num1==one&&p->num2==two&&p->ope==thr) 226 return 0; 227 p=p->next; 228 } 229 return 1; 230 } 231 232 void Printrecord(linknode &L,int hang) 233 { 234 int a=hang; 235 linknode p=L->next; 236 while(p !=NULL) 237 { 238 cout<<p->num1<<p->ope<<p->num2<<"="<<endl; 239 while(hang>0) 240 { 241 cout<<endl; 242 hang--; 243 } 244 hang=a; 245 p=p->next; 246 } 247 }
一、项目计划总结:
第二周活动总结表
姓名:赵小早 日期:3/10/2015
日期 任务 |
听课 |
编写程序 |
阅读课本 |
准备考试 |
|
|
日总计 |
周日 |
|
|
|
|
|
|
|
周一 |
|
|
|
|
|
|
|
周二 |
80 |
100 |
30 |
|
|
|
|
周三 |
80 |
60 |
|
|
|
|
|
周四 |
|
60 |
|
|
|
|
|
周五 |
|
|
|
|
|
|
|
周六 |
|
|
|
|
|
|
|
周总结 |
|
|
|
|
|
|
|
二、时间记录表:
学生 赵小早 日期 3/10/2015
教师 王建民 课程 PSP
日期 |
开始时间 |
结束时间 |
中断时间 |
净时间 |
活动 |
备注 |
3/10 |
2:00 |
4:00 |
|
100 |
编程 |
|
3/11 |
2:00 |
4:00 |
|
|
上课 |
|
|
4:00 |
6:00 |
|
|
编程 |
|
3/15 |
3:00 |
4 :00 |
|
|
编程 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
三、缺陷记录日志:
学生 赵小早
日期 3、10
教员 王建民
程序号
日期 |
编号 |
类型 |
引入阶段 |
排除阶段 |
修复时间 |
修复缺陷 |
3/10 |
20 |
传入指针,操作指针 |
设计 |
编译 |
5min |
|
对传入指针,传地址形式的操作参数,疏忽了加星号 |
||||||
|
40 |
链表创建 |
设计 |
编译 |
5min |
|
创建链表时申请节点大小的空间(采用指针方式创建节点) |
||||||
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|