반응형

문제).

계산 할 과목 갯수를 입력받고, 입력 받은 과목의 갯수만큼의 과목 데이터를 입력받아서 과목별 평균과 전체 평균을 구하시오.

 

입력 방법.

과목 개수: 3
과목 1 시험 개수, 점수: 4 2 3 4 5  (첫 숫자 4는 뒤에 입력된 데이터 수, 뒤의 데이터 4개는 실제 데이터)
과목 2 시험 개수, 점수: 2 4 5      (첫 숫자 2는 뒤에 입력된 데이터 수, 뒤의 데이터 2개는 실제 데이터)
과목 3 시험 개수, 점수: 3 4 4 5    (첫 숫자 3는 뒤에 입력된 데이터 수, 뒤의 데이터 3개는 실제 데이터)

 

결과 출력 방법.

과목 1: 평균 3.50, 점수 2 3 4 5
과목 2: 평균 4.50 점수 2 4 5
과목 3: 평균 4.33 점수 4 4 5
총 평균: 4.11

 

 


실 데이터 입력

3
4 2 3 4 5
2 4 5
3 4 4 5

 

 

결과 출력

Cource 1: final 3.50, grade: 2 3 4 5
Cource 2: final 4.50, grade: 4 5
Cource 3: final 4.33, grade: 4 4 5
Overall final 4.11

 

 

답은 아래에... ↓

 


 

 

 

 

 

스스로 풀어보시고... ↓

 

 

 

 

 

 

 


 

 

 

 

 

 

아래 답과 비교해보세요. ↓

 

 

 

 

 

 

 

 


문제풀이

score.c
0.00MB

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define SEPERATOR    " \r\n\t"

typedef struct 
{
    int    count;
    int    score[100];
    int    sum;
    double average;
} course_t;

int main(int argc, char **argv)
{
    int  count;
    double total_average;
    int  idx, idx2;
    course_t course[100];
    char input[1024];
    char *ptr;
    
    memset(course, 0x00, sizeof(course));
    
    /* 몇 개의 과목의 값을 받을 것인지 입력 */
    printf("Input Course count: ");
    fgets(input, sizeof(1024), stdin); 
    count = atoi(input);
    
    for(idx = 0; idx <count; idx++) {
        /* 한 과목의 데이터를 입력받습니다. 한 과목의 데이터는 몇개일지 모르겠지만... */
        fgets(input, sizeof(input), stdin);
        
        /* 입력받은 데이터 중 첫번째 데이터 분리 (데이터 건수) */
        if((ptr = strtok(input, SEPERATOR)) == NULL) {
            printf("Input error\n");
            return 1;
        }
        course[idx].count = atoi(ptr);
        
        /* 데이터 건수만큼 데이터를 분리 */
        for(idx2 = 0; idx2 < course[idx].count; idx2++) {
            /* 점수를 1개씩 분리하는 부분 */
            if((ptr = strtok(NULL, SEPERATOR)) == NULL) {
                printf("Input Error : score 입력 갯수 미달\n");
                return 1;
            }
            course[idx].score[idx2] = atoi(ptr);
            course[idx].sum += course[idx].score[idx2];
        }
        course[idx].average = (double)course[idx].sum / course[idx].count;
    }
    
    
    /* Course별 결과 출력 */
    total_average = 0;
    for(idx = 0; idx < count; idx++) {
        printf("Cource %d: final %.2lf, grade:", idx + 1, course[idx].average);
        for(idx2 = 0; idx2 < course[idx].count; idx2++) {
            printf(" %d", course[idx].score[idx2]);
        }
        total_average += course[idx].average;
        printf("\n");
    }
    
    /* 전체 평균 계산 및 출력 */
    total_average /= count;
    printf("Overall final %.2lf\n", total_average);
    
    return 0;
}

 

반응형
블로그 이미지

자연&사람

행복한 개발자 programmer since 1995.

,