C语言代码,100以内随机加减乘除 5

要求:1、答对提示恭喜,答错续答,答错三次给出正确答案。2、随机给出100以内加减乘除。3、用switch型语句编写。... 要求:
1、答对提示恭喜,答错续答,答错三次给出正确答案。
2、随机给出100以内加减乘除。
3、用switch型语句编写。
展开
 我来答
百度网友f160a72
2013-06-09 · TA获得超过363个赞
知道小有建树答主
回答量:461
采纳率:0%
帮助的人:402万
展开全部
//100以内加减乘除 不会出现 97*33 或者是 37 / 21 之类的
//但还是避免不了 1*30, 10/1 这么残的
#include <stdio.h>
#include <time.h>
#include <stdlib.h>

void swap(int &a, int &b)
{
int tmp = a;
a = b;
b = tmp;
}
int func(){
int opn1, opn2, index;
int input, ret, i;
char op;
const char op_a[] = {'+', '-', '*', '/'};
srand(time(NULL));
index = rand()%4;
op = op_a[index];
switch(index){
case 0:
case 1:
ret = rand()% 100 + 1;
opn1 = rand()% ret;
opn2 = ret - opn1;
if(index == 1) swap(ret, opn1);
break;
case 2:
case 3:
ret = rand()% 100 + 1;
opn2 = (rand() % 10 + 1);
opn1 = ret / opn2;
if(opn1 == 0) ret *= 10;
opn1 = ret / opn2;
opn2 = ret /opn1;
ret = opn1 * opn2;
if(rand()%2 == 0) swap(opn1, opn2);
if(index == 3) swap(ret, opn1);
break;
default:
break;
}
printf("%d %c %d = ?\n", opn1, op, opn2);
i = 0;
scanf("%d", &input);
while(input != ret){
printf("wrong %d\n", ++i);
if(i == 3) {
printf("answer is %d\n", ret);
break;
}
scanf("%d", &input);
}
if(i < 3) printf("right\n");
return i;
}
int main(){
//func();
while(1) func();
return 0;
}
追问
有五个错误。。
yuhezcb0755
2013-06-09 · TA获得超过643个赞
知道小有建树答主
回答量:237
采纳率:0%
帮助的人:117万
展开全部
刚写了个, 在你的要求上还增加了循环答题 , 最后判断正确率。

#include <stdio.h>

int main(void)
{
int i = 0, a, b, ret, user_ret;
char symbol; // 符号, 0(+), 1(-), 2(*), 3(/)
int count, right = 0;

srand(time(NULL)); // 随机种子

while (1) {
a = rand() % 100; // 随机取得数字1
b = rand() % 100; // 随机取得数字2
symbol = rand() % 4; // 随机取得运算符号

switch (symbol) { // 根据符号计算机先算出结果,并将数字转换成数学运算符号
case 0 : { // 加
ret = a + b; // 先算得结果
symbol = '+'; // 符号
} break;

case 1 : { // 减
ret = a - b;
symbol = '-';
} break;

case 2 : { // 乘
ret = a * b;
symbol = '*';
} break;

case 3 : { // 除
ret = a / b;
symbol = '/';
}
}

printf("%d%c%d=", a, symbol, b); // 输出公式给用户看

count = 0; // 每道题重做次数都清0
while (1) {
scanf("%d", &user_ret);

if (user_ret == ret) { // 判断用户回答与计算机结果是否相同
printf("回答正确\n");
right ++; // 正确数加1
break; // 跳出内循环
}

printf("错误,再次输入:");
count++; // 答错计数+1

if (count == 3) { // 连续错了3次
printf("正确答案是:%d\n", ret);
break; // 跳出内循环
}
}

i++; // 已答题数+1

printf("是否继续(y/n)?\n");
getchar(); // 吃掉缓冲区的换行符, 不太保险的做法, 正确做法应该fgets代替scanf
scanf("%c", &symbol); // 接收用户的选择结果

if (symbol != 'y' && symbol != 'Y') // 如果不是输入的'Y'或'y'就退出,否则继续下一题 .
break;
}

// 计算结果, 其中i是总共的出题数, right为做对数,
printf("练习结束, 共做题%d, 正确%d, 正确率%.2f%%\n", i, right, (double)right / i * 100);

return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式