C언어 기초: 배열 & 함수 예제

김영채 (Kevin)·2020년 4월 19일
0

C언어

목록 보기
19/23
post-thumbnail

이번에는 배열과 함수를 둘 다 사용해야 하는 문제다.

사용자로부터 정수(n)를 입력받으면, n명의 심사위원이 생긴다. 각 심사위원은 1~10까지의 실수로 점수를 한 명에게 줄 수 있으며, 최종 평균을 구할 때 최하점과 최고점을 제외해서 평균을 구하는 문제다.

우선 decimal로 점수를 줄 수 있다고 하였으니 배열을 실수 배열로 선언해줬다.

double d[];

그리고 최하점, 최고점, 평균을 구해줄 수 있는 함수를 만들어야겠다는 생각이 들었다. findHighest(), findLowest(), calcScore() 이런 식으로 말이다.

우선 손코딩부터 보자.

findLowest()함수에서는 min값을 구하는 형식으로 작성하면 돼서 간단했고, findHighest()도 마찬가지로 max구하는 형식으로 구현하면 돼서 간단했다.

calcScore()는 일반 평균을 구하는 것과는 조금 달랐다. n명의 심사위원일지라도 최하점과 최고점을 빼야하니, 결국 n-2 로 식을 만들어야하기 때문이다.

double newD[n-2];

이렇게 처음에 사용자로부터 입력받은 값에 -2 를 해주면 된다. 그럼 10을 입력받았으면 자연스럽게 배열은 8로 만들어질 것이다.

그렇게만 한다면 코드는 아래와 같이 만들어진다.

#include <stdio.h>

double findLowest(double d[], int n);
double findHighest(double d[], int n);
void calcScore(double d[], int n);
double getJudgeData(void);

int main(){
    
    int n; double d[100];
    scanf("%d", &n);
    
    for(int i=0; i<n; i++){
        d[i]=getJudgeData();
    }
    
    calcScore(d, n);
   
    return 0;
}

double getJudgeData(){
    
    double score;
    
    while(1){
        scanf("%lf", &score);
        if(score>=0 && score<=10){
            return score;
            break;
        }
        else{
            continue;
        }
    }
}


double findLowest(double d[], int n){
    
    double min=d[0];
    
    for(int i=1;i<n;i++){
        if(min>d[i]){
            min=d[i];
        }
    }
    return min;
}

double findHighest(double d[], int n){
    
    double max=d[0];
    
    for(int i=1;i<n;i++){
        if(max<d[i]){
            max=d[i];
        }
    }
    return max;
}

void calcScore(double d[], int n){
    
    double min=findLowest(d, n);
    double max=findHighest(d, n);
    double sum=0; double avg=0;
    
    for(int i=0;i<n;i++){
        if(d[i]==min || d[i]==max)
            continue;
        else
            sum+=d[i];
    }
    avg=sum/(n-2);
    
    printf("%.2lf", avg);
    
}



profile
맛있는 iOS 프로그래밍

0개의 댓글