首页 > 编程语言 >结对编程——100以内加减乘除

结对编程——100以内加减乘除

时间:2024-04-17 14:12:19浏览次数:28  
标签:结对 int 编程 a1 a3 a2 && 100 加减乘除

前言
按照结对编程的原则,我(2252627)和我的合作伙伴(2252616)两人进行了结对编程,我们共同完成的项目的是小学的四则运算,通过随机生成四则运算题目,供学生答题,并在学生提交答案后进行自动评定,返回正误。经过讨论,我们采用了C++语言作为开发语言,并选取Dev C++5.11作为开发环境。

功能要求
小学老师要每周给同学出300道四则运算练习题。
–这个程序有很多种实现方式:
C/C++
C#/VB.net/Java
Excel
Unix Shell
Emacs/Powershell/Vbscript
Perl
Python
–两个运算符,100 以内的数字,不需要写答案。

–需要检查答案是否正确,并且保证答案在 0..100 之间

–尽可能地多设置一些条件
创新性:
在算式中如果出现除法运算,算式能保证不出现小数;
程序保证每一个算式的结果都是0到100之间的整数;
程序对非法输入有处理,提高了程序的健壮性;
程序对回答者的正确率进行了计算,并进行针对性的评价;

设计思路
实现我们讨论了程序应该实现的功能和程序框架,然后由我负责编程,2252616同学建设性的提出了具体的实现框架,决定了要实现的功能以及如何实现。随后,我正式开始了编程,我们在编程过程中始终保持无障碍沟通,最终实现了四则运算的题目。
具体代码如下:

