3주차 미션

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

1. 미션 제목

학점을 계산해보자!

2. 지시문

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

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

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

😎 제출 미션 답안

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
// 함수 프로토타입 선언
void init(void);
float getScore(void);
char* getGrade(float score);
// 상수 선언
const int exitCode = 999;
const int NUMBER_OF_GRADES = 9;
const int SCORES[/*NUMBER_OF_GRADES*/] = {95, 90, 85, 80, 75, 70, 65, 60, 0};
const char *GRADES[/*NUMBER_OF_GRADES*/] = {"A+", "A", "B+", "B", "C+", "C", "D+", "D", "F"};
int main(int argc, char *argv[]) {
init(); // 시작 메세지 출력
float score = 0;
char *grade = NULL;
while(1){
score = getScore(); // 점수 입력
if(score == exitCode) {
break;
}
grade = getGrade(score); // 점수 계산
printf("학점은 %s 입니다.\n", grade);
}
printf("학점 프로그램을 종료합니다.\n");
return 0;
}
void init(void){
printf("학점 프로그램\n");
printf("종료를 원하면 \"%d\" 를 입력\n", exitCode);
printf("[학점 테이블]\n");
printf("점수 : ");
for(int i = 0; i < NUMBER_OF_GRADES; i++ ){
printf("%-4d ",SCORES[i]);
}
printf("\n");
printf("학점 : ");
for(int i = 0; i < NUMBER_OF_GRADES; i++ ){
printf("%-4s ", GRADES[i]);
}
printf("\n");
}
float getScore(void){
float score = 0;
// TODO: 문자가 들어올 경우 에러 처리.
do{
printf("성적을 입력하세요 (0 ~ 100) : ");
scanf("%f", &score);
if(0 < score && score <=100)
return score;
else if(score == exitCode)
return score;
else {
printf("성적을 올바르게 입력하세요. 범위는 0 ~ 100 입니다.\n");
}
}while(1);
return -1;
}
char* getGrade(float score){
char *grade = NULL;
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;
}