一.设计思想
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<<")"<<"="<<" ";
}
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;
}
//-----------------------------------------判断是否答对,并且计算答对的数量
// 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 | |||
计算子数组中,加法中输入的数组不对应。 |