用C语言设置指数增长函数X = a(1+b)^t
Setting up Exponential growth function X = a(1+b)^t in C language
我正在编写一个程序,使用指数增长函数 (X = a(1+b)^t) 跟踪一周内生成的矩形数量。一个人一天可以做60个长方形
a 代表初始人口,这是在一周的第一天已经制作矩形的人数。 b代表增长率,这是每天新做长方形的人数。 t代表时间间隔,对于这个程序来说是7天。
我很难开始解决这个问题,我需要一些指导。
我在考虑使用 math.h 和 pow,像这样(这段代码没有编译)
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
int main() {
int initial_POPULATION;
int time_INTERVAL;
double growth_RATE;
printf("How many people are making rectangles at the
biginning of the week?\n");
scanf("%d", &initial_POPULATION);
printf("How many people are making rectangles each day?
\n");
scanf("%1f", &growth_RATE);
//Exponential growth function X = a(1+b)^t
printf("%d rectangles will be made this week!\n",
initial_POPULATION(pow(1+growth_RATE),time_INTERVAL));
return 0;
}
您的代码未编译可能有 4 个原因。
如果您使用的是 unix,您是否尝试过像这样编译 -lm
?
gcc /path/to/file.c -lm -o /path/to/outputfile
此外,字符串文字中不能有换行符。这是不允许的:
char *MyString = "Hello
World";
最重要的是,您正在尝试调用 initial_POPULATION
(int),就好像它是一个函数一样:
initial_POPULATION(pow(1+growth_RATE),time_INTERVAL)
也许你的意思是:
initial_POPULATION*(pow(1+growth_RATE),time_INTERVAL)
最后,time_INTERVAL
未初始化,由@Z4-tier 提出。
有几个问题,但最明显的是您没有在任何地方设置 time_INTERVAL
的值。接下来是计算最终值的行:在 C 中,您需要使用 *
来表示乘法。 Parens 不像在常规数学中那样用作隐含的乘法运算符(无论如何,括号在最后一个 printf
中的使用方式是不正确的)。最后,确保通过使用 %lf
作为 scanf
中的格式说明符将 growth_RATE
读取为双精度数(使用 %f
将其读取为单精度 4 字节值,即使尽管它被声明为 double 也就是......好吧,两倍)。
试试这个:
scanf("%lf", &growth_RATE);
time_INTERVAL=7;
printf("%f rectangles will be made this week!\n", initial_POPULATION * pow(1+growth_RATE, time_INTERVAL));
此外,如@Asadefa 所述,从字符串文字中删除换行符。
我正在编写一个程序,使用指数增长函数 (X = a(1+b)^t) 跟踪一周内生成的矩形数量。一个人一天可以做60个长方形
a 代表初始人口,这是在一周的第一天已经制作矩形的人数。 b代表增长率,这是每天新做长方形的人数。 t代表时间间隔,对于这个程序来说是7天。
我很难开始解决这个问题,我需要一些指导。
我在考虑使用 math.h 和 pow,像这样(这段代码没有编译)
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
int main() {
int initial_POPULATION;
int time_INTERVAL;
double growth_RATE;
printf("How many people are making rectangles at the
biginning of the week?\n");
scanf("%d", &initial_POPULATION);
printf("How many people are making rectangles each day?
\n");
scanf("%1f", &growth_RATE);
//Exponential growth function X = a(1+b)^t
printf("%d rectangles will be made this week!\n",
initial_POPULATION(pow(1+growth_RATE),time_INTERVAL));
return 0;
}
您的代码未编译可能有 4 个原因。
如果您使用的是 unix,您是否尝试过像这样编译 -lm
?
gcc /path/to/file.c -lm -o /path/to/outputfile
此外,字符串文字中不能有换行符。这是不允许的:
char *MyString = "Hello
World";
最重要的是,您正在尝试调用 initial_POPULATION
(int),就好像它是一个函数一样:
initial_POPULATION(pow(1+growth_RATE),time_INTERVAL)
也许你的意思是:
initial_POPULATION*(pow(1+growth_RATE),time_INTERVAL)
最后,time_INTERVAL
未初始化,由@Z4-tier 提出。
有几个问题,但最明显的是您没有在任何地方设置 time_INTERVAL
的值。接下来是计算最终值的行:在 C 中,您需要使用 *
来表示乘法。 Parens 不像在常规数学中那样用作隐含的乘法运算符(无论如何,括号在最后一个 printf
中的使用方式是不正确的)。最后,确保通过使用 %lf
作为 scanf
中的格式说明符将 growth_RATE
读取为双精度数(使用 %f
将其读取为单精度 4 字节值,即使尽管它被声明为 double 也就是......好吧,两倍)。
试试这个:
scanf("%lf", &growth_RATE);
time_INTERVAL=7;
printf("%f rectangles will be made this week!\n", initial_POPULATION * pow(1+growth_RATE, time_INTERVAL));
此外,如@Asadefa 所述,从字符串文字中删除换行符。