在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
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
二、时间记录表: 学生 赵小早 日期 3/10/2015 教师 王建民 课程 PSP
三、缺陷记录日志: 学生 赵小早 日期 3、10 教员 王建民 程序号
|
请发表评论