首页 > 编程语言 >结对编程

结对编程

时间:2024-04-24 21:24:17浏览次数:24  
标签:结对 答题 int 编程 else 生成 con

点击查看代码
#include<iostream>
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
using namespace std;
int j=0;
char yunsuanfu()
{
	char a[]={'+','-','*','/'};
	int n=4;
	int i;
	i=rand()%n;
	return a[i];
}
void question()
{
	char b,d;
	int a=rand()%100+1;
	b=yunsuanfu();
	int c=rand()%100+1;
	d=yunsuanfu();
	int e=rand()%100+1;	
	int con,con1;
	if(b=='+')
	{
		if(d=='+') con=a+c+e;
		else if(d=='-') con=a+c-e;
		else if(d=='*') con=a+c*e;
		else if(d=='/') con=a+c/e;
	}
	else if(b=='-')
	{
		if(d=='+') con=a-c+e;
		else if(d=='-') con=a-c-e;
		else if(d=='*') con=a-c*e;
		else if(d=='/') con=a-c/e;
	}
	else if(b=='*')
	{
		if(d=='+') con=a*c+e;
		else if(d=='-') con=a*c-e;
		else if(d=='*') con=a*c*e;
		else if(d=='/') con=a*c/e;
    }
	else if(b=='/')
	{
		if(d=='+') con=a/c+e;
		else if(d=='-') con=a/c-e;
		else if(d=='*') con=a/(float)c*e;
		else if(d=='/') con=a/(float)c/e;
	}
	if(con>=0 && con<=1000)
	{
		cout<<a<<b<<c<<d<<e<<'='<<endl; 
		cout<<"输入结果:";
 		cin>>con1;
		if(con==con1) 
		cout<<"Right!"<<endl;
 		else{
			cout<<"Wrong!"<<endl;
			cout<<"正确答案是:"<<con<<endl;
			j++;
		}
	}
	else if(con>1000 || con<0) {question();}
}

int main()
{
	cout<<"欢迎使用小学四则运算练习系统!"<<endl;
	cout<<"请根据题目输入答案,按下enter键答题!"<<endl;
	srand(time(NULL));
	for(int i=0;i<25;i++)
	{
		cout<<"第"<<i+1<<"题:"<<endl;
		question();
		if (j >=10) {
            cout<<"做错题数已达到10题,本次练习结束,成绩不合格,请多加练习!"<<endl;
			break; 
        }
	}
	cout<<"做错题数: "<<j<<endl;
	cout<<"总分数: "<<250-10*j<<endl;
	return 0;
}

运行结果:

博客体会:
本次课题为结对编程,结对编程旨在要我们学会团队合作,在完成作业的基础要求的同时结合两个人的观点与看法,集思广益地在程序上添加附加功能让程序更加完整;结对编程也能让我们在合作过程中学会不同于自己风格的代码编写,学会同一种内容的多种理解、编写方式。
作业内容为编写一个小学四则运算练习题程序。
由于我们小组对于C++语言比较熟悉,所以我们在讨论后一致决定使用C++来编程作业程序。
我们小组的编程思路是,一开始先将随机运算符和随机一百以内的数字生成出来,所以我们先编写了一个随机从“+”、“-”、“”、“/”四个运算符生成一个的函数,而对于随机数的生成我们则考虑使用“rand()%100+1”的形式来直接生成。
首先输出”欢迎使用小学四则运算练习系统!”和"请根据题目输入答案,按下enter键答题!”
的提示,以告诉使用者应该如何完成一次答题。出题方式为每次单独显示单道题而不是全部显示出来,这样可以避免答题者一次阅读多道题,出现答题混乱的情况。
而后在生成四则运算题的函数内,我们将式子通过以上方式拼凑在一块生成出来,在主函数中调用,由于本次作业内容中给的背景是“小学老师要每周给出300道四则运算练习题”,所以我们认为一周大概可以分为十来次布置,根据每天的作业量不同来合理安排,于是我们在主函数中设置的循环出题目的次数为25。所以我们的程序初步决定就是,一次出一题,做完一题按回车键进入下一题,每次总共出25题。

但是考虑到学生做题的时候,做完如果能知道对错并显示答案也许会更好,于是我们考虑在程序里面加上此类功能。但由于我们前面随机生成的运算符其实是以字符串的形式生成,只是简单地在题目中进行显示了,所以程序无法直接利用生成的题目式子计算出答案,在此我们利用了比较笨的方式,利用多个if语句将运算符一一对应得出答案,接着针对学生的答案给出对错判断,错误的话显示正确答案。不过一开始这些代码有些错误,在运行过程中,对于“con=a/c
e”以及“con=a/c/e”两个式子无法得出正确答案,后来考虑到也许是因为除号在此处的特殊性,在c之前加上了“(float)”就运行成功了。

