结对编程-C++四则运算
- 小学老师要每周给同学出300道四则运算练习题。
–这个程序有很多种实现方式:
C/C++
C#/VB.net/Java
Excel
Unix Shell
Emacs/Powershell/Vbscript
Perl
Python
–两个运算符,100 以内的数字,不需要写答案。
–需要检查答案是否正确,并且保证答案在 0..100 之间
–尽可能地多设置一些条件
- 也可以让同学们自选一个小应用程序进行结对编程的开发
- 请两位同学以结对编码(一个同学coding,另一个同学在旁边审核代码,之后再交换角色)的方式完成本次实验,并把程序、运算结果、博客体会等截屏发到其中一位同学的博客上,并在博客中体现另一位同学的学号(仅学号不体现姓名)
结对同学学号:2252527
在我开始编程的时候,我首先先想的是先编写一个生成一个0-100的随机数的函数getNumber(),这先需要引入
再然后就是随机生成一个运算符的函数getOperator()了,这个我最先想的是先生成一个数组,这个数组内有加减乘除这四个运算符,然后通过rand()函数随机生成一个数再%4,这样就可以随机选择数组内的加减乘除了,但是后面发现了一个问题就没有采用这个方式,这个问题待会再讲,再然后需要一个函数来判断结果是否在0-100之间的整数,这个非常简单,只需要让answer>=0,<=100并且%1==0就好了.
接下来就是main()函数的内容,就是先用前面的生成随机数的函数getNumber()随机生成两个数,然后再用getOpetator()随机生成一个运算符,再规定它们的运算结果不能超过100和小于0,并且必须是整数就ok了,然后就是用户输入答案,答案正确就显示回答正确,答案错误就显示回答错误并显示正确答案,这些没什么好说的,在编写完程序后结果大概就是这个样子
在我编写随机数的时候,我的搭档给了我一个建议,他说在编写随机数生成的程序时,通常会使用一个种子来初始化随机数生成器。种子是一个起始值,用于确定随机数序列的起始状态。如果不使用种子或者每次都使用相同的种子,那么每次运行程序生成的随机数序列都会是相同的,这样就失去了随机性。
使用当前时间作为种子是一种常见的做法,因为时间是一个变化的值,每次运行程序时都会有所不同,这样可以确保每次生成的随机数序列都是不同的,增加了随机性。
我觉得他说的非常有道理,于是我在主函数main()中添加了srand(time(0))这行代码,这需要引入一个新的头文件
最后,我再来解释一下为什么我不采用原来生成随机运算符的方法,因为在我运行程序之后我发现大多数题目好像都是加法和减法,乘法和除法比较少见,我觉得这是因为在生成乘法的时候,随机生成的数的乘积很容易超过100从而并没有显示,同理除法也是一样的,除出来的很可能并不是整数而被抛弃,于是我就想能不能提高乘法和除法的运算出现的频率?我看到了我的随机生成数的函数getNumber()的区间正好是0-100,于是我就取了个巧,让它来帮我决定生成运算符的概率,我让它随机生成一个数,然后因为这个数是随机的,它取到小于等于20的数的概率是20%,我就可以当rand()<=20的时候取'+',这样取到加号的概率就是20%,同理这样可以控制每个运算符出现的概率,这样我就可以提高生成乘法和除法的概率了.
通过结对编程,我深刻认识到合作的力量。与搭档一起面对编程挑战,我们各自发挥所长,共同探索解决方案。在交流合作的过程中,我不仅学会了更好地表达自己的想法,也懂得了倾听和理解他人的观点。结对编程的过程中,我们发现了彼此的不足之处,并互相激励着努力提升技术水平。尽管偶尔会有分歧,但正是这些分歧促使我们更深入地思考问题,最终找到更加完善的解决方案。总的来说,结对编程不仅提高了编程效率,也锻炼了团队协作和沟通能力,是一次非常宝贵的经历。
最后,代码如下
点击查看代码
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
//生成随机数
int getNumber(int min, int max) {
return rand() % (max - min + 1) + min; //生成 min 到 max 之间的随机数
}
//生成随机运算符
char getOperator() {
int randNum = getNumber(1, 100); //生成1到100之间的随机数
//根据随机数的值确定运算符的选择概率
if (randNum <= 20) { //20% 的概率选择 +
return '+';
}
else if (randNum <= 40) { //20% 的概率选择 -
return '-';
}
else if (randNum <= 70) { //30% 的概率选择 *
return '*';
}
else { //剩余 30% 的概率选择 /
return '/';
}
}
//检查答案是否在0到100之间并且为整数
bool isValidAnswer(int answer) {
return answer >= 0 && answer <= 100 && answer % 1 == 0;
}
int main() {
srand(time(0)); //使用当前时间作为随机数种子
for (int i = 0; i < 300; ++i) {
int num1, num2;
char op;
do {
num1 = getNumber(0, 100); //生成0到100之间的数
num2 = getNumber(0, 100); //生成0到100之间的数
op = getOperator();
} while ((op == '+' && num1 + num2 > 100) || //加法结果不能超过100
(op == '-' && num1 - num2 < 0) || //减法结果不能是负数
(op == '*' && num1 * num2 > 100) || //乘法结果不能超过100
(op == '/' && (num1 % num2 != 0 || num2 == 0 || num1 / num2 > 100))); //除数与被除数之间是倍数关系,且除法结果不超过100
//输出题目
cout << "题目 " << i + 1 << ": " << num1 << " " << op << " " << num2 << " = ?" << endl;
//输入答案
int userAnswer;
cout << "请输入答案:";
cin >> userAnswer;
//计算正确答案
int correctAnswer;
switch (op) {
case '+':
correctAnswer = num1 + num2;
break;
case '-':
correctAnswer = num1 - num2;
break;
case '*':
correctAnswer = num1 * num2;
break;
case '/':
correctAnswer = num1 / num2;
break;
}
//检查答案是否正确
if (userAnswer == correctAnswer && isValidAnswer(userAnswer)) {
cout << "回答正确!" << endl;
}
else {
cout << "回答错误!正确答案是:" << correctAnswer << endl;
}
cout << endl;
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现