weixin_43546457
飞衡、如日之升
采纳率75%
2018-12-04 12:49

请问 这段循环为什么是错的?? T n我已经设置了double型 T初始为0 , i int型初始为0

已采纳

case 1:
while(i<10)
{
int a,b,sum,u;
srand(time(0));
a=rand()%10;
b=rand()%10;
sum=a+b;
printf("%d+%d=\n",a,b);
scanf("%d\n",&u);
if(u==sum)
{
T=T+1;
}
else
i++;
n=T/i;
}

printf("准确率=%.2f",n);
break;

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

1条回答

  • crf_moonlight crf_moonlight 3年前

    这段程序的目的是求加法计算的准确率吧?? 语句嵌套逻辑就是错的

    case 1:
    
        while(i < 10)
        {
            int a, b, sum, u;
            srand(time(0));
            a = rand() % 10;
            b = rand() % 10;
            sum = a + b;
            printf("%d+%d=\n", a, b);
            scanf("%d\n", &u);
            if(u == sum)
            {
                T = T + 1;
            }
    
            i++;
        }
    
        n = T / 10;
        printf("准确率=%.2f",n);
        break;
    

    真的不是隔壁来的吗? C++一般真不用scanf

    用while循环要执行10次就是上面这样, 每次循环内执行一次i++

    或者直接用for循环, for(int i=0; i < 10; i ++) {}

    错误主要在这个地方

    if(u==sum)
    {
        T=T+1;
    }
    else
        i++;
    n=T/i;
    

    在一个while循环里面, 前面出了题目, 计算了参考答案, 然后读取了你的回答, 然后你的逻辑是: 如果回答对了, 那么正确数量+1, 如果回答错了, 那么答题数量+1, 然后修改一次当前正确率(因为这俩参数本身意义表达错了所以也错了),
    如果没理解错的或你预期的逻辑是: 如果回答对了, 正确数量+1, 答题数+1, 如果回答错了, 答题数+1, 那么正确做法看最上面那段代码, 因为无论如何答题数都要+1, 所以要直接放到while循环里

    点赞 1 评论 复制链接分享