我试图根据百分比来计算价格下降。如果我手工写出来,它就像下面的等式,简单的x = x - (10%的x),或new_price = old_price - (old_price的10%)。因此,100将成为90,90将成为81,依此类推。我认为。我不确定我是不是在脑力训练或是什么,但是当我跑步时,它只是永远地循环而且#34; 90"作为输出。
#include <stdio.h>
#include <math.h>
int pricedecrease(int x)
{
x = x - (x / 10.0);
return x;
}
int main(void)
{
int price = 100;
while(price > 3)
{
printf("%d\n", pricedecrease(price));
}
}
答案 0 :(得分:2)
函数参数在C中以值传递,因此当函数返回给调用者时,函数体不会影响参数的值。
在您的情况下,您将调整后的值作为返回值返回,因此您可以将返回值分配给变量。
while (price > 3)
{
price = pricedecrease(price);
printf("%d\n", price);
}
答案 1 :(得分:2)
您需要在循环中更新价格变量。调用pricedecrease
函数不会修改price
变量。
#include <stdio.h>
#include <math.h>
int pricedecrease(int x)
{
x = x - (x / 10.0);
return x;
}
int main(void)
{
int price = 100;
while(price > 3)
{
printf("%d\n", price);
price = pricedecrease(price); // <- need to update price variable
}
}
答案 2 :(得分:1)
这是一个无限循环,因为price
未被修改。
函数参数作为副本传递到堆栈中。为了修改原文,您需要使用指针并传递price
的地址。
int pricedecrease(int *x)
{
*x -= (*x / 10.0);
return *x;
}
int main(void)
{
int price = 100;
while(price > 3)
{
printf("%d\n", pricedecrease(&price));
}
}