{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# switch case" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`if`문의 경우 조건이 많아지면, 조건식이 많아지고, 들여쓰기를 따라가기도 힘들어진다. 그런 경우에는 `switch`문을 쓰는 것이 동작을 파악하기 더 좋다. \n", "\n", "# 문제\n", "다음 3개 코드의 차이를 분석해보자. 실행해보기 전에 다양한 조건에서 실행 결과를 예상해보자. \n", "\n", "무엇이 차이를 만드는지 정리해보자. " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "/* 1 번 코드 */\n", "#include \n", "int main() {\n", " int grade = 4;\n", " switch (grade) {\n", " case 4: printf(\"Excellent\");\n", " break;\n", " case 3: printf(\"Good\");\n", " break;\n", " case 2: printf(\"Average\");\n", " break;\n", " case 1: printf(\"Poor\");\n", " break;\n", " case 0: printf(\"Failing\");\n", " break;\n", " default: printf(\"Illegal grade\");\n", " break;\n", " }\n", " return 0;\n", "}\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "/* 2 번 코드 */\n", "#include \n", "int main() {\n", " int grade = 4;\n", " switch (grade) {\n", "\t case 4:\n", "\t case 3:\n", "\t case 2:\n", "\t case 1: printf(\"Passing\");\n", "\t break;\n", "\t case 0: printf(\"Failing\");\n", "\t break;\n", "\t default: printf(\"Illegal grade\");\n", "\t break;\n", " }\n", "\n", " return 0;\n", "}\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "/* 3 번 코드 */\n", "#include \n", "int main() {\n", " int grade = 4;\n", " switch (grade) {\n", " case 4: printf(\"Excellent\\n\");\n", " case 3: printf(\"Good\\n\");\n", " case 2: printf(\"Average\\n\");\n", " case 1: printf(\"Poor\\n\");\n", " case 0: printf(\"Failing\\n\");\n", " default: printf(\"Illegal grade\\n\");\n", " }\n", " return 0;\n", "}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 문제 \n", "아래의 코드에서 `printf`가 5번 사용 되었다. 사용횟수를 줄일 수 있는 방법이 있는지 생각해보자." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#include \n", "\n", "int main()\n", "{\n", " int kor, math, eng;\n", " float average;\n", " \n", " kor = 100;\n", " math = 100;\n", " eng = 100;\n", " \n", " switch((int)average/10){\n", " case 10:\n", " case 9:\n", " printf(\"average %.1f, grade A\\n\", average);\n", " break;\n", " case 8:\n", " printf(\"average %.1f, grade B\\n\", average);\n", " break;\n", " case 7:\n", " printf(\"average %.1f, grade C\\n\", average);\n", " break;\n", " case 6:\n", " printf(\"average %.1f, grade D\\n\", average);\n", " break;\n", " default:\n", " printf(\"average %.1f, grade F\\n\", average);\n", " }\n", " return 0;\n", "}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 문제\n", "5 부터 55까지 홀수합과 짝수합을 각각 구하여 출력하는 프로그램을 for문과 switch문을 이용하여 작성하여라" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#include \n", "\n", "int main()\n", "{\n", " // your code here\n", " return 0;\n", "}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 문제\n", "다음 switch 문장의 수행 결과는 어떻게 되는가?\n", "\n", "```\n", "c = 2\n", "switch(c) {\n", " case 1 : printf(\"A\");\n", " case 2 : printf(\"B\");\n", " case 3 : printf(\"C\");\n", " default : printf(\"T\");\n", "}\n", "```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 문제\n", "\n", "사용자가 mm/dd/yy 형식으로 날짜를 입력하면 다음과 같이 출력하는 프로그램을 작성해보자.\n", "> \tEnter date (mm/dd/yy): 7/19/14\n", "> \tDated this 19th day of July, 2014.\n", "\n", "주의, 날짜는 1의 자리의 값에 따라 표현이 달라진다. 1 일 때는 1st, 2 일 때는 2nd, 3 일 때는 3rd, 그 외는 th를 붙인다. \n", "\n", "기본 코드는 다음과 같다. " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "/* Prints a date in legal form */\n", " \n", "#include \n", " \n", "int main(void)\n", "{\n", " int month, day, year;\n", " \n", " printf(\"Enter date (mm/dd/yy): \");\n", " scanf(\"%d /%d /%d\", &month, &day, &year);\n", " \n", " printf(\"Dated this %d\", day);\n", " \n", " // your code here\n", " \n", " printf(\" day of \");\n", "\n", " // your code here\n", " printf(\", \\n\", year);\n", " return 0;\n", "}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 문제\n", "\n", "다음의 코드는 간단한 계산기 역할을 하는 코드이다. 하지만 아직 구현이 +에 대해서만 되어 있다. default 케이스에 나와 있는 연산자들에 대해서도 처리 할 수 있도록 만들어 보자. 단, 나눗셈은 0으로 나누는 경우가 없도록 방어코드를 작성해야 한다." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#include \n", "\n", "int main(void)\n", "{\n", " char op; float i, j; \n", " printf (\"Enter a simple expression (Eg. i / j)\\n\");\n", " scanf (\"%f %c %f\", &i, &op, &j);\n", " switch (op) {\n", " case '+': printf (\"%.2f\\n\", i + j ); break; \n", " default: \n", " printf (\"Available operators are +, -, *, /\");\n", " break; \n", " }\n", " \n", " return 0;\n", "}" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "C", "language": "c", "name": "c" }, "language_info": { "file_extension": ".c", "mimetype": "text/plain", "name": "c" } }, "nbformat": 4, "nbformat_minor": 2 }