我对这整个编程事物都很陌生,所以请耐心等待。 我想制作一个可以计算二次和x轴之间区域的程序。 现在我的代码只针对函数而设计,其中a是postive而c是负数。
#include <stdio.h>
int main()
{
float a;
float b;
float c;
float x; /* this is the zero that is to the right*/
float y; /* this is the zero that is to the left*/
float z;
{
printf("Consider the function ax^2 + bx + c\n");
printf("Enter the a value: \n");
scanf("%f",&a);
printf("Enter the b value: \n");
scanf("%f",&b);
printf("Enter the c value: \n");
scanf("%f", &c);
x = (( -b + sqrt(b*b - 4*a*c)) / (2*a));
y = (( -b - sqrt(b*b - 4*a*c)) / (2*a));
do {
z=(((y+0.01)-(y))*((a*(y*y))+(b*y)+(c)));
y+0.01;} while (x>y);
if (y>=x) {
printf("The area is %f", z);
}
问题是该程序永远不会停止运行。我想做的是制作小方块并测量它们的面积(重新构建LRAM和RRAM)。那么我正在做的是(零+一点点)次y值(a *(y * y))+(b * y)+(c)))`
任何提示?
答案 0 :(得分:2)
在
do {
z=(((y+0.01)-(y))*((a*(y*y))+(b*y)+(c)));
y+0.01;
} while (x>y);
您应该将y+0.01
更改为y += 0.01
,如果您使用y+0.01
,y
在循环期间永远不会更改。
答案 1 :(得分:0)
在z
循环中增加y
和do while
。
z = 0; //initialize z to remove any garbage values.
do {
// here z is NOT getting assigned, but incremented each time this loop runs.
// NOTE: A += C; is short for A = A + C;
z += (((y+0.01)-(y))*((a*(y*y))+(b*y)+(c)));
y += 0.01;
}
while (x>y);
答案 2 :(得分:-1)
我知道它并没有立即帮助,但对于像这样的东西,Numerical Recipes是最终的书。旧的C版本(当然,在C ++中仍然可以很好地工作)是免费提供的。他们也有你可以购买的C ++版本。
它包含了本书中每个算法的代码,并逐步解释了您正在做什么以及为什么。