这是在 C 中执行此操作的正确方法吗?
Is this a correct way of doing this in C?
我应该更改书面代码吗?编译器说一切正常 — 没有错误或警告。
- 您正在建造一个新家,您已经准确计算了地基需要多少水泥。
- 理想情况下,您想购买这个确切数量的水泥,但商店只出售 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;
}
老实说,我没有在您的代码中看到任何真正的错误,但在我看来,还有改进的余地:
每个包的价格和包的大小,都是常量,其实你可以在你的代码中写清楚,这样更易读,并且可以让编译器更好地优化你的代码。
您实际上也不必检查输入是否为 120 的倍数,因为它不是 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);
}
#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;
}
#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;
}
我应该更改书面代码吗?编译器说一切正常 — 没有错误或警告。
- 您正在建造一个新家,您已经准确计算了地基需要多少水泥。
- 理想情况下,您想购买这个确切数量的水泥,但商店只出售 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;
}
老实说,我没有在您的代码中看到任何真正的错误,但在我看来,还有改进的余地:
每个包的价格和包的大小,都是常量,其实你可以在你的代码中写清楚,这样更易读,并且可以让编译器更好地优化你的代码。
您实际上也不必检查输入是否为 120 的倍数,因为它不是 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);
}
#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;
}
#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;
}