라떼는말이야

[C 기초] 학점 계산 프로그램 본문

알고리즘/CS50

[C 기초] 학점 계산 프로그램

MangBaam 2021. 3. 4. 10:00
반응형

www.notion.so/1-6ea63a079d3f49d9ac34fd3c77d12b5b

 

✔︎ 문제 1. 학점을 계산해보자!

1. 미션 제목    학점을 계산해보자!

www.notion.so

1. 미션 제목    학점을 계산해보자!

 

2. 지시문

  • 학생의 점수로 학점을 구하는 프로그램을 작성하시오.
  • 키보드에서 입력받은 성적 (0 ~ 100 점) 의 유효성을 체크
  • 학점은 배열을 이용하여 초기화 (아래 “학점 테이블” 참조)
  • 학점은 “학점” 과 같이 계산하는데, 반드시 “학점 테이블”을 사용하여 계산하고 학점도 “학점 테이블”의 내용을 출력
  • 성적을 입력하여 계속 학점을 구하며 특별한 문자인 “-1” 을 입력하면 프로그램을 종료

Table 1 - 학점

Table 2 - 학점 테이블

유효성 체크: 0 <= 성적 <= 100

  • “120” 입력 -> 성적을 올바르게 입력하세요! (0 ~ 100)

Figure 1 출력 결과

3. 핵심 개념#배열 #표준입력 #표준출력 #분기문 #반복문 #break #무한반복문

4. 부가 설명- 표준입출력:

나의 풀이

#include<stdio.h>
#include<string.h>
#include<stdlib.h> // 동적메모리할당(malloc)을 위한 라이브러리

const int NUMBER_OF_GRADES = 9;
const char* GRADES[NUMBER_OF_GRADES] = {"A+", "A", "B+", "B", "C+", "C", "D+", "D", "F"};
const int SCORES[NUMBER_OF_GRADES] = {95, 90, 85, 80, 75, 70, 65, 60, 0};

void showTable(void);
char* getGrade(int score);

int main(void) {
    // 초기 안내 문구 출력
    printf("*** 학점 프로그램 ***\n");
    printf("종료를 원하면 \"-1\" 를 입력\n\n");

    // 학점 테이블 출력
    showTable();

    int score = 0;
    while (1) {
        printf("성적을 입력하세요 (0 ~ 100) : ");
        scanf("%d", &score);
        // 입력 된 점수가 -1 이면 프로그램 종료
        if(score == -1) {
            printf("학점 프로그램을 종료합니다.\n");
            return 0;
        }
        // 입력 된 점수가 0 ~ 100 사이에 없으면 경고 후 다시 입력 받음
        if(score > 100 || score < 0) {
            //printf("** %d 성적을 올바를게 입력하세요. 범위는 0 ~ 100 입니다.\n", score);
            printf("\"%d\"입력 -> 성적을 올바르게 입력하세요! (0 ~ 100)\n\n", score);
            continue;
        }
        // 점수가 정상적으로 입력되었다면 학점 출력
        char* grade = getGrade(score);
        printf(">> 학점은 %s 입니다.\n\n", grade);
    }
}

void showTable(void) {
    printf("[학점 테이블]\n");
    printf("┌───────────────────────────────────────────────────────────────────────────────┐\n");
    printf("│점수\t");
    for(int i = 0 ; i < NUMBER_OF_GRADES; i++) {
        printf("│%d\t", SCORES[i]);
    }
    printf("│\n├───────────────────────────────────────────────────────────────────────────────┤\n");
    printf("│학점\t");
    for(int i = 0 ; i < NUMBER_OF_GRADES; i++) {
        printf("│%s\t", GRADES[i]);
    }
    printf("│\n");
    printf("└───────────────────────────────────────────────────────────────────────────────┘\n\n");
}

char* getGrade(int score) {
    char* grade="";

    for(int i = 0 ; i < NUMBER_OF_GRADES; i++) {
        if(score >= SCORES[i]) {
            grade = malloc(sizeof(char)*strlen(GRADES[i]));
            strcpy(grade, GRADES[i]);
            break;
        }
    }
    return grade;
}

구현한 기능

  • 학점 테이블을 출력하는 함수를 따로 작성해 재사용 가능하도록 설계
    • 테이블 형태로 출력하여 가독성이 좋게 함
  • 계속하여 성적 조회 가능
    • 성적에 -1 입력 시 프로그램 종료
  • 성적을 잘못 입력한 경우 입력된 값을 표시하고 사용자에게 알림

출력 결과

반응형
Comments