一.设计思想

  1.设计要求:让程序能接受用户输入答案,并判定对错。最后给出总共对/错 的数量。

  2.对于用户输入答案这个条件进行编程时,是按照系统输入一个题目,同学进行回答,然后系统进行判断对错。但是这部符合题目的要求不能定制,而且图形界面不好看,于是在系统出完题后在让学生输入一行答案。

 3.首先将正确的答案放入一个数组里面,然后同学的答案放入另一个数组,最后两个数组作比较,相同的输入正确,反之错误。

  4.统计正确与错误元素的序列号作为提醒同学错几题正确几题,然后输出正确答案。

二.源程序代码

#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;
int rightanwer[10000],anwer[10000];
int r[1000];
int w[1000];
int wright[10000];
int cunt=0;
int nc=0;

cout<<" "<<"1.题目的数量(1~100):";
cin>>m;
while(m>100||m<0)
{
cout<<" .请正确输入数量:";
cin>>m;

}
cout<<endl;

cout<<" "<<"2.题目的列数(1~7):";
cin>>h;
while(h>7||h<0)
{
cout<<" .请正确输入列数:";
cin>>h;

}

cout<<endl;

cout<<" "<<"3.打印间隔(1~5):";
cin>>t;
while(t>5||t<0)
{
cout<<" .请正确输入间隔:";
cin>>t;

}
cout<<endl;


cout<<" "<<"4.数值最大为多少:";
cin>>b;
while(b>500||b<-500)
{
cout<<" .请重新输入最大数(0~500):";
cin>>b;

}
cout<<endl;

cout<<" "<<"5.式内是否有乘除(有:1;无:0):";
cin>>a;
while(a!=1&&a!=0)
{
cout<<" .请重新输入条件:";
cin>>a;

}
cout<<endl;

cout<<" "<<"6.加减数有无负数(有:1;无:0):";
cin>>z;
while(z!=1&&z!=0)
{
cout<<" .请重新输入条件:";
cin>>z;

}
cout<<endl;
cout<<"***********"<<"以下是题目"<<"*****************"<<endl;

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

{
cout<<i+1<<".";

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

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

n=d%4;

if(n==3)
{
if(Y!=0)
{
X=Y*(rand()%100);//确定能够除尽
}
else
{
X=(Y+1)*(rand()%100);
}
}
//------------------------------------有无乘除
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<<")"<<"="<<"\t";
}
else
{
cout<<X<<"+"<<Y<<"="<<"\t";
};break;
case 1:if(z>0)
{
cout<<x<<"-"<<"("<<y<<")"<<"="<<"\t";
}
else
{
cout<<X<<"-"<<Y<<"="<<"\t";
};break;
case 2:cout<<X<<"*"<<Y<<"="<<"\t";break;
case 3:cout<<X<<"/"<<Y<<"="<<"\t";break;

}
//-----------------------------------------判断是否答对,并且计算答对的数量
// cin>>anwer[i];
switch(n)
{
case 0:rightanwer[i]=x+y;break;
case 1:rightanwer[i]=x-y;break;
case 2:rightanwer[i]=X*Y;break;
case 3:rightanwer[i]=X/Y;break;

}

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

if((i+1)%h==0)
{
for(j=0;j<t;j++)
{
cout<<endl;
}
}

}
cout<<endl;
cout<<"****************************************"<<endl;
cout<<"请同学输入正确的答案:"<<endl;
for(i=0;i<m;i++)
{
cin>>anwer[i];
if(rightanwer[i]==anwer[i])
{


r[cunt]=i+1;
cunt++;
}
else
{

w[nc]=i+1;
nc++;
}
}
cout<<"*****************************************"<<endl;
cout<<"对学生答题情况进行系统统计:"<<endl;

cout<<"1).答对题目的数量为:"<<cunt<<endl<<"2).答错题目的数量为:"<<m-cunt<<endl;


cout<<"3).答对的题目为:";
for(i=0;i<(cunt);i++)
{
cout<<r[i]<<" ";
}
cout<<endl;


cout<<"4).答错的题目为:";
for(i=0;i<(nc);i++)
{
cout<<w[i]<<" ";

}
cout<<endl;


cout<<"5).正确答案为:"<<endl;
for(i=0;i<m;i++)
{
cout<<" "<<rightanwer[i]<<" ";
}
cout<<endl;


}


//--------------------------主函数
int main()
{
int a;
int b;
cout<<"***********"<<"四则运算题目定制:"<<"************"<<endl<<endl;
size(a,b);
return 0;
}

三.运算截图

四.编程总结

    在编写程序的过程中一定要做到条理有序不仅便于读写代码,而且便于程序的测试。

    在这次的程序的开放过程中体会到用户的需求,例如,用户需要知道自己那道题目答对那道答错,然后知道正确结果。程序要求很快就编写完成,更多的时间是在完善程序,真让我深有体会。

五.记录开发表

3 周活动总结表            
姓名: 付东     日期: 3月21日    
日期\任务 听课 编写程序 阅读课本 准备考试     日总计
周日              
周一              
周二 300 30 0       330
周三 100 0         100
周四 400 0 0       400
周五 200 40 0       240
周六 0 240 0       150
周总计 1000 290 0       1290
               
阶段时间和效率     周数: 3      
               
不包括上一周在内的累计时间              
总计 1000 290         1290
平均 1000 290         1290
最大 1000 290         1290
最小 1000 290         1290
               
               
以前各周的累计时间              
总计 2490 500 45       3400
平均 1245 250 22.5       1700
最大 1200 290 45       1535
最小 1200 210 0       1410

 

学生: 付东   日期: 3月21日    
教师: 王建民   课程: 软件工程    
             
日期 开始时间 结束时间 中断时间 净时 活动 备注
3月18日 9:30 11:30 10:00 100 编程 四则程序的扩展
  2:30 5:40   150 编程 四则的扩展,聊天,玩手机
  7:30 9:50   120 阅读英语 好好考级
3月20日 9:20 11:30 20 70 编程结对 编程,聊天,玩手机
  4:00 4:30   30 作业 将最近的作业写完
3月21日 2:00 5:30 2:30-3:40 110 结对编程 打球编程
  7:00 9:00   120 上传博客  
学生: 付东          
日期: 3月21日          
教员: 王建民          
程序: 四则运算扩展          
日期 编号 类型 引入阶段 排除阶段 修复时间 修复缺陷
3月18日 1   编码 编码 2min  
  循环次数使用错误
  2   编码 运行 10min  
  数组定义太大导致程序错误。
3月20日 3   编码 编译 1min  
  程序中使用制表符驶左对齐。
  4   编码 编译 1min  
 3月21 日 结对二实验中,输入数组的行列计算错误
  5   编码 编译 0.2min  
  测试正确错误题目错误,算好循环次数。
  6   编码 编译 0.2min  
  计算子数组中,加法中输入的数组不对应。
posted on 2015-03-21 20:58  半梦半痴半愚蠢  阅读(152)  评论(1编辑  收藏  举报