2014-03-30 3 views
-1

사용자가 프로그램에 숫자를 입력하고 프로그램의 많은 다른 부분 기능에서이 번호를 사용할 수 있도록해야합니다. 어떻게 할 수 있니? 여기 # C에서 입력 번호 정의 #

코드이다

#include <stdio.h> 
#include <math.h> 
#define W 8. 
#define H 4. 

double ellipse(double); 

typedef double (*DfD) (double); 

double simpsons_int (DfD, double, double, int); 

int main() 
{ 
    double len, w, h, volume; 
    printf("Please enter a length, width and height (in meters) of the an elliptical storage tank \n"); 
    scanf("%lf %lf %lf", &len, &w, &h); 

    double a = h/2.*-1., r; 
    for (double depth=10; depth<=400; depth=depth+10) 
    { 
     r=a+(depth/100); 
     volume = len*simpsons_int(ellipse, a, r, 10000); 
     printf("depth is %.1f, volume is %f\n", depth, volume); 
    } 
} 

double ellipse(double y) 
{ 
    double x; 
    double A=W/2.; 
    double B=H/2.; 
    x=2*sqrt((1-(y*y)/(B*B))*(A*A)); 

    return x; 
} 

double simpsons_int(DfD f, double y0, double y1, int n) 
{ 
    double y, sum, dy = (y1 - y0)/n; 
    sum = f(y1) + f(y0); 
    for(y = y0; y <= y1-dy; y += dy) 
     sum += 2.0 * f(y+dy) + 4.0 * f(y + dy/2); 
    return sum * dy/6.0; 
} 

하지만 #define 추천 4.

+0

이 질문에는 'C#'태그가 필요하지 않습니다. –

+2

정확히 전 처리기의 반대입니다. 변수를 사용해야합니다. – SLaks

+1

나는 그것을 얻지 않는다, 당신의 질문은 무엇인가? 변수 만 사용하십시오. 당신은 이미 그것들을 읽었습니다. –

답변

1

처리기 지시문은 컴파일 -에 알려져 있어야하지 사용자에 의해 입력 된 번호로 H와 W가 필요 시각. 그것들을 상수라고 생각하십시오 : 당신은 그것들을 설정할 수 있습니다, 그러나 당신이 프로그램을 실행하자마자 그들은 돌로 설정됩니다.

이렇게하려면 변수를 사용해야합니다. wh을 전역 변수로 정의 할 수도 있지만 더 좋은 방법은 매개 변수로 ellipse 함수에 전달하는 것입니다.

2

함수의 인수로 전달하거나 전역 변수로 선언 할 수 있습니다. 차라리 응용 프로그램에 따라 먼저 사용하고 싶습니다.

1) 매개 변수로 전달.

2) 그냥 W 및 주 전에 H() 선언 후

double ellipse(double y, double W, double H) 
{ 
    double x; 
    double A=W/2.; 
    double B=H/2.; 
    x=2*sqrt((1-(y*y)/(B*B))*(A*A)); 

    return x; 
} 

그리고 당신은 선언) (주 내에는 scanf의 W 및 H; 귀하의 기능이 있어야한다

double W,H; 
int main() 
{ 
    double len, w, h, volume; 
    printf("Please enter a length, width and height (in meters) of the an elliptical storage tank \n"); 
    scanf("%lf %lf %lf", &len, &w, &h); 
    scanf("%lf %lf",&W,&H); 

    double a = h/2.*-1., r; 
    for (double depth=10; depth<=400; depth=depth+10) 
    { 
     r=a+(depth/100); 
     volume = len*simpsons_int(ellipse, a, r, 10000); 
     printf("depth is %.1f, volume is %f\n", depth, volume); 
    } 

}