Is this a correct way of doing this in C?

348 views Asked by At

Should I change something in written code? Compiler says that everything is right — no errors or warnings.

  • You are building a new home and you have calculated exactly how much cement you need for the foundation.
  • Ideally you'd like to purchase this exact amount of cement, but the store only sells cement in 120-pound bags.
  • Each of these bags costs 45 dollars.

Please write a C program that calculates the cost of the cement you will have to purchase to build your foundation.

  • Your program should first read a decimal number representing the amount of cement needed (in pounds) for the foundations of your new home.
  • Your program should then display the total cost of the cement bags you have to purchase to have enough cement to build your foundation.
  • To make your program simpler, you are guaranteed that the amount of cement needed will NEVER be a multiple of 120.

My code so far:

#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;
}
3

There are 3 answers

0
S3gfault On BEST ANSWER

To be honest, I don't see any real mistakes in your code, but in my opinion, there is room for improvement:

Price per bag and size of a bag, are both constants, which you can actually make clear in your code, this is more readable and it allows the compiler to optimize your code better.

You also don't actually have to check if the input is a multiple of 120, because it is a given that it is not.

There is also something called the ceil function (or ceilf if working with floats), which actually takes any number and increases upward to the nearest integer. Which is pretty useful for this assignment.

One last thing just because the compiler says it's all right, doesn't mean it actually is.

code:

#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);
}
1
Md. Sahil On
#include<stdio.h>

int main(void){
   double reqCement;
   int bags;
   int amount;
   printf("Type amount of cement:");
   scanf("%lf",&reqCement);
   bags = (reqCement/120)+1;
   amount = bags*45;
   printf("Amount = %d", amount);
   return 0;
}
1
Yudino On
#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;

      }