标签:
一、题目及题目要求:编写程序,随机输出小学四则运算题目。
1.避免出题重复
2.可定制(打印数量/打印方式)
3.实现控制下列参数:是否有乘除法、是否有括号、数值范围、加减有无负号、除法有无余数、是否支持分数(真分数、假分数)、是否支持小数(精确到多少位)、打印中每行的间隔可以调整。
二、设计思路
避免出题重复:利用srand函数,让随机数每次产生的不一样。
可定制:通过对数量的键入,在for循环中使循环次数小于键入值。
是否有乘除法:条件判断,用条件约束输出中符号的随机情况。
数值范围:在产生随机数时通过键入控制模,从而使运算数不超过此范围。
加减有无负号:判断两操作数,第一操作数若比第二操作数小则此次循环作废,重复循环。
除法有无余数:判断第一操作数模第二操作数的结果,若为0即可输出。
三、代码
#include<iostream.h> #include<stdlib.h> #include<time.h> int main() { srand(time(NULL)); int sm; //sm 即题目的数量 char cc; //cc 即算式中有无乘除 char ys; //ys即有无余数 int sz; //sz 即数值取值范围 char zf; //zf即加法运算出不出现正负 char fh; //fh即四则运算中的加减乘除 int ls; //ls即输出的列数 cout<<"请输入您需要的题目数目: "; cin>>sm; cout<<"运算中需要乘除法吗?(y/n)"; cin>>cc; if(cc==‘y‘) { cout<<"除法中需要出现余数吗?(y/n)"; cin>>ys; } cout<<"请输入运算数的最大取值范围:"; cin>>sz; cout<<"减法中出现负数吗?(y/n)"; cin>>zf; cout<<"您想输出几列?"; cin>>ls; cout<<"***********************************************"<<endl; for(int i=0;i<sm;i++) //for循环中用sm来控制循环次数 { int a=rand()%sz; int b=rand()%sz; int c; if(cc==‘y‘) //此处判断用不用到乘除法 c=rand()%4; else if(cc==‘n‘) c=rand()%2; if(c==0) //此处判断运算符号 { fh=‘+‘; } if(c==1) { fh=‘-‘; } if(c==2) { fh=‘*‘; } if(c==3) { fh=‘/‘; } if(c==3&&b==0) //除数不能为0 { i--; continue; } if(c==1&&zf==‘n‘&&a<b) //减法结果不为负数 { i--; continue; } if(c==3&&ys==‘n‘&&a%b!=0) //除法结果不产生余数 { i--; continue; } cout<<i+1<<"、"<<a<<fh<<b<<‘=‘<<" "; if((i+1)%ls==0) //控制输出的列数 { cout<<endl; } } cout<<"***********************************************"<<endl; return 0; }
四、运行截图
五、总结
这次实验是在上一次实验的基础上的一个提升,在编程过程中遇到了很多问题和错误,最后也能自己找出来并改正。真的感觉很久没有这么用力的去写这么多代码了,有找到了那种编出一段代码,发现一个错误后的激动心情。
六、周活动总结表
姓名:范德一 日期2015.3.15
日期 任务 | 听课 | 编写程序 | 阅读课本 | 准备考试 | 日总计 | ||
周二 |
100 | 30 | 10 | 140 | |||
周三 |
30 | 30 | |||||
周四 |
100 | 60 | 10 | 170 | |||
周五 |
30 | 30 | |||||
周六 |
30 | 30 | |||||
周日 |
120 | 120 | |||||
周总结 |
200 | 300 | 20 | 520 |
阶段时间和效率 周数(上一次周活动表的周数+1):
不包括上一周在内的累计时间
总计 |
200 |
300 |
20 |
|
|
|
520 |
平均 |
200 |
300 |
20 |
|
|
|
520 |
最大 |
200 |
300 |
20 |
|
|
|
520 |
最小 |
200 |
300 |
20 |
|
|
|
520 |
以前各周的累计时间
总计 |
200 |
300 |
20 |
|
|
|
520 |
平均 |
200 |
300 |
20 |
|
|
|
520 |
最大 |
200 |
300 |
20 |
|
|
|
520 |
最小 |
200 |
300 |
20 |
|
|
|
520 |
二、时间记录表:
学生 范德一 日期 2015年3月15日
教师 王建民 课程 软件工程
日期 |
开始时间 |
结束时间 |
中断时间 |
净时间 |
活动 |
备注 |
3.10 |
22:15 |
22:45 |
无 |
30 |
编写程序 |
作业 |
3.11 |
22:00 |
22:30 |
无 |
30 |
编写程序 |
作业 |
3.12 |
21:30 |
22:30 |
无 |
60 |
编写程序 |
作业 |
3.13 |
21:15 |
21:45 |
无 |
30 |
编写程序 |
作业 |
3.14 |
22:10 |
22:40 |
无 |
30 |
编写程序 |
作业 |
3.15 |
9:00 |
11:00 |
无 |
120 |
编写程序 |
作业 |
三、缺陷记录日志:
学生 范德一
日期 2015年3月15日
教员 王建民
程序号
日期 |
编号 |
类型 |
引入阶段 |
排除阶段 |
修复时间 |
修复缺陷 |
|||||
3.10 |
1 |
A |
编译 |
编译 |
3min |
|
|||||
在cc==‘n’时,n没有用单引号引上 |
|||||||||||
3.12 |
2 |
A |
编译 |
编译 |
5min |
|
|||||
让程序中的for循环继续运行用的break而不是 continue |
|||||||||||
3.12 |
3 |
B |
运行 |
运行后 |
10min |
|
|||||
一次循环不成立后继续运行for循环,忘记了i-- |
|||||||||||
3.15 |
4 |
A |
编译 |
编译 |
1min |
|
|||||
漏掉; |
|||||||||||
3.15 |
5 |
B |
运行 |
运行后 |
10min |
|
|||||
判断除法没有余数时 if(c==3&&ys==‘n‘&&a%b!=0),落下了c==3这个条件 |
标签:
原文地址:http://www.cnblogs.com/fan123/p/4339590.html