1

私はこのプログラミング全体に慣れていないので、我慢してください。二次軸と x 軸の間の面積を計算できるプログラムを作成したいと考えています。現在、私のコードは、a が正で 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))) を掛けたものです。

任意のヒント?

4

3 に答える 3

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.01yループ中に変更しないでください。

于 2011-03-26T09:13:01.813 に答える
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);  
于 2011-03-26T09:18:42.910 に答える
-1

すぐには役に立たないことは理解していますが、このようなものについては、Numerical Recipes が究極の本です。古い C バージョン (もちろん、今でも C++ でうまく動作します) は無料で入手できます。また、購入できる C++ バージョンもあります。

この本にはすべてのアルゴリズムのコードがあり、何をしているのか、その理由を順を追って説明しています。

ホームページへのリンク

C バージョンへのリンク

于 2011-03-26T09:31:02.653 に答える