#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std; 
char fuhao[2];//选择的运算符 
char jjcc[4]={'+','-','*','/'};//用于随机运算符时选择 
int num[3];//随机选择的数字 
int yes=0;//所选择的算式正确计算时的结果 
string ANT;//输入的内容,用字符串存储,防止非法输入 
int ant=0;//由ANT转换成的数字 
int getRand(int min, int max) //返回min到max之间的随机数,左闭右闭区间
{
    return ( rand() % (max - min + 1) ) + min ;
}
bool ooo(int a1,char b1,int a2,char b2,int a3)//判断生成的表达式结果在不在0到100之间 
{//yes为该算式的结果 
	if(fuhao[0]=='+'&&fuhao[1]=='+')
		{yes=a1+a2+a3;return a1+a2+a3>=0&&a1+a2+a3<=100;}
	if(fuhao[0]=='+'&&fuhao[1]=='-')
		{yes=a1+a2-a3;return a1+a2-a3>=0&&a1+a2-a3<=100;}
	if(fuhao[0]=='+'&&fuhao[1]=='*')
		{yes=a1+a2*a3;return a1+a2*a3>=0&&a1+a2*a3<=100;}
	if(fuhao[0]=='+'&&fuhao[1]=='/')
		{yes=a1+a2/a3;return a1+a2/a3>=0&&a1+a2/a3<=100;}
		
	if(fuhao[0]=='-'&&fuhao[1]=='+')
		{yes=a1-a2+a3;return a1-a2+a3>=0&&a1-a2+a3<=100;}
	if(fuhao[0]=='-'&&fuhao[1]=='-')
		{yes=a1-a2-a3;return a1-a2-a3>=0&&a1-a2-a3<=100;}
	if(fuhao[0]=='-'&&fuhao[1]=='*')
		{yes=a1-a2*a3;return a1-a2*a3>=0&&a1-a2*a3<=100;}
	if(fuhao[0]=='-'&&fuhao[1]=='/')
		{yes=a1-a2/a3;return a1-a2/a3>=0&&a1-a2/a3<=100;}
		
	if(fuhao[0]=='*'&&fuhao[1]=='+')
		{yes=a1*a2+a3;return a1*a2+a3>=0&&a1*a2+a3<=100;}
	if(fuhao[0]=='*'&&fuhao[1]=='-')
		{yes=a1*a2-a3;return a1*a2-a3>=0&&a1*a2-a3<=100;}
	if(fuhao[0]=='*'&&fuhao[1]=='*')
		{yes=a1*a2*a3;return a1*a2*a3>=0&&a1*a2*a3<=100;}
	if(fuhao[0]=='*'&&fuhao[1]=='/')
		{yes=a1*a2/a3;return a1*a2/a3>=0&&a1*a2/a3<=100;}
	
	if(fuhao[0]=='/'&&fuhao[1]=='+')
		{yes=a1/a2+a3;return a1/a2+a3>=0&&a1/a2+a3<=100;}
	if(fuhao[0]=='/'&&fuhao[1]=='-')
		{yes=a1/a2-a3;return a1/a2-a3>=0&&a1/a2-a3<=100;}
	if(fuhao[0]=='/'&&fuhao[1]=='*')
		{yes=a1/a2*a3;return a1/a2*a3>=0&&a1/a2*a3<=100;}
	if(fuhao[0]=='/'&&fuhao[1]=='/')
		{yes=a1/a2/a3;return a1/a2/a3>=0&&a1/a2/a3<=100;}
}
void qwer()//初始化算式,并保证算式符合题目要求 
{
	fuhao[0]=jjcc[getRand(0,3)];
	fuhao[1]=jjcc[getRand(0,3)];//随机生成两个运算符 
    if(fuhao[0]!='/'&&fuhao[1]!='/')//这两个运算符里面没有除法 
    {
    	ddd:
    	num[0]=getRand(1,100);
    	num[1]=getRand(1,100);
    	num[2]=getRand(1,100);//随机弄三个整数 
    	if(!ooo(num[0],fuhao[0],num[1],fuhao[1],num[2])) goto ddd;
		//检查这个算式的结果符不符合要求 ,不符合则重新生成随机数
	}
	else//算式有除法,需要保证每一步的结果均为整数 
    {
    	if(fuhao[0]=='/'&&fuhao[1]=='/')//a/b/c
    	{
    		fff:
			num[0]=getRand(1,100);
    		num[1]=getRand(1,100);
    		num[2]=getRand(1,100);
    		if(num[0]%num[1]!=0||(num[0]/num[1])%num[2]!=0)  goto fff; 
    		//检查这个算式的每一步的结果是否均为整数 ,不符合则重新生成随机数
    		if(!ooo(num[0],fuhao[0],num[1],fuhao[1],num[2])) goto fff;
    		//检查这个算式的结果符不符合要求 ,不符合则重新生成随机数
    	}
    	if(fuhao[0]=='/'&&fuhao[1]!='/')//a/b?c
    	{
    		ggg:
			num[0]=getRand(1,100);
    		num[1]=getRand(1,100);
    		num[2]=getRand(1,100);
    		if(num[0]%num[1]!=0)  goto ggg; 
    		//检查这个算式的每一步的结果是否均为整数 ,不符合则重新生成随机数
    		if(!ooo(num[0],fuhao[0],num[1],fuhao[1],num[2])) goto ggg;
    		//检查这个算式的结果符不符合要求 ,不符合则重新生成随机数
    	}
    	if(fuhao[0]!='/'&&fuhao[1]=='/')//a?b/c
    	{
    		hhh:
		    num[0]=getRand(1,100);
    	    num[1]=getRand(1,100);
    	    num[2]=getRand(1,100);
    	    if(fuhao[0]=='+'&&num[1]%num[2]!=0)  goto hhh; 
    	    if(fuhao[0]=='-'&&num[1]%num[2]!=0)  goto hhh;
    	    if(fuhao[0]=='*'&&(num[0]*num[1])%num[2]!=0)  goto hhh;
    	    //检查这个算式的每一步的结果是否均为整数 ,不符合则重新生成随机数
    	    if(!ooo(num[0],fuhao[0],num[1],fuhao[1],num[2])) goto hhh;
    	    //检查这个算式的结果符不符合要求 ,不符合则重新生成随机数
    	}
	}
}
bool BBB(string s)//将输入的字符串转换为数字放如ant里,并判断是否有非法输入 
{
	int q=1;
	for(int i=s.size()-1;i>=0;i--)
	{
		if(s[i]-'0'>=0&&s[i]-'0'<=9)
		{
		    ant=ant+(s[i]-'0')*q;
		    q=q*10;
		}
		else
		    return false;
	}
	return true;
}
int main() 
{
    srand(time(0));
    int t=300;//最大答题数目 
	float YES=0;//正确的个数 
    cout<<"**************欢迎来到100内加减乘除程序**************\n"; 
    cout<<"输入n或者N退出程序\n\n";
    while(t--)//循环300次
    {
    	qwer();//qwer函数初始化算式并保证生成的算式符合要求
    	cout<<"问题:"<<num[0]<<fuhao[0]<<num[1]<<fuhao[1]<<num[2]<<endl;
    	ttt:
		cout<<"在这里写出你的答案:";
		getline(cin,ANT);//获取输入 
		if(ANT=="N"||ANT=="n")break;//提前结束 
		if(!BBB(ANT))//是否正确输入? 
		{
			cout<<"非法输入,请重新输入正确的值!\n";
			goto ttt;//回答上一步重新输入 
		}
		if(ant==yes)//回答正确 
		{
			cout<<"恭喜你!回答正确。"<<endl;YES++;
		}
		else//回答错误 
		{
			cout<<"很遗憾,回答错误。该算式的正确答案为:"<<yes<<endl;
			cout<<"按Eenter键继续回答……";
			getchar(); //“暂停”效果 
		}
		cout<<endl<<endl;
		ant=0;
	}
	YES=YES/(300-t);//计算正确率 
	printf("\n正确率为:%.2f",YES*100); 
	if(YES>=0.9)cout<< "%,你真棒!";
	if(YES>=0.6&&YES<0.9)cout<<"%,继续努力!";
	if(YES<0.6)cout<<"%,要加油了"; 
    return 0;
}

