一.设计思想
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 | |||
| 计算子数组中,加法中输入的数组不对应。 | ||||||
 
                    
                     
                    
                 
                    
                 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号