본문 바로가기
개발/C,C++,C#

[문제풀이] 반평균 구하기

by 비트-바이트 2024. 4. 25.
반응형

1.다음은 조건을 보고 만족하는 프로그램을 작성하라. A반의 성적은 다음과 같다.

  영희의 국어,영어,수학 점수는 98, 87, 78점이고,

  철수의 국어,영어,수학 점수는 78, 85, 67점이고,

  재석의 국어,영어,수학 점수는 68, 95, 87점이고,

  영자의 국어,영어,수학 점수는 95, 80, 67점이다.

 

1) 각 학생의 평균을 구하라.

2) 과목별 평균을 구하라.

3) 반 평균의 구하라(배열 및 함수를 이용할 것).

4) 점수에 따른 등급을 계산하고 출력하라(배열 및 함수를 이용할 것)

 

(A:100-90,B:80-89,C:70-79,D:60-69).


#include <iostream>
#include <array>

// 학생 성적을 나타내는 구조체
struct Student {
    std::string name;
    std::array<int, 3> scores; // 국어, 영어, 수학 점수

    // 학생의 평균 점수를 계산하는 함수
    double average() const {
        int sum = 0;
        for (int score : scores) {
            sum += score;
        }
        return sum / (double)scores.size();
    }

    // 점수에 따른 등급을 계산하는 함수
    static char grade(int score) {
        if (score >= 90) return 'A';
        else if (score >= 80) return 'B';
        else if (score >= 70) return 'C';
        else if (score >= 60) return 'D';
        else return 'F';
    }
};

int main() {
    // 학생 데이터 초기화
    std::array<Student, 4> students = { {
        {"영희", {98, 87, 78}},
        {"철수", {78, 85, 67}},
        {"재석", {68, 95, 87}},
        {"영자", {95, 80, 67}}
    } };

    // 과목별 점수를 저장할 배열
    std::array<int, 3> subjectSums = { 0, 0, 0 };
    int totalSum = 0;

    // 각 학생의 평균 점수와 등급을 출력하고, 과목별 점수를 누적함
    for (const Student& student : students) {
        double avg = student.average();
        totalSum += avg; // 반 평균을 위해 누적
        std::cout << student.name << "의 평균: " << avg << " 등급: " << Student::grade(avg) << std::endl;
        for (size_t i = 0; i < student.scores.size(); ++i) {
            subjectSums[i] += student.scores[i];
        }
    }

    // 과목별 평균 점수를 출력
    std::cout << "국어 평균: " << subjectSums[0] / (double)students.size() << std::endl;
    std::cout << "영어 평균: " << subjectSums[1] / (double)students.size() << std::endl;
    std::cout << "수학 평균: " << subjectSums[2] / (double)students.size() << std::endl;

    // 반 평균 점수를 출력
    std::cout << "반 평균: " << totalSum / (double)students.size() << std::endl;

    return 0;
}

 

반응형