C++:小学生学习四则运算的练习程序

题目

用线性同余法生成随机数序列的公式为:
rk= (multiplier * (rk-1) + increment) % modulus

序列中的每个数rk都可以由它的前一个数rk-1计算出来.

例如, 如果有:

rk = (25173 *(rk-1) + 13849) % 65536

则可以产生65536个各不相同的整型随机数. 设计一个函数作为随机数生成器, 生成1位或2位的随机数.

利用这个随机数生成器, 编写一个小学生学习四则运算的练习程序.

要求:

1.可以进行难度选择,一级难度只用1位数, 二级难度用2位数

2.可以选择运算类型,包括加、减、乘、除等

3.给出错误提示

4.可以统计成绩

5.产生随机数的那个函数

函数头: int Rand(int low, int high); //生成指定范围的随机数

函数体的实现: 先声明静态变量, 不赋初值, 然后对该变量使用线性同余法公式, 直到该变量满足大于等于low, 小于high, 然后返回该变量.

6.测试用例保证不会出现除数为0

7.样例输入/输出见下, 首先有正整数T, 代表小学生想要练习T组四则运算, 每组开始之前小学生先选择难度(1代表一级难度 2代表二级难度)和运算符(+ - * /), 每组四则运算都有10道题, 每次小学生算错程序需要提示小学生:“Your calculation is wrong, 正确运算”, 每组结束给出小学生的最终得分.

分析

1.首先分析题目大意,可以得知程序设计有几大模块功能:随机数生成,出题,结果检查。
2.第一个函数Rand用于生成指定范围内的随机数。它使用了一个静态变量 seed 来保存随机数生成器的种子,并根据线性同余法生成伪随机数。具体的生成算法是 seed = (multiplier * seed + increment) % modulus,其中 multiplier、increment 和 modulus 是预先定义好的常数。然后返回在指定范围内的随机数。
2.第二个函数check用于返回bool来判断结果的正确性。
3.第三个函数执行一次运算,从用户出接收出题的level和运算类型,给出相应的题目,最后调用check判断对错返回分数。

整体代码

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

int Rand (int low,int high){
	static int seed = time(0);
	const int multiplier =25173;
    const int increment =13849;
    const int modulus =65536;
    seed = (multiplier*seed +increment)%modulus;
    return low +seed%(high-low);
} 

bool check (int num1,int num2,char op,int result){
	switch(op){
		case '+':return num1+num2==result;
		case '-': return num1-num2==result;
		case '*': return num1*num2==result;
		case '/': return num2 != 0 && num1 / num2 == result;break;
		default : return false;
	}
}

int caculate (int level,char operation){
	int score =0;
	for(int i=0;i<10;i++){
		int num1,num2;
		if(level==1){
			num1=Rand(1,10);
			num2 =Rand(1,10);
		}
		else{
			num1=Rand(10,100);
			num2=Rand(10,100);
		}
		int result;
		switch (operation){
		case '+': result =num1+num2;break;
		case '-':result =num1-num2;break;
		case '*':result = num1*num2;break;
		case '/':
			if(num2==0){cout<<"除数不能为零"<<endl;continue;}
			result =num1/num2;break;
		}
		cout<<num1<<operation<<num2<<"=";
		int answer;
		cin>>answer;
		if(check(num1,num2,operation,answer)){
			cout <<"正确!"<<endl;
			score+=10;
		}
		else{cout<<"错误!正确答案是: "<<result<<endl;}
		}
		return score;
}

int main(){
	int t;
	cout<<"做多少套:";
	cin>>t;
	for(int T=0;T<t;T++){
	int level;char operation;
	cout<<"选择难度等级(1~2)为:";
	cin>>level;
	cout<<"选择练习运算为:";
	cin>>operation;
	int score = caculate(level,operation);
	cout<<"你的得分是:"<<score<<endl; 
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值