본문 바로가기

기타/it

C언어 반복문, switch문, 학점 구하는 프로그램

반응형


문제 )

학생을 성적을 입력받아 학점을 출력하는 프로그램을 작성하시오 . 

(단 학점은 90점 이상이면 A ,80점 이상 90점 미만이면 B, 70점이상 80점 미만이면 C, 60점이상 70점 미만 이면 D 60점 미만이면 F이다.)


코드)

#include<stdio.h>


main()

{

int score;


printf("점수를 입력하세요 : ");

scanf("%d", &score);


switch (score / 10) {

case 10:

case 9: printf("A학점 입니다\n"); break;

case 8: printf("B학점 입니다\n"); break;

case 7: printf("C학점 입니다\n"); break;

case 6: printf("D학점 입니다\n"); break;

default: printf("F학점 입니다\n");

}

}


해석)

이 코드의 핵심은 switch (score / 10) 이다 

많은 사람들이 위 문제를 풀때 case 조건을 작성할때 혼란이 오는경우가 많은데 아주 잠깐만 생각을 해본다면 정말 간단한 문제이다 

문제 조건에서 90이상 은 A학점 이라는 부분을 살펴보자 A학점을 받을수 있는 성적을 나열해보면 

90,91,92.......100 점까지 그런데 이 10개를 전부 case를 걸어버리면 너무 비효율적이지 않은가??  자 그럼 이점수들의 공통점을 살펴보면 100점을 제외하고는 모두 90점대의 점수라는것 ! 90점대 90점대 !!! 뭔가 생각나지 않나요 ? 91점, 92점 은 다른숫자이지만 이점수들을 10으로 나누면 int형에 저장되는 값은 결국 9!!!!!!!!!!!!!!!!!! 유레카 !! 100점은 10점 그러면 100점을 제외하고는 80점대 70점대 모두 똑같은 알고리즘이라는 사실 80점대는 10으로 나누면 전부 8!

70점대는 7 !! 그외 60점 미만은 디폴트로 F학점을 걸어버리면 해결끝나는 생각보다 아주 간단한 문제입니다 ! 


코딩이 어려우신분들은 이런식으로 문제푸는 사고방식부터 훈련하시는것을 추천드립니다 ! 


결과 )

------------------------------------------------------------------------------------------------------------------------------------------------------------------------


점수를 입력하세요 : 5

F학점 입니다


C:\Users\ASUS\source\repos\ConsoleApplication11\Debug\ConsoleApplication11.exe(13480 프로세스)이(가) 0 코드로 인해 종료 되었습니다.

이 창을 닫으려면 아무 키나 누르세요.


------------------------------------------------------------------------------------------------------------------------------------------------------------------------


점수를 입력하세요 : 100

A학점 입니다


C:\Users\ASUS\source\repos\ConsoleApplication11\Debug\ConsoleApplication11.exe(1336 프로세스)이(가) 0 코드로 인해 종료되었습니다.

이 창을 닫으려면 아무 키나 누르세요.


------------------------------------------------------------------------------------------------------------------------------------------------------------------------


점수를 입력하세요 : 70

C학점 입니다


C:\Users\ASUS\source\repos\ConsoleApplication11\Debug\ConsoleApplication11.exe(6832 프로세스)이(가) 0 코드로 인해 종료되었습니다.

이 창을 닫으려면 아무 키나 누르세요.


------------------------------------------------------------------------------------------------------------------------------------------------------------------------




반응형