首页 > 解决方案 > 如何在模拟 24 小时之前或模拟 24 小时内停止执行的模拟程序

问题描述

有一个 500 加仑的水箱,用于在 24 小时内将鱼放入鱼苗。水箱漏水,每小时损失剩余水量的 10%。如何修复我的代码以使其在 24 小时后或油箱容量达到 100 加仑后停止执行。出于某种原因,我似乎无法将头绕在 for 循环上。

int main()
{
    double add, gal = 500, vol, newVol, hour;

    printf("Please enter additional water added per hour: ");
    scanf("%f", &add);

    for (int hour = 0; hour <= 24; hour++)
    {
        vol = gal * 0.90 + add;
    }
    printf("The volume is %f gallons after %d hours. \n", &vol, &hour);

}

标签: cfor-loopsimulation

解决方案


您的程序中存在多个问题:

  • 你应该包括<stdio.h>
  • 类型的scanf()转换规范double%lf,不是%f
  • 您应该测试 的返回值scanf()以避免无效输入的未定义行为。
  • 循环迭代 25 次而不是 24 次。
  • 更新卷的表达式vol = gal * 0.90 + add;不正确:您应该更新gal或仅使用vol. 此外,如果在每小时开始时加水,则应该加水vol = (gal + add) * 0.90;,但水箱不能容纳超过 500 加仑。如果在每小时结束时加水,您应该在加水之前测试它是否达到 100 加仑。
  • 你不测试100加仑的极限
  • 格式不正确,printf参数也不正确:它应该是printf("The volume is %f gallons after %f hours. \n", vol, hour);或更好printf("The volume is %f gallons after %d hours. \n", vol, hour);hour应该定义为int.
  • main应该返回0

这是一个更正的版本:

#include <stdio.h>

int main() {
    double add, gal = 500, vol;
    int hour;

    printf("Please enter additional water added per hour: ");
    if (scanf("%lf", &add) != 1) {
        printf("invalid input\n");
        return 1;
    }
    for (vol = gal, hour = 1; hour <= 24; hour++) {
        vol = vol * 0.90;
        if (vol <= 100)
            break;
        /* water is added at the end of each hour */
        vol += add;
        /* the tank cannot hold more than 500 gallons */
        if (vol > gal)
            vol = gal;
    }
    printf("The volume is %f gallons after %d hours.\n", vol, hour);
    return 0;
}

您可能想要计算体积下降到 100 加仑的确切时间,但它更复杂。


推荐阅读