함수선언을 main()의 안에 하면 안 되는 건가요?
조회수 1777회
함수의 변수가 1개일때는 큰 문제가 없었습니다. 그런데 변수를 많게 해서 선언도 많이 하니 문제가 생겼습니다.
이 프로그램은 전체에 avg(평균을 저장할 곳), std(표준편차를 저장할 곳)이 적용되면서 10자리 숫자의 평균과 표준편차를 구할 수 있습니다. 그런데...
#include <stdio.h>
#include <math.h>
#define NUM 10
float avg, std;
void read_array(float n[], int size);
float average(float n[], int size);
float std_dev(float n[], int size, float average);
void print(float avg, float std);
int main()
{
float a[NUM];
read_array(a, NUM);
average(a, NUM);
std_dev(a, NUM, avg);
print(avg, std);
return 0;
}
void read_array(float n[], int size)
{
int i;
printf("%d개의 숫자를 차례로 입력하세요.\n", size);
for (i = 0; i < size; ++i)
{
scanf_s("%f", &(n[i]));
}
}
float average(float n[], int size)
{
float sum = 0;
int i;
for (i = 0; i < size; ++i)
{
sum += n[i];
}
avg = sum / size;
return avg;
}
float std_dev(float n[], int size, float average)
{
float sum = 0;
int i;
for (i = 0; i < size; ++i)
{
sum += (n[i] - average)*(n[i] - average);
}
std = sqrt(sum / size);
return std;
}
void print(float avg, float std)
{
printf("평균 = %.2f\n", avg);
printf("표준편차 = %.2f\n", std);
}
제가 의도하려고 했던건 main 함수 안에 평균값과 표준편차가 남아서 계산이 되도록 한거였는데 ...ㅠㅠ
이렇게요("float avg, std;"자리만 바꿨습니다.)
#include <stdio.h>
#include <math.h>
#define NUM 10
void read_array(float n[], int size);
float average(float n[], int size);
float std_dev(float n[], int size, float average);
void print(float avg, float std);
int main()
{
float a[NUM];
float avg, std;
read_array(a, NUM);
average(a, NUM);
std_dev(a, NUM, avg);
print(avg, std);
return 0;
}
void read_array(float n[], int size)
{
int i;
printf("%d개의 숫자를 차례로 입력하세요.\n", size);
for (i = 0; i < size; ++i)
{
scanf_s("%f", &(n[i]));
}
}
float average(float n[], int size)
{
float sum = 0;
int i;
for (i = 0; i < size; ++i)
{
sum += n[i];
}
avg = sum / size;
return avg;
}
float std_dev(float n[], int size, float average)
{
float sum = 0;
int i;
for (i = 0; i < size; ++i)
{
sum += (n[i] - average)*(n[i] - average);
}
std = sqrt(sum / size);
return std;
}
void print(float avg, float std)
{
printf("평균 = %.2f\n", avg);
printf("표준편차 = %.2f\n", std);
}
그런데 이렇게 작성하여 실행하면 avg와 std가 선언되지 않았다고 뜹니다. ㅠㅠ 메인함수 안에서 선언해 놓으면 된거 아니었나요? 어디를 손봐야 하는지... 아니면 처음것 밖에 방법이 없는지 궁금합니다.
1 답변
-
전역변수, 지역변수에 대해 학습을 해보시기 바랍니다.
아래 함수에서 avg, std 라는 변수는 선언이 안된겁니다. 명시적으로 지역변수를 선언해야 합니다.
float average(float n[], int size) { float sum = 0; int i; for (i = 0; i < size; ++i) { sum += n[i]; } //avg = sum / size; float avg = sum / size; // ! 수정 return avg; } float std_dev(float n[], int size, float average) { float sum = 0; int i; for (i = 0; i < size; ++i) { sum += (n[i] - average)*(n[i] - average); } //std = sqrt(sum / size); float std = sqrt(sum / size); //! 수정 return std; }
댓글 입력