0

我应该更改书面代码中的某些内容吗?编译器说一切都是正确的——没有错误或警告。

  • 您正在建造一个新家,并且您已经准确计算了地基所需的水泥量。
  • 理想情况下,您想购买确切数量的水泥,但商店只出售 120 磅袋装的水泥。
  • 这些袋子每个售价 45 美元。

请编写一个 C 程序,计算您为建造地基而必须购买的水泥成本。

  • 您的程序应首先读取一个十进制数字,该数字表示新家地基所需的水泥量(以磅为单位)。
  • 然后,您的程序应该显示您必须购买的水泥袋的总成本,以便有足够的水泥来建造您的地基。
  • 为了使您的程序更简单,您可以保证所需的水泥量永远不会是 120 的倍数。

到目前为止我的代码:

#include <stdio.h>
#include <math.h>
int main(void) {
    int price=45, totalPrice, OneBag=120;
    float needed;
    do
    {
        printf("Enter the amount of cement you need for your foundation that is not dividable by 120: ");
        scanf("%f", &needed);
    } while (fmodf(needed, OneBag)==0);
    
    totalPrice = ((int)needed/OneBag+1)*(price);
    printf("Total cost of cement you will need for your foundation is %d", totalPrice);
    

    return 0;
}
4

2 回答 2

1

老实说,我在您的代码中看不到任何真正的错误,但在我看来,还有改进的余地:

每袋的价格和袋子的大小都是常量,您实际上可以在代码中明确说明,这更具可读性,并且允许编译器更好地优化您的代码。

您实际上也不必检查输入是否是 120 的倍数,因为它不是。

还有一个叫做ceil函数的东西(或者ceilf如果使用浮点数),它实际上接受任何数字并向上增加到最接近的整数。这对这项任务非常有用。

最后一件事仅仅因为编译器说没关系,并不意味着它实际上是。

代码:

#include <stdio.h>
#include <math.h>

const float price_per_bag = 45;
const float bag_size = 120;

int main(void) {
    float needed;
    printf("Enter the amount of cement needed:\n");
    scanf("%f", &needed);

    float price = ceilf(needed / bag_size) * price_per_bag;
    printf("total price: %i\n", (int)price);
}
于 2022-01-06T16:53:58.370 回答
0
#include <stdio.h>

int main(void){
      
   float totalC;
   int count=0, totalPrice, i ;
      
   scanf("%f", &totalC);

   for (i=0; i<totalC; i+=120)
        {
           count = count+1;   
         }
     

         totalPrice = count *45;
         printf("%d", totalPrice);
         return 0;

      }
于 2022-01-20T22:16:08.013 回答