我如何围绕这个int

时间:2016-10-04 14:25:56

标签: c

有没有办法围绕systemGuess。在这种情况下,systemGuess的结果是5.5我希望它是6我该怎么做?

见下面的代码:

 int main(void){

    int systemGuess = 0;
    stystemGuess = (10 - 1)/2 + 1;
    printf(" %d ", stystemmGuess);
}

5 个答案:

答案 0 :(得分:2)

使用浮点除法和ceil

stystemGuess = ceil((10 - 1)/2.0) + 1;

如果您要向下舍入0.4,请改用round

答案 1 :(得分:1)

OP希望执行整数除法,并将结果四舍五入。

// If the quotient fraction > 0, return next larger number.
unsigned udiv_ceiling(unsigned n, unsigned d) {
  return (n + d - 1)/d;
}

// If the quotient fraction >= 0.5, return next larger number.
unsigned udiv_nearest_ties_up(unsigned n, unsigned d) {
  return (n + d/2)/d;
}

stystemGuess = udiv_ceiling(10 - 1, 2) + 1;
// or
stystemGuess = udiv_nearest_ties_up(10 - 1, 2) + 1;

处理负数和极端情况所需的其他代码,可防止n + d - 1溢出。

答案 2 :(得分:0)

您可以使用

systemGuess = (10 - 1)/2.0 + 1 + 0.5;

问题在于你进行整数计算。 所以例如9/2是4.如果你使用9 / 2.0你有浮点除法,它给你4.5。最后添加0.5会给你6.0而不是5.5,所以当它存储在systemGuess时,你会得到6而不是5。

答案 3 :(得分:0)

C truncates toward 0中的整数除法,所以如果你在0的另一边(即负数)进行数学计算,它将"向上舍入"。您可以通过从红利中减去一定金额并将该金额的一半加回到结果中来实现此目的:

int main(void)
{
    int systemGuess = 0;
    //systemGuess = (10 - 1)/2 + 1;
    systemGuess = (10 - 1 - 20)/2 + 1 + 10;
    printf(" %d ", systemGuess);
}

可能在您的真实计划中,有一种更优雅的方式来实现这一目标。

答案 4 :(得分:0)

你走了:

#include <stdio.h>
#include <stdlib.h>

int divide(int x, int y);

int main(void){

    int systemGuess = 0;

    int x = 10-1;
    int y = 2; 

    systemGuess = divide(x,y) + 1;

    printf(" %d ", systemGuess);

}

int divide(int x, int y) {
   int a = (x -1)/y +1;
   return a;
}