편집 기록

편집 기록
  • 프로필 엽토군님의 편집
    날짜2019.02.20

    함수선언을 main()의 안에 하면 안 되는 건가요?


    함수의 변수가 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가 선언되지 않았다고 뜹니다. ㅠㅠ 메인함수 안에서 선언해 놓으면 된거 아니었나요? 어디를 손봐야 하는지... 아니면 처음것 밖에 방법이 없는지 궁금합니다.

  • 프로필 윤태완님의 편집
    날짜2019.02.12

    함수선언을 main()의 안에 하면 안 되는 건가요?


    함수의 변수가 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가 선언되지 않았다고 뜹니다. ㅠㅠ 메인함수 안에서 선언해 놓으면 된거 아니었나요? 어디를 손봐야 하는지... 아니면 처음것 밖에 방법이 없는지 궁금합니다.