由于题目中还要求,答案不能超过1000,所以我又在程序中加了判断答案是否在01000区间内的代码,如果不在的话则舍弃掉本次随机生成,重新调用本身(生成题目的函数)再随机生成一次。一开始这个地方也有些小问题,因为把重新调用本身的这行语句放在了前面,所以每次调用的时候,尽管生成的式子不符合答案在01000的要求,也会不终止地将函数运行完再调用一轮。最后我们使用了if和else if语句。

考虑到小学的作业一般老师都会评分或者评级,于是我们在主函数中加上了最终评分的代码,在开头初始化了一个“j=0”来记录学生的错题数目,在最终以满分一百分,错一题扣4分的评分制来计算学生的得分并显示。

考虑到小学生四则运算练习也有一定的正确率要求,因此如果某次练习错误题数>=10,即本次练习不及格,会自动结束本次答题,并且提醒答题者多加练习,这样设计的目的主要是起到督促练习、提高正确率的作用。

标签:结对,答题,int,编程,else,生成,con
From: https://www.cnblogs.com/Cxyyyyyy/p/18156368

相关文章

  • 结对编程
    #include<iostream>#include<cstdlib>#include<ctime>#include<fstream>#include<limits>//函数原型声明intgetRandomNumber(intmin,intmax);intmain(){intn;std::cout<<"请输入题目的数量:"<<st......
  • 自学编程两个月,现在我月入 4 万元
    这个外国小哥叫Nico,他一开始是个编程小白,后来把自己关在房间里花了两个月时间学会了编程,如今正在开发一款名为Talknotes的应用,可以将语音备忘录转化为结构化的内容,月收入5000美元。Nico从高中毕业就开始创业,大学只上了一个月就退学了,他尝试了很多方向,最终坚持做跨境电商和......
  • 第八周-结对编程
    作业题目程序源代码点击查看代码importrandomimporttimeimportosimportjsondefquestion():a=random.randint(0,100)b=random.choice(["+","-","*","/"])c=random.randint(0,100)d=random.choice(["......
  • 我为什么学习Rust编程?
    2024-04-24下午,今下午感受到如果要睡觉就应该让音响在自己耳边程序轰炸.翻看gitee,又再次看到这个loop示例,这几天忙于工作,除了偶尔刷下rust视频,rust的电子书,其他的都看得比较少,主要还是感觉工作疲倦之余已经没有精力来继续回顾和延伸.其实后来感觉不是的,就像那会儿接......
  • 并发编程(Semaphore)
    Semaphore,信号量,它保存了一系列的许可(permits),每次调用acquire()都将消耗一个许可,每次调用release()都将归还一个许可特性Semaphore通常用于限制同一时间对共享资源的访问次数上,也就是常说的限流。下面我们一起来学习Java中Semaphore是如何实现的。类结构Semaphore中包含了一......
  • 并发编程(CyclicBarrier)
    CyclicBarrier是一个同步器,允许一组线程相互之间等待,直到到达某个公共屏障点(commonbarrierpoint),再继续执行CyclicBarrier与CountDownLatch异同都可以阻塞一组线程等待被唤醒CyclicBarrier是最后一个线程到达后会自动唤醒,而CountDownLatch需要显式调用countDown方法Cyc......
  • C#的基于.net framework的Dll模块编程(二) - 编程手把手系列文章
          今天继续这个系列博文的编写。接上次的篇幅,这次介绍关于C#的Dll类库的创建的内容。因为是手把手系列,所以对于需要入门的朋友来说还是挺好的,下面开始咯: 一、新建Dll类库;这里直接创建例子的Dll类库项目,至于项目文件目录的存放布局后面的例子中会介绍。......
  • Pyhton - 类元编程
    目录身为对象的类type:内置的类工厂函数类元编程是指在运行时创建或定制类的技艺。在Python中,类是一等对象,因此任何时候都可以使用函数新建类,无须使用class关键字。类装饰器也是函数,不过能够审查、修改,甚至把被装饰的类替换成另一个类。最后元类是类元编程最高级的工具:使用元类可......
  • 单向循环链表和双向链表程序编程
    链表学习记录设计单向循环链表的接口/***********************************************************************************************************设计单向循环链表的接口****Copyright(c)[email protected]*************......
  • Flink状态编程:为什么不建议在ValueState里面存Map?
    Flink状态编程:为什么不建议在ValueState里面存Map?文章目录先说结论性能:TTL:State需要存什么数据Heap模式ValueState和MapState如何存储StateBackend模式如何存储和读写State数据1.RocksDB模式ValueState和MapState如何存储1.1ValueState如何映射为RocksDB......