请帮帮忙吧~先谢谢啦——[题目描述]随机产生1-10之间的随机正整数,进行四则运算,共十道题,在屏

请帮帮忙吧~先谢谢啦——[题目描述]随机产生1-10之间的随机正整数,进行四则运算,共十道题,在屏幕上产生算式:6*7=?若正确打印“Good!”如果错误打印“Wrong,Try Again!”但每个题只有三次重做机会,做对一题得十分,根据答题情况输出分数。

第1个回答  推荐于2016-06-05
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <time.h>

char g_cSign[] = "+-*/";

//随机生成x到y的随机数
int GetSrand(int x, int y)
{
srand(GetTickCount()); //毫秒级 获得计算机开机时间
return rand() % (y - x + 1) + x;
}

//随机选择符号
char GetSign()
{
return GetSrand(0, 3);
}
//随机生成2个数 存入数组
void GetNumber(char * pNumber)
{
int nNumber = GetSrand(10, 99);
*pNumber = nNumber / 10;
*(pNumber + 1) = nNumber % 10;
}

void CreateEquation(char * pEqua)
{
char cTwoNumer[2];
GetNumber(cTwoNumer);
sprintf(pEqua, "%d%c%d=?\n", cTwoNumer[0], g_cSign[GetSign()], cTwoNumer[1]);
}

BOOL Answer(char * pEqua)
{
char cAnswer[30];
float nAnswer;
float fNum1=atof(pEqua);
float fNum2=atof((pEqua + 2));
double dResult;
char cResult[30];
switch (*(pEqua + 1))
{
case'+':dResult = fNum1 + fNum2;
break;
case'-':dResult = fNum1 - fNum2;
break;
case'*':dResult = fNum1 * fNum2;
break;
case'/':dResult = fNum1 / fNum2;
break;
}

if (*(pEqua + 1) == '/')
{
printf("请保留2位小数!\n");
sprintf(cResult, "%.2lf", dResult);
}
else
sprintf(cResult, "%.0lf", dResult);

for (int i = 0; i < 3; i++)
{
printf("result:");
scanf("%s", cAnswer);
if (strcmp(cAnswer, cResult) != 0)
{
printf("Wrong,Try Again!\n");

continue;
}
return TRUE;
}
printf("本题打错!\n");
return FALSE;
}

int main(void)
{
char cEque[50];
int nGoal = 0;
for (int i = 0; i < 10; i++)
{
printf("题目%d:\n",i+1);
CreateEquation(cEque);
printf(cEque);
if (Answer(cEque) == FALSE)
continue;
printf("Good!\n");
nGoal += 10;
}
printf("总分:%d\n", nGoal);
system("pause");
return 0;
}追问

能不能用简单点的c
语言,我还是菜鸟,还没入门呢,看不太懂,真的非常感谢啦!!!

追答

atof 把公式中的数转换为浮点数值
swich case 判断 是哪个运算符号进行计算
sprintf 把数值转换为字符
strcmp 比较字符串是否相同 用来比较用户输入的字符是否和计算结果字符相同

这儿我主要是用字符串处理来完成的
主要的函数 程序结构 我都跟你说了
静下心来看~ 会理解的~

本回答被提问者采纳
相似回答