一.设计思想。
1.避免题目重复,可以将前面生成的四则算式的数字和符号分别存储,将即将生成的算式与前面进行比对。 2.通过某个参数可以使得用户调控是否要定制数量,当需要定制数量时可以通过接收用户输入的数字,来调控for循环的循环次数。 3.通过接收用户输入的选项使得用户选择是否有乘除法、调控数值范围、除法有无余数、是否支持分数(真分数,假分数。
二.源代码。
#include<iostream> #include<stdlib.h> #include<string.h> #include<stdio.h> using namespace std; #include <ctime> #include <cstdlib> void panduanchongfu() { int d,e,k,m,n, p; int o=0,b=0; cout<<"请输入要显示的四则运算的个数"<<endl; cin>>k; cout<<endl; int shuzi[200][4]; char yunsuanfu[4]={'+','-','*','/'}; char fuhao[16][2]={{'+','+'},{'+','-'},{'+','*'},{'+','/'},{'-','+'},{'-','-'},{'-','*'},{'-','/'},{'*','+'},{'*','-'},{'*','*'},{'*','/'},{'/','+'},{'/','-'},{'/','*'},{'/','/'}}; int g[100]; srand(time(0));//根据系统时间设置随机数种子 int r,t,temp; cout<<"-------------------"<<endl; cout<<"请输入产生式数字的范围。(请输入两个数字:如 10 50:代表产生式的数字范围为(10-50)"<<endl; cout<<"-------------------"<<endl; cin>>r>>t; cout<<endl; if(r>t) { temp=r; r=t; t=temp; } int a; cout<<"-------------------"<<endl; cout<<"0.无乘除法。"<<endl; cout<<"1.有乘除法。"<<endl; cout<<"请输入选项(0或1)"<<endl; cout<<"-------------------"<<endl; cin>>a; cout<<endl; if(a!=0) { cout<<"-------------------"<<endl; cout<<"0.无余数。"<<endl; cout<<"1.有余数。"<<endl; cout<<"请输入选项(0或1)"<<endl; cout<<"-------------------"<<endl; cin>>p; cout<<endl; } cout<<"-------------------"<<endl; cout<<"0.无分数。"<<endl; cout<<"1.有分数。"<<endl; cout<<"请输入选项(0或1)"<<endl; cout<<"-------------------"<<endl; int s; cin>>s; cout<<endl; for(int i=0;i<k;i++) { shuzi[i][0]=rand()%(t-r)+r;//取得区间[0,100)的整数 shuzi[i][1]=rand()%(t-r)+r; shuzi[i][2]=rand()%(t-r)+r; shuzi[i][3]=rand()%(t-r-1)+r+1; d=rand()%100; e=rand()%100; if(a==1||a==0) { switch(a) { case 0: n=e%2;//判断运算符号的随机数 m=d%2; break; case 1: n=e%4;//判断运算符号的随机数 m=d%4; break; } } else { cout<<"输入选项有误,请正确输入。"<<endl; cout<<"-------------------"<<endl; cout<<"0.无乘除法。"<<endl; cout<<"1.有乘除法。"<<endl; cout<<"请输入选项(0或1)"<<endl; cout<<"-------------------"<<endl; cin>>a; i=i-1; continue; } if((m==3&&shuzi[i][0]%shuzi[i][1]!=0&&p==0)||(n==3&&shuzi[i][1]%shuzi[i][2]!=0&&p==0)) { i=i-1; } else { if((shuzi[i][1]==0&&m==3&&a==0)||(shuzi[i][2]==0&&n==3&&a==0)) { i=i-1; } else { for(int l=0;l<16;l++) { if(yunsuanfu[m]==fuhao[l][0]&&yunsuanfu[n]==fuhao[l][1]) { g[o]=l; o++; } } for(int j=i-1;j>=0;j--) { if(shuzi[i][0]==shuzi[j][0]&&shuzi[i][1]==shuzi[j][1]&&shuzi[i][2]==shuzi[j][2]&&g[i]==g[j]) { i=i-1; break; } } } } } if(s==0) { for(i=0;i<k;i++) { if(g[i]==12||g[i]==13||g[i]==14) { cout<<"第"<<i+1<<"题:"<<shuzi[i][0]<<"÷"<<shuzi[i][1]<<fuhao[g[i]][1]<<shuzi[i][2]<<"="<<endl; } else if(g[i]==3||g[i]==7||g[i]==11) { cout<<"第"<<i+1<<"题:"<<shuzi[i][0]<<fuhao[g[i]][0]<<shuzi[i][1]<<"÷"<<shuzi[i][2]<<"="<<endl; } else if(g[i]==15) { cout<<"第"<<i+1<<"题:"<<shuzi[i][0]<<"÷"<<shuzi[i][1]<<"÷"<<shuzi[i][2]<<"="<<endl; } else cout<<"第"<<i+1<<"题:"<<shuzi[i][0]<<fuhao[g[i]][0]<<shuzi[i][1]<<fuhao[g[i]][1]<<shuzi[i][2]<<"="<<endl; } } else { for(i=0;i<k;i++) { int q0,q1,q2; q0=rand()%3; q1=rand()%3; q2=rand()%3; if(q0==1) { cout<<"第"<<i+1<<"题:"<<"("<<shuzi[i][0]<<"/"<<shuzi[i][3]<<")"<<fuhao[g[i]][0]<<shuzi[i][1]<<"÷"<<shuzi[i][2]<<"="<<endl; } else if(q0==0) { cout<<"第"<<i+1<<"题:"<<shuzi[i][0]<<fuhao[g[i]][0]<<shuzi[i][1]<<"÷"<<shuzi[i][2]<<"="<<endl; } else if(q1==1) { cout<<"第"<<i+1<<"题:"<<shuzi[i][0]<<fuhao[g[i]][0]<<"("<<shuzi[i][1]<<"/"<<shuzi[i][3]<<")"<<"÷"<<shuzi[i][2]<<"="<<endl; } else if(q1==0) { cout<<"第"<<i+1<<"题:"<<shuzi[i][0]<<fuhao[g[i]][0]<<shuzi[i][1]<<"÷"<<shuzi[i][2]<<"="<<endl; } else if(q2==1) { cout<<"第"<<i+1<<"题:"<<shuzi[i][0]<<fuhao[g[i]][0]<<shuzi[i][1]<<"÷"<<"("<<shuzi[i][2]<<"/"<<shuzi[i][3]<<")"<<"="<<endl; } else { cout<<"第"<<i+1<<"题:"<<shuzi[i][0]<<fuhao[g[i]][0]<<shuzi[i][1]<<"÷"<<shuzi[i][2]<<"="<<endl; } } } } int main() { panduanchongfu(); return 0; }
三.运行结果。
四.PSP.
一、项目计划总结:
周活动总结表
姓名: 李明 日期:2015/3/15
日期 任务 |
听课 |
编写程序 |
阅读课本 |
准备考试 |
日总计 |
||
周日 |
|||||||
周一 |
|||||||
周二 |
100 |
20 |
120 |
||||
周三 |
30 |
15 |
45 |
||||
周四 |
60 |
20 |
80 |
||||
周五 |
100 |
120 |
20 |
240 |
|||
周六 |
120 |
20 |
140 |
||||
周总结 |
200 |
330 |
95 |
625 |
阶段时间和效率 周数(上一次周活动表的周数+1):
不包括上一周在内的累计时间
总计 |
|||||||
平均 |
|||||||
最大 |
|||||||
最小 |
以前各周的累计时间
总计 |
|||||||
平均 |
|||||||
最大 |
|||||||
最小 |
二、时间记录表:
学生 李明 日期 2015/3/15
教师 王建民 课程 PSP
日期 |
开始时间 |
结束时间 |
中断时间 |
净时间 |
活动 |
备注 |
3.11 |
19:00 |
19:30 |
30 |
编程 |
||
3.12 |
17:00 |
18:00 |
60 |
编程 |
||
3.13 |
16:30 |
17:30 |
60 |
编程 |
||
3.13 |
19:00 |
20:00 |
60 |
编程 |
||
3.14 |
19:00 |
21:00 |
120 |
编程 |
三、缺陷记录日志:
学生 李明
日期 2015/2/15
教员 王建民
程序号 四则运算
日期 |
编号 |
类型 |
引入阶段 |
排除阶段 |
修复时间 |
修复缺陷 |
3.11 |
||||||
定义字符串数组时,没有正确定义数组内容。比较字符串时,两个字符串类型不同,一个是char类型,一个是char*类型,不能比较。 |
||||||
3.12 |
||||||
If判断句中,应该用==。有时一个变量进行了,两次调用,造成赋值混乱。 |
||||||
3.13 |
||||||
Case将:写到数字前面了。 多个判断并列,造成每个都要执行。 |
||||||
3.14 |
||||||
如果用户没有输入0或1,提示错误时没有继续循环,没用continue。 |