2017-11-29 9 views
0

두 개의 파일로 구성된 프로젝트가 있지만 평균 변수를 인쇄하는 주 프로그램을 가져올 수 없습니다. 또한 다른 모든 기능을 인쇄하지 않습니다.평균 인쇄되지 않음

Main File: 
#include <stdio.h> 
#include <stdlib.h> 
#include <math.h> 
float average(void); 
float std_dev(float); 
float output(float); 

float array[10] = {4.8, 12.98, 82.1, 5.98, 19.75, 24.9, 75.7, 3.45, 10.0, 28.11}; 
extern float avg; 
int main() 
{ 
float s = 0.0; 
printf("The average value of the array is %.2f \n", avg); 
s = std_dev(avg); 
printf("The standard deviation of the array is %.2f \n", s); 
return 0; 
} 

static void output(float var) 
{ 
    printf("The value of the variable is %.2f \n", var); 
} 

두 번째 파일 :

#include <math.h> 
extern float array[]; 
float avg = 26.78; 

static float average() 
{ 
    int n; 
    float sum = 0.0, mean=0.0; 
    for(n=0; n<10; n++) 
     sum = sum + array[n]; 
    mean= sum/10; 
    output(mean); 
    return mean; 
} 
float std_dev() 
{ 
int n; 
float cumm_diff = 0.0; 
for(n=0; n<10; n++) 
    cumm_diff += (avg -array[n]) * (avg -array[n]); 
return sqrt(cumm_diff/10); 
} 
+1

'double' 대신에'float'을 쓰려고하는데,'sqrtf()'대신'sqrt()'를 사용하는 것이 궁금합니다. –

+0

가능한 경우 매개 변수없는 함수를 사용하지 않아야합니다. 배열에 길이를 더한 포인터와 시작 포인터 (예 :'float std_dev (size_t num_data, float data [])')를 전달하면 코드가 더 일반적 (재사용 가능)이됩니다. –

+2

프로그램을 컴파일 한 후 'output()'의 선언과 정의가 다르다),'avg' 변수가 잘 출력됩니다. – babon

답변

0

다음과 같은 제안 코드 :

  1. 깔끔하게
  2. 을 컴파일은
  3. 가 외부 파일
  4. 을의 기능을 수행하는 방법을 보여줍니다 원하는 기능을 수행
  5. 가 제대로
  6. 는 외부 코드를 제거하는 기능을 프로토 타입이 제대로 가독성의 용이성과
  7. 컴파일러가 배열에있는 항목을 결정 할 수있는 '마법'번호를 제거 이해하기위한 코드의 형식을
  8. double 리터럴
  9. 각 시스템 헤더 파일이 포함 된 이유는 float 리터럴을 사용합니다.
  10. 은 의미있는 매개 변수를 사용하고

    헤더 파일 : 변수 이름

  11. float

에 필요한 int count 매개 변수를 캐스팅 현재 제안 된 코드 컴파일시에 count의 값을 도출 main.h

#ifndef MAIN_H 
#define MAIN_H 
void output(float var); 
extern float avg; 
#endif // MAIN_H 

헤더 파일 : util.h

#ifndef UTIL_H 
#define UTIL_H 
float calc_std_dev(float *, int ); 
void calc_mean(float *, int); 
#endif // UTIL_H 

을 main.c 파일

#include <stdio.h> // printf() 
#include "main.h" 
#include "util.h" 


float array[] = 
{ 
    4.8f, 12.98f, 82.1f, 5.98f, 19.75f, 
    24.9f, 75.7f, 3.45f, 10.0f, 28.11f 
}; 



int main(void) 
{ 
    printf("The average value of the array is %.2f \n", avg); 

    float s = calc_std_dev(array, sizeof(array)/sizeof(float)); 
    printf("The standard deviation of the array is %.2f \n", s); 

    calc_mean(array, sizeof(array)/sizeof(float)); 
    return 0; 
} 


void output(float var) 
{ 
    printf("The mean value of the array is: %.2f \n", var); 
} 

util.c 파일

#include <math.h> //sqrtf() 
#include "main.h" 
#include "util.h" 


float avg = 26.78f; 


void calc_mean(float array[], int count) 
{ 
    int n; 
    float sum = 0.0f; 
    float mean = 0.0f; 

    for(n=0; n<count; n++) 
     sum = sum + array[n]; 

    mean= sum/ (float)count; 
    output(mean); 
} 


float calc_std_dev(float array[], int count ) 
{ 
    int n; 
    float cumm_diff = 0.0f; 

    for(n=0; n<count; n++) 
     cumm_diff += (avg -array[n]) * (avg -array[n]); 

    return sqrtf(cumm_diff/(float)count); 
} 
0

당신이 (당신의 평균이 계산되지 않는 이유입니다 기능 average(),하지만, 초기화 값 avg = 26.78을하지 호출하지 않습니다 0 - 아마도 그 점을 바 꾸었습니다)은 std_dev()에 의해 인쇄되고 사용됩니다.