一.设计思路

1.设计要求

  1、题目避免重复;

 2、可定制(数量/打印方式);

  3、可以控制下列参数: 是否有乘除法、是否有括号、 数值范围、加减有无负数、除法有无余数、否支持分数 (真分数, 假分数, …)、是否支持小数 (精确到多少位)、打印中每行的间隔可调整;

2.设计思路

  1.数量可以用控制循环次数来控制;

  2.可定制n列的,当循环n的倍数时,回车;

  3.控制输出结果switch(n)中n的大小来控制,如果为2,或3,n-1就可以把乘除转换为加减;

  4.数值范围用rand函数控制;

  5.加减有无负数,如果有负数,(-1)^n(n为随机的0或1)乘以加减数,写入表达式,其中需要控制当被减数为负数的时候,加括号;

  6.其中许多的条件需要灵活的进行控制用一些简单的思路让题目更加简单。

二.程序

 

#include<iostream.h>
#include<stdlib.h>
void size(int X,int Y)
{

int d,n,a,i,j,b,c1,c2,z,e,x,y,m,h,t;

cout<<" "<<"1.题目的数量:";
cin>>m;
cout<<endl;

cout<<" "<<"2.题目的列数:";
cin>>h;
cout<<endl;

cout<<" "<<"3.打印间隔:";
cin>>t;
cout<<endl;

cout<<" "<<"4.数值最大为多少:";
cin>>b;
cout<<endl;

cout<<" "<<"5.式内是否有乘除(有:1;无:非1整数):";
cin>>a;
cout<<endl;

cout<<" "<<"6.加减数有无负数(有:1;无:非1整数):";
cin>>z;
cout<<endl;
cout<<"***********"<<"以下是题目"<<"*****************"<<endl;

for(i=0;i<m;i++)
{

X=rand()%b;
Y=rand()%b;
d=rand();
e=rand();

c1=d%2;
c2=e%2;

n=d%4;
//------------------------------------有无乘除
switch(a)
{
case 0:
if(n>1)
{
n=n-2;
};break;
case 1: break;
default:cout<<"输入的乘除控制条件错误!";

}

//------------------------------------加减有无负数

switch(z)
{
case 0:break;
case 1: x=(-1)^c1*X;

y=(-1)^c2*Y;break;
default:cout<<"输入的加减控制条件错误!";
}

//----------------------------------控制括号和输出
switch(n)
{
case 0:if(z>0)
{
cout<<x<<"+"<<"("<<y<<")"<<"="<<" ";
}
else
{
cout<<X<<"+"<<Y<<"="<<" ";
};break;
case 1:if(z>0)
{
cout<<x<<"-"<<"("<<y<<")"<<"="<<" ";
}
else
{
cout<<X<<"-"<<Y<<"="<<" ";
};break;
case 2:cout<<X<<"*"<<Y<<"="<<" ";break;
case 3:cout<<X<<"/"<<Y<<"="<<" ";break;

}


//----------------------------------------控制列数,和两行间隔数

if((i+1)%h==0)
{
for(j=0;j<t;j++)
{
cout<<endl;
}
}
}
cout<<endl;
}
//--------------------------主函数
int main()
{
int a;
int b;
cout<<"***********"<<"四则运算题目定制:"<<"************"<<endl<<endl;
size(a,b);
return 0;
}

 

四.实验总结

    开始的时候一点思路都没有,觉得这个程序非常复杂,马上对自己失去了信心。但是,听老师一直说要把程序分开了实现,将大程序分成一个一个自己能解决的。这真的是可以的,单步的思考程序的要求是可以实现的,然后将这些断断续续的要求整合起来,组成了自己不能相信的程序,很高兴。这节让我收获最大的是,学会了程序的分布思考和编写,更重要的是对自己有了信心。

五.第2 周的学习记录

学生: 付东   日期: 3月10日    
教师: 王建民   课程: 软件工程    
             
日期 开始时间 结束时间 中断时间 净时 活动 备注
3月10日 12:30 1:00   30 编程 四则修改思路
3月11日 10:15 10:30   15 阅读 第一章
3月13日 12:30 12:50   20 编程 四则运算正负数和换行问题
  9:00 9:40   40 编程 换行问题,负数加括号
3月14日 9:00 11:30 20 70 编程 编程,聊天,玩手机
  2:00 3:00 10 50 编程 编程,收快递
  4:00 4:30   30 读书 第二三章
             

 

 

2 周活动总结表              
姓名: 付东     日期: 3.14      
日期\任务 听课 编写程序 阅读课本 准备考试     日总计  
周日                
周一                
周二 300 30 0       330  
周三 100 0 15       115  
周四 400 0 0       400  
周五 200 60 0       260  
周六 0 120 30       150  
周总计 1000 210 45       1255  
                 
阶段时间和效率     周数: 2        
                 
不包括上一周在内的累计时间                
总计                
平均                
最大                
最小                
                 
                 
以前各周的累计时间                
总计 1200 210 45       1455  
平均 1200 210 45       1455  
最大 1200 210 45       1455  
最小 1200 210 45       1455  
                 

 

 

学生: 付东          
日期: 3月14日          
教员: 王建民          
程序: 四则运算          
日期 编号 类型 引入阶段 排除阶段 修复时间 修复缺陷
3月13日 1   编码 编码 0.2min  
  缺少头文件
  2   编码 运行 3min  
  重复使用变量i,导致无限运行
3月14日 3   编码 编译 1min  
  if条件中用了“=”运算符
  4   编码 编译 1min  
  switch的case中缺少了break
  5   编码 编译 0.2min  
  for的结尾再次使用i++,导致i加了两次
posted on 2015-03-14 21:01  半梦半痴半愚蠢  阅读(126)  评论(0编辑  收藏  举报