博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
四则运算2及PSP0设计项目计划
阅读量:7183 次
发布时间:2019-06-29

本文共 5448 字,大约阅读时间需要 18 分钟。

时间比较紧,我简单写写我的设计思路:

题目在四则运算1的基础上控制产生题目的数量,这个可以用变量控制;打印方式也可选用变量控制,程序的关键是括号的生成。我们可以将整个四则运算式看成()+()的模型,然后再利用递归函数对这个模型进行分解(这个函数我一直在调试但感觉还没有完善,时间比较紧,到后面我会补上)。

关于括号生成目前是有问题的,目前发现使用了string[][]这样会导致为三维数组存在很大问题,所以请参考者注意一下。

 

下面是我的源程序代码:

1 //author:ly 2016.3.12  2 /*function:arithmetic operation that avoid duplication  3  can order question number  4  can select division and multiplication  5  can choose brackets  6  Specified range of operation  7 */  8 #include
9 #include
10 #include
11 #include
12 #include
13 using namespace std; 14 15 string Judge[30][30]; //判断是否重复的数组 16 string para[30]; //备用数组 17 char op_arrays[4]={
'+','-','*','/'}; //运算符数组 18 int row=0; //定义行 19 int ran=0; //定义列 20 int k=0; 21 int parameters[30]; //定义参数数组 22 void Random_build1(int,int,int); //产生算术式的函数 23 void Random_build2(int,int,int); 24 void Random_build3(int,int,int); 25 void Random_build4(int,int,int); 26 void Decu(int,int,int); //递归函数 27 28 int main() 29 { 30 //对于产生括号的运算生成还有问题 希望老师看了能给我在博客中指点一下问题所在 31 32 int count_t=0; //产生题目数量 33 char print_way; //判断打印方式 34 char Jude_has_mul_dev; //判断是否有乘除法 35 char Jude_has_brackets; //判断是否有括号 36 37 int parameters_num=0; //参数个数 38 int rangeof_count=0; //指定计数的范围 39 int brackets_l=0; //判断左括号的序数 40 int brackets_r=0; //判断右括号的序数 41 42 cout<<"请输入需要产生四则元算的题数:"<
>count_t; 44 45 while(1) 46 { 47 //判断有无乘除法 48 cout<<"是否需要做乘除 是(输入y) 否(输入n)"<
>Jude_has_mul_dev; 50 cout<<"判断是否需要括号 是(输入y) 否(输入n)"<
> Jude_has_brackets; 52 cout<<"判断你需要做的计算的范围(小于1000):"<
>rangeof_count; 54 55 srand(time(NULL));//用系统当前时间设置rand()随机序列种子,保证每次运行随机序列不一样 56 memset(Judge,0,sizeof(Judge)); 57 memset(parameters,0,sizeof(parameters)); 58 while(row
>print_way;138 139 if(print_way=='a')140 {141 //打印产生的运算表达式142 cout<<"产生的运算表达式为:"<
>Judge[row][ran];192 ran++; //列增加193 Judge[row][ran]=op_arrays[fuhao];194 ran++; //列增加195 }196 else 197 {198 ss<
>Judge[row][ran];200 }201 }202 203 void Random_build2(int parameters_num,int rangeof_count,int i)204 {205 int parameters;206 int fuhao;207 stringstream ss;208 //随机产生 运算表达数209 parameters=0+rand()%rangeof_count;210 211 //随机产生 运算符(最后一次不产生运算符)212 if(i
>Judge[row][ran];221 ran++; //列增加222 Judge[row][ran]=op_arrays[fuhao];223 ran++; //列增加224 }225 else 226 {227 ss<
>Judge[row][ran];229 }230 }231 232 void Random_build3(int parameters_num,int rangeof_count,int i)233 {234 int parameters;235 int fuhao;236 stringstream ss;237 //随机产生 运算表达数238 parameters=0+rand()%rangeof_count;239 240 //随机产生 运算符(最后一次不产生运算符)241 if(i
>para[k];250 k++; //列增加251 252 para[k]=op_arrays[fuhao];253 k++; //列增加254 }255 else 256 {257 ss<
>para[k];259 }260 }261 262 void Random_build4(int parameters_num,int rangeof_count,int i)263 {264 int parameters;265 int fuhao=0;266 stringstream ss;267 //随机产生 运算表达数268 parameters=0+rand()%rangeof_count;269 if(fuhao==3)270 {271 while(parameters==0) //除数为0就重新生成272 {273 parameters=0+rand()%rangeof_count;274 }275 }276 //随机产生 运算符(最后一次不产生运算符)277 if(i
>para[k];286 k++; //列增加287 288 para[k]=op_arrays[fuhao];289 k++; //列增加290 }291 else 292 {293 ss<
>para[k];295 }296 }297 298 void Decu(int l,int s,int flag)299 {300 //srand(time(NULL));//用系统当前时间设置rand()随机序列种子,保证每次运行随机序列不一样301 302 if((s-l)<2) return ;303 304 if((s-l)==2)305 {306 if(flag==1)307 {308 //产生括号309 Judge[row][ran]="(";310 ran++;311 Judge[row][ran]=para[l];312 ran++;313 Judge[row][ran]=para[l+1];314 ran++;315 Judge[row][ran]=para[s];316 ran++;317 Judge[row][ran]=")";318 ran++;319 }320 if(flag==0)321 {322 Judge[row][ran]=para[l];323 ran++;324 Judge[row][ran]=para[l+1];325 ran++;326 Judge[row][ran]=para[s];327 ran++;328 }329 return ;330 }331 if((s-l)==4)332 {333 //存在随机数个数为奇数的情况334 flag=0+rand()%2;335 if(flag==1)336 {337 Judge[row][ran]="(";338 ran++;339 Judge[row][ran]=para[l];340 ran++;341 Judge[row][ran]=para[l+1];342 ran++;343 flag=0+rand()%2;344 Decu(l+2,s,flag);345 Judge[row][ran]=")";346 ran++;347 }348 if(flag==0)349 {350 Judge[row][ran]=para[l];351 ran++;352 Judge[row][ran]=para[l+1];353 ran++;354 flag=0+rand()%2;355 Decu(l+2,s,flag);356 }357 return ;358 }359 360 if((s-l)>4)361 {362 flag=0+rand()%2;363 if(flag==1)364 {365 Judge[row][ran]="(";366 ran++;367 flag=0+rand()%2;368 Decu(l,s-4,flag);369 Judge[row][ran]=para[s-3];370 ran++;371 l=s-2;372 flag=0+rand()%2;373 Decu(l,s,flag);374 Judge[row][ran]=")";375 ran++;376 }377 if(flag==0)378 {379 flag=0+rand()%2;380 Decu(l,s-4,flag);381 Judge[row][ran]=para[s-3];382 ran++;383 l=s-2;384 flag=0+rand()%2;385 Decu(l,s,flag);386 }387 return ;388 }389 }

运行截图:

PSP0设计:

周活动日志:

  听课 编写程序 阅读课本 日总计
周一  100  180  0  280
周二  0  200  0  200
周三  0  180  0  180
周四  100  200  80  380
周五  0  200  60  260
周六  0  300  60  360
周日        
周总计  200  1260  200  1660

时间记录日志:

 日期  开始时间  结束时间  中断时间  净时间  活动 备注 
 7/3  14:00  15:50  10  100  上课  讲座
   16:00  18:00  0  120  编程序  作业2
 8/3  8:00  12:00  20  220  上课  讲座
   14:00  15:40  0  100  编程序  作业2(递归函数)
9/3  8:00  12:00  20  220  上课  讲座
   19:00  23:00  20  220  看书、编程  听歌休息
10/3   14:00  18:00  20  220  上课  讲座(javaEE)
   19:00  21:00  0  120  java学习  servlet编写
 11/3  8:00  9:40  0  100  编写程序 作业2 (递归函数+排bug)
   16:00  18:00  0  120  编写程序  边界条件测试
 12/3  8:00  12:00  60  180  编写程序+背英语  作文加深+测试程序

 

缺陷记录日志:

 

日期 编号 类型 引入阶段 排除阶段 修复时间 修复缺陷
9/3 1   编写代码 debug 300+  
产生括号的情况太单一,在此基础上重写括号生成代码
11/3 2   编写代码 询问 120 int 和Sting 转换
意识到自以为的C++好多知识根本不知道
12/3 3   编写 调试(多组数据) & 代码存在的bug
在括号数量多以后数组存放有问题,目前还未解决
             

转载于:https://www.cnblogs.com/ly199553/p/5269502.html

你可能感兴趣的文章
Linux下卸载文件系统
查看>>
我的友情链接
查看>>
文件名过长/文件夹路径过长 无法删除文件夹之解决办法
查看>>
Js获取当前页面URL的一些属性_已迁移
查看>>
test
查看>>
Android消息通知Totast的实现
查看>>
如何更好的管理企业内的打印机
查看>>
感慨下,什么样的IT
查看>>
SQL server 2005 PIVOT运算符的使用
查看>>
我的友情链接
查看>>
Dubbo源码分析(2),Dubbo中采用的设计模式
查看>>
我的友情链接
查看>>
LVS-DR工作原理图文详解
查看>>
PPT演讲10大准备技巧
查看>>
linux连接数检查
查看>>
水火交融-Windows上的Linux容器
查看>>
Linux调优方案,sysctl.conf的设置
查看>>
dnsmasq 小巧且方便地用于配置DNS和DHCP的工具
查看>>
日期控件
查看>>
有关缓存,缓存算法,缓存框架
查看>>