简化舍入代码C.

时间:2015-02-04 02:19:40

标签: c rounding

我是编码的新手,并试图弄清楚如何将代码整理到下一个小时。我能够想到的唯一方法(即我所教过的唯一方法)就是每隔一小时做一次if语句。显然这根本没有效率,我知道可能会有更简单的事情。我得知一个涉及数学方程式的线索?

到目前为止,这是我编码的内容:

#include <stdio.h>

int main()
{
//listens for value of "cost"
    float cost;
    printf("How much does this go-kart location charge per hour?\n");
    scanf("%f", &cost);
//listens for value of "time"
    float time;
    printf("How many minutes can you spend there?\n");
    scanf("%f", &time);
// i have to get it to round time to values of 60 (round up to next hour)
//really overcomplicated lack of knowledge workaround.txt
    if (time < 60 && time > 0){
    time = 1;
   } else if(time > 61 && time < 70){
    time = 2;
   } else if(time > 71 && time < 80){
    time = 3;
   } else if(time > 81 && time < 90){
    time = 4;
   } else if(time > 91 && time < 100){
    time = 5;
   } else if(time > 101 && time < 160){
    time = 6;
   }
//etc etc

float total = cost * time;

printf("Your total will be $%f\n", total);

return 0;
}

4 个答案:

答案 0 :(得分:2)

对于非常规间隔,可以执行类似

的操作
int times[] = { 60; 70; 80; 90; 100; 160; INT_MAX }; // INT_MAX is to avoid segfault for bad input
int facts[] = {  1;  2;  3;  4;   5;   6;      -1 }; // -1 is value for bad input

int it = 0;
while(times[it] < time) ++it;

int result = facts[it];

请注意,您的代码在时间= 60,70等时没有有效结果...您应该检查想要的行为

答案 1 :(得分:1)

int hour = time/60;

if(60*hour < time)
  ++hour;

答案 2 :(得分:1)

这是相当基础的数学。

time / 60会向下舍去给你一小时。

因此(time / 60)+ 1回合。

如果最长为6小时,则只需检查:

hour = time/60 + 1;
if (hour > 6) hour = 6;

当然我假设时间是int。如果它是float,那么您可以使用floorceil向上或向下舍入:

hour = floor(time/60 +1);

hour = ceil(time/60);

答案 3 :(得分:1)

我认为这还不错

time = (time % 60) ? time / 60 + 1 : time / 60