所以我遇到了这个问题,我正在努力确定在卡丁车赛道上花费的时间;他们按小时收费,如果您在特定时间内花费30分钟或更长时间,则需要支付全额费用。注意:我不是在找人帮我回答我的问题,就像我认为没有人会这样做。
我现在发布我的源代码:
#include <math.h>
int main(){
float price;
int minutes;
int hours;
int total_cost;
printf("How much does this go-kart location charge per hour?\n");
scanf("%f", &price);
printf("How many minutes can you spend there?\n");
scanf("%d", &minutes);
hours= minutes/60;
total_cost=hours * price;
printf("Your total will be $%d" ,&total_cost);
return 0;
}
............................................... ...................................
我的问题是 。我不确定如何准确计算某人花费的时间,因此成本将是错误的。如果有人在这个地方花了1.5个小时,他们会被计费2个小时。如果有人花了30分钟。他们被计费满1小时。
我的一部分认为我要使用模数运算符来对其余部分进行舍入,但我不知道该怎么做。一小时内60分钟,我在这条赛道上花了30分钟,60%30会是花的时间。但这会返回30的剩余部分,花30分钟意味着我支付全价1小时。
我再也没有找到某人为我回答我的问题,这对我没有任何帮助,只是一些关于如何计算一个数字的一般性帮助,这个数字必须始终从一小时以后开始四舍五入。
感谢所有帮助过或者只是停下来的人。
更新;所以我在我的问题中添加了一个if else语句,它似乎正在起作用。我将在下面发布更新的源代码。
............................................... .................................
这看起来基于我已经完成的一些试运行,我将不得不编辑小数点后2位的输出(%。2f,我想,为了让它看起来更好,感谢你们所有人为你们帮助,我是C语言编程的新手,这让我很困惑,但是对我来说这很重要,不仅仅是为了某些年级,所以感谢你的帮助。
答案 0 :(得分:1)
如果可以使用浮点类型,最简单的方法就是舍入到最接近的整数:
int billable_hours(int minutes) {
return (int)round(minutes / 60.);
}
值得阅读有关舍入模式的内容,以确认这可以满足您的需求。
有一个技巧可以避免担心舍入模式,即添加偏差,以便简单地舍入 down 可以满足您的需求:
int billable_hours(int minutes) {
return (int)floor(0.5 + minutes / 60.);
}
但如果我们坚持使用整数(整数除法丢弃小数部分,有效地向零舍入),这种方法也是一样的:
int billable_hours(int minutes) {
return (minutes + 30) / 60;
}
因为任何小时&gt; = 30分钟,我们会在丢弃小数部分之前强行推迟到下一个小时。
注意:
60.
是双精度型,而60
则是整数。当您撰写int / double
时,会将其提升为double / double
,因此您不必进行投射。但是,第三个函数中的除法仍然是整数除法。答案 1 :(得分:0)
试试这个,
int extra;
hours= minutes/60;
extra = minutes % 60;
if(extra >= 30)
hours += 1;
total_cost=hours * price;
printf("Your total will be $%d" ,total_cost);
小时=分钟/ 60表示完整小时数,因为小时是整数变量。小时%60为您提供额外的会议记录。在printf语句中,在total_cost之前不需要&amp; 。
答案 2 :(得分:0)
您将四舍五入到最接近的整数。当您执行整数(modulo N)
算术时,将事物舍入到最接近的整数的一种方法是将N/2
添加到原始分钟数(这相当于算术int(x + 0.5)
问题{{} 1}}),所以当你用整数除以N时,你会得到四舍五入到最接近整数的结果。尝试(module 1)
,您将获得所需的结果。
所以,如果你有,例如37分钟,并想知道充电多少小时,只需加30分钟(得67)然后除以60(得到一小时)
但是,请注意,在不到30分钟的时间内,您将向购物车运动员收取0。
答案 3 :(得分:-1)
只需将分钟投射到浮点数,然后使用ceil()和floor()将数字四舍五入。一种非常常见的方法是定义一个名为ROUND的宏来实现这个目的:
#define ROUND(x) ((x - floor(x) >= 0.5) ? ceil(x) : floor(x))
hours = ROUND((float)minutes/(float)60);
这会将您的小时数变为可计费小时数,其余代码将按照编码工作。