标签:
一.设计思路
1.输入一个数控制题目个数
2.输入一个数控制取值范围(小于100)
3.输入一个数控制是否有正负数
4.输入一个数控制是否有余数
5.输入一个数控制是否有乘除法
6.输入一个数控制是否有括号
7.生成一个随机数,控制每道题的参数个数
8.在一个for循环里,生成随机数,如果生成的随机数大于输入的取值,则重新输入,否则进行下一步
9.用if语句分模块,分别判断是否有正负号,余数,乘除法,括号的情况
10.If是有负数的情况,要考虑生成的运算符是减号的情况,这种情况下,要变成加号,同时负号去掉
11.生成随机数(0-3),用于控制运算符,当运算符是除号时,要考虑除法有无余数,并记录除号的位置
12.If语句执行有乘除法的情况,并计算
13.If语句执行只有有加减法的情况,并计算
14.有括号的情况,如果只生成两个数,自动不加括号,若多个参数,则对符号位置设置随机数,进行括号位置的确定
15.计算时,有括号先计算括号里面的*/,在计算+-,然后计算括号外面的,还是先*/,在+-
16.计算式输出后,输入结果,精确到整数,不足1不进位
17.输入的结果与计算机储存的结果比较,如果相等,则正确,正确计数器+1,若错误,则错误计数器+1
18.For循环用户输入的次数
二.源代码:
#include<iostream> #include<ctime> #include<cstdlib> using namespace std; void main() { int num; //输入题目个数 int rnum; //输入取值范围 int zfnum; //输入是否有正负数 int ys; //输入是否有余数 int fhn; //输入是否有乘除法 int kh; //输入是否有括号 cout<<"请输入题目个数:"<<endl; //输入提示 cin>>num; //输入题目个数 cout<<"请输入取值范围:(小于100)"<<endl; //输入提示 cin>>rnum; //输入取值范围 cout<<"请输入是否有正负数:(1.有 2.没有)"<<endl; //输入提示 cin>>zfnum; //输入是否有正负数 cout<<"除法是否有余数:(3.有 4.没有)"<<endl; //输入提示 cin>>ys; //输入是否有余数 cout<<"请输入是否有乘除法:(5.有 6.没有)"<<endl; //输入提示 cin>>fhn; //输入是否有乘除法 cout<<"请输入是否有括号:(7.有 8.没有)"<<endl; //输入提示 cin>>kh; //输入是否有括号 int sz[10]; int jg,zhjg; int n1=0; int n2=0; int f=0; //正负数的数字表示 int fhnum=0; //运算符号的数字表示 char zf[10]={‘+‘}; //正负数的符号表示 char fh[10]; //运算符号的符号表示 int jl; //记录除法的位置 int kh1; //记录括号的位置 srand(time(0)); for(int l=0;l<num;l++) { int sznum=rand()%9+2; //每道题的数字个数 2-10 for(int i=0;i<=sznum;i++) //生成数字 { sz[i]=rand()%100+1; for(;;) //控制数的范围 { if(sz[i]>rnum) sz[i]=rand()%100+1; else break; } if(zfnum==1) //计算有负数 f=rand()%2; if(f==1) //负数 zf[i]=‘-‘; if(zf[i]==‘-‘) sz[i]=sz[i]*(-1); } for(int i=0;i<sznum;i++) //生成运算符号 { if(fhn==5) //计算有乘除法 { fhnum=rand()%4; if(fhnum==0) fh[i]=‘+‘; if(fhnum==1) fh[i]=‘-‘; if(fhnum==2) fh[i]=‘*‘; if(fhnum==3) { fh[i]=‘/‘; if(ys==3) //计算除法时有余数 { jl=i; //确定除法符号的位置 for(;;) { if(sz[i]%sz[i+1]!=0) break; else { sz[i]=rand()%100+1; sz[i+1]=rand()%100+1; } } } if(ys==4) //计算除法时没有余数 { jl=i; //确定除法符号的位置 for(;;) { if(sz[i]%sz[i+1]!=0) { sz[i]=rand()%100+1; sz[i+1]=rand()%100+1; } else break; } } } } if(fhn==6) //计算无乘除法 { fhnum=rand()%2; if(fhnum==0) fh[i]=‘+‘; if(fhnum==1) fh[i]=‘-‘; } } cout<<l+1<<": "<<sz[0]; if(sznum==2) //如果一个题只有2个数字时不加括号 kh=8; if(kh==7) //有括号时 { kh1=rand()%(sznum-2)+1; //对符号位置设置随机数,进行括号位置的确定 for(int i=0;i<kh1-1;i++) { cout<<fh[i]<<sz[i+1]; } cout<<fh[kh1-1]<<"("<<sz[kh1]<<fh[kh1]<<sz[kh1+1]<<")"; for(int i=kh1+1;i<sznum;i++) { cout<<fh[i]<<sz[i+1]; } jg=sz[0]; //计算括号里的结果 if(fh[kh1]==‘+‘) { sz[kh1]=sz[kh1]+sz[kh1+1]; sz[kh1+1]=0; } if(fh[kh1]==‘-‘) { sz[kh1]=sz[kh1]-sz[kh1+1]; sz[kh1+1]=0; } if(fh[kh1]==‘*‘) { sz[kh1]=sz[kh1]*sz[kh1+1]; sz[kh1+1]=1; } if(fh[kh1]==‘/‘) { sz[kh1]=sz[kh1]/sz[kh1+1]; sz[kh1+1]=1; } //先算*/ for(int i=0;i<sznum;i++) { if(fh[i]==‘*‘) { sz[i]=sz[i]*sz[i+1]; sz[i+1]=1; } if(fh[i]==‘/‘) { sz[i]=sz[i]/sz[i+1]; sz[i+1]=1; } } //最后+ - for(int i=0;i<sznum;i++) { if(fh[i]==‘+‘) jg=jg+sz[i+1]; if(fh[i]==‘-‘) jg=jg-sz[i+1]; if(fh[i]==‘*‘) jg=jg*sz[i+1]; if(fh[i]==‘/‘) jg=jg/sz[i+1]; } } if(kh==8) //没有括号时 { for(int i=1;i<sznum;i++) { cout<<fh[i]<<sz[i+1]; } jg=sz[0]; for(int i=0;i<sznum;i++) { if(fh[i]==‘*‘) { sz[i]=sz[i]*sz[i+1]; sz[i+1]=1; } if(fh[i]==‘/‘) { sz[i]=sz[i]/sz[i+1]; sz[i+1]=1; } } for(int i=0;i<sznum;i++) { if(fh[i]==‘+‘) jg=jg+sz[i+1]; if(fh[i]==‘-‘) jg=jg-sz[i+1]; if(fh[i]==‘*‘) jg=jg*sz[i+1]; if(fh[i]==‘/‘) jg=jg/sz[i+1]; } } cout<<"="<<endl; cout<<"请输入结果,精确到整数,不足1不进位:"<<endl; cin>>zhjg; if(zhjg-jg<0.001) { n1++; cout<<"正确!"<<endl; } else { n2++; cout<<"错误!"<<endl; } } cout<<"正确的个数:"<<n1<<",错误的个数:"<<n2<<endl; }
三.运行结果截图
四.按照PSP0级的要求记录开发过程中的项目计划日志、时间记录日志、缺陷记录日志
周活动总结表
姓名:牛俊燕 日期:2016.3.26
日期\任务 |
听课 |
编写程序 |
阅读课本 |
日总计 |
周日 |
|
|
|
|
周一 |
100分钟 |
120分钟 |
|
220分钟 |
周二 |
|
120分钟 |
120分钟 |
240分钟 |
周三 |
|
140分钟 |
110分钟 |
250分钟 |
周四 |
|
|
|
|
周五 |
|
100分钟 |
|
100分钟 |
周六 |
|
90分钟 |
60分钟 |
150分钟 |
周总计 |
100分钟 |
570分钟 |
290分钟 |
960分钟 |
学生:牛俊燕 日期:3/26/2016
教师:王建民 课程:软件工程概论
日期 |
开始时间 |
结束时间 |
中断时间 |
净时间 |
活动 |
备注 |
3/21 |
8:00 |
9:50 |
10分钟 |
100分钟 |
听课 |
上课 |
|
13:00 |
15:00 |
|
120分钟 |
编程序 |
作业4 |
3/22 |
15:30 |
16:50 |
|
80分钟 |
讨论 |
作业5 |
|
16:50 |
17:30 |
|
40分钟 |
编程序 |
作业5 |
|
18:00 |
20:00 |
|
120分钟 |
看书 |
构建之法 |
3/23 |
14:00 |
16:30 |
10分钟 |
140分钟 |
编程序 |
作业5 |
|
16:30 |
19:10 |
|
110分钟 |
写精读 |
阅读笔记 |
3/25 |
17:30 |
19:10 |
|
100分钟 |
编程序 |
作业5 |
3/26 |
9:00 |
11:30 |
|
180分钟 |
写总结 |
精读,进度条等 |
缺陷记录日志示例
学生:牛俊燕
日期:3/26/2016
教员:王建民老师
程序号:4,5
日期 |
编号 |
类型 |
引入阶段 |
排除阶段 |
修复时间 |
修复缺陷 |
3/21
|
1 |
7 |
编码 |
编译 |
2min |
|
描述:MAX没有初始化 |
||||||
|
2 |
23 |
编码 |
编译 |
5min |
|
描述:创建数组有错误,通过new创建数组 |
||||||
|
3 |
40 |
编码 |
编译 |
20min |
|
描述:try......catch......finally语句的处理 |
||||||
3/22 |
4 |
54 |
编码 |
编译 |
30min |
|
描述:当随机生成数是负数时,且运算符是减号,要将运算符变成加号,且随机生成数不带负号,运行时出不来想要的结果 |
||||||
3/23 |
5 |
72 |
设计 |
编译 |
50min |
|
描述:有乘除时,在除法有余数时,没有考虑记录除法符号的位置 |
||||||
|
6 |
114 |
编码 |
编译 |
20min |
|
描述:对符号位置设置随机数,进行括号位置的确定有错误 |
||||||
3/25 |
7 |
208 |
编码 |
编译 |
15min |
|
描述:cin输入的名称有问题 |
五.一起合作的照片
标签:
原文地址:http://www.cnblogs.com/niujunyan/p/5322660.html