gpt4 book ai didi

c++ - 为什么对小数加括号后输出总是为零?无论输入什么

转载 作者:行者123 更新时间:2023-12-02 09:49:29 25 4
gpt4 key购买 nike

问题陈述:
Cookie食谱需要以下成分:

  • 1.5杯糖。
  • 1杯黄油。
  • 2.75杯面粉。

  • 食谱使用这些成分的量会产生48个 cookies 。编写一个程序,询问用户他或她想制作多少个 cookies ,然后显示指定数量的 cookies 所需的每种成分的杯子数量。
    #include<iostream>
    using namespace std;

    int main(void){
    double sugar, butter, flour;
    int cookies;

    cout << "Enter the number of cookies you wish to make: ";
    cin >> cookies;

    sugar = (double)cookies*(1/32);
    butter = (double)cookies*(1/48);
    flour = (double)cookies*(11/192);

    cout << "Sugar: " << sugar << endl;
    cout << "butter: " << butter << endl;
    cout << "flour: " << flour << endl;

    return 0;
    }

    最佳答案

    sugar = (double)cookies*(1/32);
    butter = (double)cookies*(1/48);
    flour = (double)cookies*(11/192);


    它们全部取值为0,因为您将int除

    在每个格中至少使用浮点数

    您也可以将前两种情况除以正确的数字,再乘以1是没有用的
    sugar = cookies/32.0;
    butter = cookies/48.0
    flour = cookies*(11.0/192);

    但是因为该语句说1.5杯糖可容纳48个cookie,所以使用 sugar = cookies*1.5/48.0;似乎更加连贯,简化数字没有用,因此编译器在编译时执行此操作,并且在两种情况下生成的代码完全相同。

    同样适用于2.75杯面粉,可容纳48个 cookies , flour = cookies*2.75/48;
    如果要在代码中的多个位置使用这些公式,则定义常量(例如
    const double sugar_per_cookie = 1.5/48;
    const double butter_per_cookie = 1.0/48;
    const double flour_per_cookie = 2.75/48;

    再次不要害怕执行成本,编译器会优化。如果愿意,也可以为它们使用 #define,但是在这种情况下,警告将公式放在()之间,以便与使用它们的任何公式兼容,并且不会由于运算符优先级而产生不良结果。

    我也鼓励您检查 >>是否成功,如果您没有输入有效的整数cookie,则未设置
    if (!(cin >> cookies)) {
    cerr << "invalid value, abort" << endl;
    return -1;
    }

    因此,例如:
    #include <iostream>

    int main(void){
    std::cout << "Enter the number of cookies you wish to make: ";

    int cookies;

    if (!(std::cin >> cookies) or (cookies < 0)) {
    std::cerr << "invalid number of cookies, abort" << std::endl;
    return -1;
    }

    double sugar = cookies*1.5/48.0;
    double butter = cookies/48.0;
    double flour = cookies*2.75/48;

    std::cout << "Sugar: " << sugar << std::endl;
    std::cout << "Butter: " << butter << std::endl;
    std::cout << "Flour: " << flour << std::endl;

    return 0;
    }

    编译与执行:
    pi@raspberrypi:~ $ g++ -Wall c.cc
    pi@raspberrypi:~ $ ./a.out
    Enter the number of cookies you wish to make: 48
    Sugar: 1.5
    butter: 1
    flour: 2.75
    pi@raspberrypi:~ $ ./a.out
    Enter the number of cookies you wish to make: 0
    Sugar: 0
    butter: 0
    flour: 0
    pi@raspberrypi:~ $ ./a.out
    Enter the number of cookies you wish to make: 1
    Sugar: 0.03125
    butter: 0.0208333
    flour: 0.0572917
    pi@raspberrypi:~ $ ./a.out
    Enter the number of cookies you wish to make: 10
    Sugar: 0.3125
    butter: 0.208333
    flour: 0.572917
    pi@raspberrypi:~ $ ./a.out
    Enter the number of cookies you wish to make: -1
    invalid number of cookies, abort
    pi@raspberrypi:~ $ ./a.out
    Enter the number of cookies you wish to make: aze
    invalid number of cookies, abort
    pi@raspberrypi:~ $

    关于c++ - 为什么对小数加括号后输出总是为零?无论输入什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61422115/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com