c++求解,一道关于计算机随机产生10道四则运算题

通过计算机随机产生10道四则运算题,两个操作数为1~10之间的随机数,运算类型为随机产生的加、减、乘、整除中的任意一种,如果输入答案正确,则显示“Right!”,否则显示... 通过计算机随机产生10道四则运算题,两个操作数为1~10之间的随机数,运算类型为随机产生的加、减、乘、整除中的任意一种,如果输入答案正确,则显示“Right!”,否则显示“Not correct!”,不给机会重做,10道题做完后,按每题10分统计总得分,然后打印出总分和做错题数。
使用子函数实现两个数相加的测试。此函数的输入参数是两个加数,返回值是用户运算的正确与否(用1或者0表示)。在此函数中首先读入用户输入的加法结果,并与正确结果进行比较。
int AddTest(int a, int b) ;
展开
 我来答
777999666qhw
2010-12-06 · TA获得超过4871个赞
知道大有可为答主
回答量:5615
采纳率:25%
帮助的人:4614万
展开全部
#include <iostream>
#include <stdlib.h>
#include <ctime>
#include <conio.h>

using std::cin;
using std::cout;
using std::endl;

//计算式 数量
int const Num = 10;
//计算式中 最大数
int const MaxNum = 10;

enum enOp{Add,Subtract,Multiply,Divide};
//加法
int addFun(int left,int right)
{
return left + right;
}
//减法
int subFun(int left,int right)
{
return left - right;
}
//乘法
int mulFun(int left,int right)
{
return left * right;
}
//除法
int divFun(int left,int right)
{
return left / right;
}

//将 枚举类型转换为字符类型,以便输出。
char enum2char(enOp op)
{
switch (op)
{
case Add:
return '+';
case Subtract:
return '-';
case Multiply:
return 'x';
case Divide:
return '/';
}
return ' ';
}

//计算生成表达式的正确结果。
int myResult(int left,int right,enOp op)
{
switch (op)
{
case Add:
return addFun(left , right);
case Subtract:
return subFun(left , right);
case Multiply:
return mulFun(left , right);
case Divide:
return divFun(left , right);
}
return 0;
}

//检查生成计算式的正确与否。其中 减法结果不能为负数,除法结果不能为小数。
bool checkFormula(int left,int right,enOp op)
{
switch (op)
{
case Add:
return true;
case Subtract:
{
if(left < right)
return false;
return true;
}
case Multiply:
return true;
case Divide:
{
if(double(left/right) != double(double(left)/double(right)))
return false;
return true;
}
}
return false;
}

//依据给定操作符,生成符合条件的表达式。
void getFormula(int* left,int*right,enOp op)
{
//srand(time(NULL));
for(;;)
{
*left = 1 + rand() % MaxNum;
*right = 1 + rand() % MaxNum;
if(checkFormula(*left,*right,op))
break;
}
}

int main()
{
//操作符左值
int left[Num];
//操作符右值
int right[Num];
//用户输入计算结果
int result[Num];
//操作符 +-*/
enOp oper[Num];
//正确答案个数
int answerRight = 0;

cout<<"正在生成,请稍等。"<<endl;
//随机种子
srand(time(NULL));
//开始生成计算表达式。
for(int i = 0;i<Num;i++)
{
//srand( (unsigned)time(NULL));
//操作符
oper[i] = enOp(rand()%4);
getFormula(&left[i],&right[i],oper[i]);
}

cout<<"生成计算式完成,开始答题!"<<endl;

//输出表达式,让用户答题
for(int i = 0;i<Num;i++)
{
//输出表达式
cout<<"第 "<<i+1<<" 题: \n";
cout<<left[i]<<' '<<enum2char(oper[i])<<' '<<right[i]<< " = ";
//获取用户答案
cin>>result[i];
//比对用户答案是否正确,正确输出 right,answerRigth加一,否则输出not correct。
if(result[i] == myResult(left[i],right[i],oper[i]))
{
cout<<"Right!\n";
answerRight++;
}
else
{
cout<<"Not correct!\n";
}
}

//全部答题完毕,输出正确答案个数及得分。
cout<<"终止答题,共 "<<Num<<" 题,每题 10 分 ,答对 "<<answerRight<<" 题,得分 :"
<<answerRight*10<<" 分。";

//屏幕停止。
getch();

return 0;
}
z85525006
2010-12-06 · TA获得超过1003个赞
知道小有建树答主
回答量:672
采纳率:0%
帮助的人:561万
展开全部
把加减乘除,放在 数组中,然后用随机函数产生值来弄就可以了~! 要弄多少次,你也可以弄.

比如产生总数: 3次.
//来个死循环,一直做题目
while(1)
{
产生总随机数: 比如 3

for(i=1;i<=3;i++)
{
产生 随机数: 0-999吧,自己设定...
再产生一个符号随机数,只有1-4的范围.
然后从数组中提取符号.
比如: 第一次循环: 2+ 第二次循环: 2+3-
你随便也在这里做运算:
switch ch
{
case '+': //加法
sum+=?; 加上你的随机数就可以了.,下面也一样
case '-': //减法
case '*': //这是乘法
case '/': //这是除法
}
}
//当退出3次循环的时候,你就比较,对方输入的值.
scanf("%ld",&?);
if( ? == sum)
{
如果正确就输出 "right"
}
else
你自己也知道了.
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
乐正涵柳3
2010-12-06 · TA获得超过952个赞
知道小有建树答主
回答量:650
采纳率:100%
帮助的人:688万
展开全部
#include <stdlib.h>
//#include <iostream.h>
//#include <conio.h>
#include <time.h>
int main()
{
int a = 0;
int b = 0;
int mode = 0;//0:加 1:减 2:乘 3:除
int c = 0;
int result = 0;
int score = 0;
int i = 0;

srand( (unsigned)time( NULL ) );
for(i=0;i<10;i++)
{
a = rand() % 10;
b = rand() % 10;
mode = rand() % 4;
printf("%d", a);
switch(mode)
{
case 0:
printf(" + ");
result = a + b;
break;
case 1:
printf(" - ");
result = a - b;
break;
case 2:
printf(" * ");
result = a * b;
break;
case 3:
printf(" / ");
result = a / b;
break;
default:
printf("something is wrong!\n");
break;
}
printf("%d = ", b);
scanf("%d", &c);
if(c == result)
{
score += 10;
printf("Right\n\n");
}
else
{
printf("Wrong\n\n");
}
}
printf("Your score is: %d\n\n\n", score);
return 1;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2010-12-07
展开全部
请用Word编辑作业文件夹下的Word1.DOC文档, 要求如下:

1、选择页面视图方式,利用设置页面左、右边距,按下列要求对全文进
行排版:设置全文的左边距为4厘米,右边距为2厘米,并将文档中的
“盛产”替换成“生产”,设置为黑体三号字,并加下划线(单线下划线)。
2、把文档中的第二自然段与第一自然段互换位置,然后在文档的结尾处
另起一段,并将交换后的文档复制一份。将第三自然段行间距设置为3倍。
3、将文档中"石油"设置为黑体小4号字,每个自然段首行空2个汉字。
4、在文档末尾插入一个3行3列的表格,如下图,表格线要求实线,表格内
容居中,并设置为宋体五号字。
┌———┬————┬——┐
│姓 名│ 考号 │成绩│
├———┼————┼——┤
│张小丽│0089│80│
├———┼————┼——┤
│王华强│0089│80│
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式