程序运行截图:

感悟
结对编程让我们明白了合作的重要性。在编程过程中,有时候一个人可能很难快速找到解决方案。但是,当两个人一起思考时,我们可以互相启发,共同找到问题的症结所在,从而更快地解决问题。这种合作不仅提高了我们的工作效率,还让我们在解决问题的过程中更加深入地理解了编程知识。
在本次结对编程过程中,也出现了一些问题。例如,有时候两个人的想法可能不一致,导致在解决问题上产生分歧。但是,我认为这正是结对编程的意义和价值所在。通过沟通和讨论,我们可以学会尊重对方的意见,学会在团队中寻求共识,这对于我们未来的职业发展是非常有益的。
在我们看了,这种相互交流,共勉共进的方式可以促进双方的的共同进步,不仅仅提高了我们的编程效率和技能,还促进我们之间的沟通和合作。

标签:结对,int,编程,a1,a3,a2,&&,100,加减乘除
From: https://www.cnblogs.com/2388234315zjl/p/18140591

相关文章

  • MBR30100PT-ASEMI肖特基二极管MBR30100PT
    编辑:llMBR30100PT-ASEMI肖特基二极管MBR30100PT型号:MBR30100PT品牌:ASEMI封装:TO-247最大平均正向电流(IF):30A最大循环峰值反向电压(VRRM):100V最大正向电压(VF):0.54V~0.92V工作温度:-40°C~170°C反向恢复时间:5ns芯片个数:2芯片尺寸:122mil正向浪涌电流(IFMS):200AMBR30100PT特性:......
  • 结对编程(c语言)
    作业要求:小学老师要每周给同学出300道四则运算练习题。选择c语言进行实现–两个运算符,100以内的数字,不需要写答案。–需要检查答案是否正确,并且保证答案在0..100之间–尽可能地多设置一些条件也可以让同学们自选一个小应用程序进行结对编程的开发请两位同学以结对编码(......
  • A7-100T的图像处理开发板
    深圳市飞录科技有限公司一:概述   开发板主控采用XilinxArtix-7系列FPGA,型号为XC7A100T-2FGG676C,具有100KLUTs,240个DSP,芯片集成了LVDS、DDR3,6.6GSerdes等控制器。XilinxArtix-7作为中规模FPGA的典范,选用28nm工艺,性能与解决方案非常成熟,在通信及图像市场的应用非常广......
  • 结对编程-c++四则运算
    题目:小学老师要每周给同学出300道四则运算练习题。–这个程序有很多种实现方式:C/C++C#/VB.net/JavaExcelUnixShellEmacs/Powershell/VbscriptPerlPython–两个运算符,100以内的数字,不需要写答案。–需要检查答案是否正确,并且保证答案在0..100之间–尽可能地多设置......
  • 结对编程-C++四则运算
    小学老师要每周给同学出300道四则运算练习题。–这个程序有很多种实现方式:C/C++C#/VB.net/JavaExcelUnixShellEmacs/Powershell/VbscriptPerlPython–两个运算符,100以内的数字,不需要写答案。–需要检查答案是否正确,并且保证答案在0..100之间–尽可能地多设置一......
  • 结对
    publicListgetStationsBetween(StringstartStation,StringendStation,List<List>allSubwayStations){ListstationsBetween=newArrayList<>();Map<String,List>graph=buildGraph(allSubwayStations);//检查起始站和终点站是否存在于地铁网络中if(......
  • 结对编程
    前言小学老师要每周给同学出300道四则运算练习题。–这个程序有很多种实现方式:C/C++C#/VB.net/JavaExcelUnixShellEmacs/Powershell/VbscriptPerlPython–两个运算符,100以内的数字,不需要写答案。–需要检查答案是否正确,并且保证答案在0..100之间–尽可能地多设......
  • 结对编程
    小学老师要每周给同学出300道四则运算练习题。–这个程序有很多种实现方式:C/C++C#/VB.net/JavaExcelUnixShellEmacs/Powershell/VbscriptPerlPython–两个运算符,100以内的数字,不需要写答案。–需要检查答案是否正确,并且保证答案在0..100之间合作伙伴:2252522代......
  • 结对编程-C#-四则运算
    结对编程-四则运算要求:小学老师要每周给同学出300道四则运算练习题。–这个程序有很多种实现方式:C/C++C#/VB.net/JavaExcelUnixShellEmacs/Powershell/VbscriptPerlPython–两个运算符,100以内的数字,不需要写答案。–需要检查答案是否正确,并且保证答案在0..100之......
  • 结对编程-四则运算
    要求:小学老师要每周给同学出300道四则运算练习题。–这个程序有很多种实现方式:C/C++C#/VB.net/JavaExcelUnixShellEmacs/Powershell/VbscriptPerlPython–两个运算符,100以内的数字,不需要写答案。–需要检查答案是否正确,并且保证答案在0..100之间–尽可能地多设......