1.随机数函数:把取值范围按最大最小值传递给函数就会返回一个符合要求的随机数(前两周的作业就已经存在随机数生成函数)
2.计算函数:把运算符和操作数传递给函数就会返回运算的的结果(根据运算需要新添加到的子函数)
3.题目生成函数:把要生成题目的要求传递给该函数就会返回一个符合要求的运算式
主函数主要进行数据的输入和结果正确的判定
1 #include<iostream> 2 #include<string> 3 #include<stdlib.h> 4 #include<time.h> 5 using namespace std; 6 int randnum2(int min,int max) //获得随机数 7 { 8 int ranum=0; 9 ranum=rand(); 10 while(ranum>max) 11 { 12 ranum%=max;//保证min<b<max 13 if(ranum<min) 14 { 15 ranum=rand(); 16 } 17 } 18 return ranum; 19 } 20 double answer(int ope,double num1,double num2) 21 { 22 double ans=0; 23 if(ope==0) 24 { 25 ans=num1+num2; 26 } 27 if(ope==1) 28 { 29 ans=num1-num2; 30 } 31 if(ope==2) 32 { 33 ans=num1*num2; 34 } 35 if(ope==3) 36 { 37 ans=num1/num2; 38 } 39 return ans; 40 } 41 double question(int max,int min,int numam) 42 { 43 int a[100],i=2,j=0,num=0; 44 double b[100]; 45 string str="+-*/"; 46 num=randnum2(i,numam); 47 i=0; 48 while(i<=num*3) // 初始化数组 49 { 50 a[i]=randnum2(min,max); 51 b[i]=a[i]; 52 i++; 53 } 54 while(j<=num*3) 55 { 56 a[j]%=4;//运算符 57 a[j+1]%=2;//括号 58 if(a[j+1]==1) 59 { 60 a[j+4]=-1; 61 } 62 j+=3; 63 } 64 65 //测试 66 int t=0; 67 //测试1111111111111111 68 i=0; 69 j=1; 70 while(j<=num*3) //输出式子 71 { 72 if(a[j]==1&&j<num*3-3&&a[j+2]!=2&&a[j+2]!=3)cout<<"("; 73 cout<<a[j+1]; 74 if(a[j-3]==1&&j>3&&a[j-1]!=2&&a[j-1]!=3)cout<<")"; 75 if(j<(num*3-3))cout<<str[a[j+2]]; 76 j+=3; 77 } 78 79 j=1; 80 while(j<=num*3-3) //计算括号 81 { 82 if(a[j]==1&&j<num*3-3&&a[j+2]!=2&&a[j+2]!=3) 83 { 84 b[j+1]=answer(a[j+2],b[j+1],b[j+4]); 85 a[j+1]=b[j+1]; 86 for(int i=j+2;i<num*3-3;i++) 87 { 88 a[i]=a[i+3]; 89 b[i]=b[i+3]; 90 } 91 num-=1; 92 } 93 j+=3; 94 } 95 j=1; 96 while(j<=num*3-3) //计算乘除 97 { 98 if(a[j+2]==2||a[j+2]==3) 99 { 100 101 b[j+1]= answer(a[j+2],b[j+1],b[j+4]); 102 for(int i=j+2;i<num*3-3;i++) 103 { 104 a[i]=a[i+3]; 105 b[i]=b[i+3]; 106 } 107 num-=1; 108 j-=3; 109 } 110 j+=3; 111 } 112 j=1; 113 double ans=0,m=0; 114 while(j<=num*3) 115 { 116 m=b[j+1]; 117 if(a[j+2]==1) 118 { 119 ans=ans-m; 120 } 121 else 122 { 123 ans=ans+m; 124 } 125 j+=3; 126 } 127 return ans; 128 } 129 int main() 130 { 131 int quam=5,max=9, min=3,numam=5; 132 //输入生成题目的条件 133 cout<<"一共出几道题:"; 134 cin>>quam; 135 cout<<"最多几个数(10个数之间):"; 136 cin>>numam; 137 cout<<"数值范围: 最大值:"; 138 cin>>max; 139 cout<<"最小值:"; 140 cin>>min; 141 //结束输入生成题目的条件 142 int i=1; 143 double ansin; 144 while(quam--) //循环一次生成一道题 145 { 146 cout<<"No."<<i++<<":"; //题目计数器 147 double ans=question( max, min,numam); 148 cout<<"="; 149 cin>>ansin; 150 cout<<"你输入的数为:"<<ansin<<endl; 151 ansin=ansin-ans; 152 if(ansin<0) 153 { 154 ansin=-ansin; 155 } 156 if(ansin<0.1) 157 { 158 cout<<"good!!"<<endl; 159 } 160 else 161 { 162 cout<<"回答错误!!!正确答案为:"<<ans<<endl; 163 } 164 } 165 return 0; 166 }
实验结果:
1.生成3道最多5个数取值范围在2~9之间的四则运算式
2.生成3道最多6个数取值范围在4~9之间的四则运算式
六、PSP0级相关日志:
1、项目计划日志
周活动总结表
姓名:李晨 日期:3/19
日期任务 |
听课 |
编写程序 |
阅读书本 |
考研复习 |
安装软件 |
日总计 |
周日 |
||||||
周一 |
||||||
周二 |
||||||
周三 |
||||||
周四 |
300 |
50 |
30 |
90 |
80 |
550 |
周五 |
200 |
60 |
30 |
290 |
||
周六 |
||||||
周总结 |
500 |
110 |
60 |
90 |
80 |
840 |
阶段时间和效率 周数:1
不包括上一周在内的累计时间
总计 |
|
|
|
|
|
平均 |
|||||
最大 |
|||||
最小 |
以前各周的累计时间
总计 |
500 |
110 |
60 |
90 |
80 |
840 |
平均 |
500 |
110 |
60 |
90 |
80 |
840 |
最大 |
500 |
110 |
60 |
90 |
80 |
840 |
最小 |
500 |
110 |
60 |
90 |
80 |
840 |
2、时间记录日志
学生:李晨 日期:3/19
教师:王建民 课程:PSP
日期 |
开始时间 |
结束时间 |
中断时间 |
净时间 |
活动 |
备注 |
3/19 |
08:00 |
12:00 |
40 |
200 |
听课 |
课间休息 |
14:00 |
15:50 |
10 |
100 |
听课 |
课间休息 |
|
16:00 |
17:30 |
90 |
考研复习 |
|||
18:30 |
20:00 |
10 |
80 |
安装软件 |
休息 |
|
20:10 |
21:00 |
50 |
编写程序 |
|||
21:00 |
21:30 |
30 |
阅读 |
|||
3/20 |
08:00 |
12:00 |
40 |
200 |
听课 |
课间休息 |
14:30 |
15:40 |
10 |
60 |
编写程序 |
休息、问题 |
|
21:00 |
21:30 |
30 |
阅读 |
3、缺陷记录日志
学生:李晨 日期:3/19
教员:王建民 程序号:02
日期 |
编号 |
类型 |
引入阶段 |
排除阶段 |
修复阶段 |
修复缺陷 |
3/19 |
1 |
001 |
设计 |
编译 |
20min |
|
描述:判断语句位置错误 |
||||||
2 |
002 |
编码 |
编译 |
1min |
||
描述:使用数组之前没有定义 |
||||||
3/20 |
3 |
003 |
设计 |
编译 |
5min |
|
描述:计算数值的算式位置放错 |
注:结队开发组员:刘伟
博客园地址:http://www.cnblogs.com/Lw-1573/
附:工作照