오늘은 두번째 실습시간입니다. 이번에는 점수를 입력 받으면 그 점수에 따라 학점을 부여하는 프로그램을 실습해보도록 하겠습니다. 실습 문제에 대한 의미를 잘 읽고 풀어보세요.
점수에 대한 학점을 부여하는데 실제는 A+,A,B+,B,C+,C,D+,D,F 학점으로 일일히 나열해야 하는데 너무 세부적으로 쪼개면 불필요한 코딩이 늘어나기 때문에 간단히 5개 학점으로 나눠서 프로그램을 만듭니다.
점수를 입력 받는다면 뭘 사용 할까요. 지난 시간과 마찬가지로 scanf()함수를 이용하여 정수를 입력 받으면 됩니다.
int inputVal;
scanf("%d",&inputVal);
입력 받은 값을 inputVal변수에 저장하고 이 inputVal 값을 가지고 학점을 부여 해야 합니다. 어떻게 할까요. if문으로 한번 학점을 부여 해보도록 하죠.
printf("점수를 입력하시오? ");
scanf("%d",&inputVal);
if(inputVal>=90) printf("A \n");
else if(inputVal>=80 && inputVal<90) printf("B \n");
else if(inputVal>=70 && inputVal<80) printf("C \n");
else if(inputVal>=60 && inputVal<70) printf("D \n");
else printf("F \n");
&&(AND) 연산자를 이용하여 학점의 범위를 지정 할 수 있습니다.
조건식1 && 조건식2
이와 같은 구조입니다. 조건식1이 참이고 조건식2가 참일 때 전체가 참이 됩니다. 둘 중 하나라도 거짓이면 전체는 거짓이 됩니다.
1(참), 0(거짓)
0 0 => 0
0 1 => 0
1 0 => 0
1 1 => 1
이렇게 참 or 거짓이 결정됩니다.
90~100 사이가 A학점이라면 90보다는 크거나 같고 100점보다 작거나 같을 때 참이 되는 식을 만들면 됩니다.
if(inputVal>=90 && inputVal<=100)
이렇게 말이죠. 어짜피 90이상은 최고 학점이 A학점이니깐 아래와 같이 표현이 가능합니다
if(inputVal>=90)
그럼 if문을 전체 학점에 적용한 코딩은 아래와 같이 되겠죠.
if(inputVal>=90) printf("A \n"); //90이상
else if(inputVal>=80 && inputVal<90) printf("B \n"); //80이상 90미만
else if(inputVal>=70 && inputVal<80) printf("C \n"); //70이상 80미만
else if(inputVal>=60 && inputVal<70) printf("D \n"); //60이상 70미만
else printf("F \n"); //60미만
이번에는 if문으로 표현 한 것을 다른 형태로 구현 해보도록 하죠. switch()문을 이용하여 범위 선택을 할 수 있습니다.
printf("점수를 입력하시오? ");
scanf("%d",&inputVal);
switch(inputVal){
case 90 ... 100 : printf("A \n"); break;
case 80 ... 89 : printf("B \n"); break;
case 70 ... 79 : printf("C \n"); break;
case 60 ... 69 : printf("D \n"); break;
default : printf("F \n"); break;
}
이 표현은 점세개로 범위를 나타낼 수 있습니다. 제 경우는 switch()문이 보기는 편하고 가독성이 좋지만 if문을 선호합니다. 이건 프로그래머의 스타일에 따라 다르니깐 선택은 코딩하는 사람의 몫입니다.
코딩은 두가지 형태인 switch문과 if문의 형태로 코딩하여 실행 결과를 확인하도록 코딩했습니다. 참고로 F학점의 점수가 입력되면 while(1)문을 빠져나오고 D학점 이상의 점수가 입력되면 계속 점수를 입력 받도록 설정했습니다. 점수별 학점이 정상적으로 출력이 되는지 확인하기 위한 코딩이니깐 감안하시고 보세요.
[전체소스]
#include
#include
int main(int argc, char *argv[]) {
int inputVal;
//switch문
while(1){
printf("switch문 점수를 입력하시오? ");
scanf("%d",&inputVal);
switch(inputVal){
case 90 ... 100 : printf("A \n"); break;
case 80 ... 89 : printf("B \n"); break;
case 70 ... 79 : printf("C \n"); break;
case 60 ... 69 : printf("D \n"); break;
default : printf("F \n"); break;
}
if(inputVal<60) break;
}
//if문
while(1){
printf("if문 점수를 입력하시오? ");
scanf("%d",&inputVal);
if(inputVal>=90) printf("A \n");
else if(inputVal>=80 && inputVal<90) printf("B \n");
else if(inputVal>=70 && inputVal<80) printf("C \n");
else if(inputVal>=60 && inputVal<70) printf("D \n");
else printf("F \n");
if(inputVal<60) break;
}
system("pause");
return 0;
}
while(1)문으로 무한 루프지만 break문으로 빠져 나올 수 있는 조건을 세팅해 놓았습니다. switch()문의 break명령문은 switch()문을 빠져나오는 명령어이고 while(1)문을 빠져오는 break명령어는 if문에 있는 break 명령어입니다.
while(1){
if(inputVal<60) break;
}
이렇게 표현하여 while(1)문을 탈출 할 수 있는 조건이 세팅 되어 있습니다.
[결과]
정상적으로 결과가 잘 나왔네요. 다양한 점수를 입력하셔서 각 학점들이 나오는지 보세요.
두가지 형태로 swtich문과 if문으로 입력 받은 점수를 학점으로 출력을 해보았습니다. 참고로 if문을 if-else if문으로 표현했지만 if문만으로 개별적으로 학점 별 점수를 체크하셔서 학점을 부여해도 됩니다.
if(학점범위) A학점;
if(학점범위) B학점;
if(학점범위) C학점;
if(학점범위) D학점;
else F학점;
이렇게 말이죠. 표현은 여러분의 몫이고 혹시 이방법 외에 다른 방법이 있는지 상상해보세요. 입문자분들은 하나의 방식으로만 코딩하고 넘어가시면 됩니다. 과거 제경우 하나의 코딩을 완성하면 그 완성된 코딩을 기반으로 다른 코딩 방법이 없는지 끊임없이 상상하면서 코딩했습니다. 여러분들도 하나의 코딩만 하지 말고 상상코딩을 하시기 바랍니다.