1 / 32

제 13 강

제 13 강. 조건부 수행문. 학습 내용. 조건부 수행문의 작성법 if 문 if-else 문 조건식의 이해 dangling else 문제의 이해. if 문. if (expr) statement; 예 : if (i<0){ i = -i; } if (i<0){ printf(“Error”); exit(0); // 프로그램 종료 } if (i) printf(“Not zero”);. Flow Chart equivalent. F. T. if (i<0) i = -i;.

malana
Download Presentation

제 13 강

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 제 13 강 조건부 수행문

  2. 학습 내용 • 조건부 수행문의 작성법 • if 문 • if-else 문 • 조건식의 이해 • dangling else 문제의 이해

  3. if 문 • if (expr) statement; • 예: • if (i<0){ i = -i; } • if (i<0){ printf(“Error”); exit(0); // 프로그램 종료} • if (i) printf(“Not zero”);

  4. Flow Chart equivalent F T • if (i<0) i = -i; expression statement

  5. lab13_01 • if (a>b) c = 0; 에 해당하는 CFL 프로그램을 작성하여 실행하여보라

  6. lab13_02 • 아래의 if 문에 해당하는 CFL을 작성하시오. • if (a==0){ • b = 1; • c = 1; • } • d = 1;

  7. if –else 문 • if (expr) { • … • } else { • … • }; expression statement1 statement2

  8. lab13_03 • if (a>b){ • b = a; • } else { • a = b; • } CFL 로 작성하시요.

  9. 블럭내 문장이 하나이면 • statement 하나인 경우  블럭 기호 { ... } 생략 가능 • 그러나 생략하지 말 것 (습관) • if (expr) statement; • else statement;

  10. 기본적인 조건식 • 어떠한 수식도 가능 • 비교 연산이 많이 쓰임 • >, <, >=, <=, ==, != • 두 가지 조건을 동시에 만족: 논리적 and (&&) • if ((i>0) && (i<100)){ … } // 1부터 99사이인 경우에만 수행 • 두 가지 조건 중 한가지라도 만족: 논리적 or (||) • if ((i>0) || (j>0)){ … } // i 또는 j가 0보다 크면 수행

  11. 실습 lab13_04/abs.c • scanf로 읽어 들인 정수의 절대값을 출력하는 프로그램을 작성하라. if만을 쓰고 else는 쓰지 않고 해보라.

  12. 실습 lab13_05/hour.c • 시간과 분을 두개의 정수로(scanf) 입력 받는다. 이 시간은 군대식 (14시 30분처럼) 시간을 나타낸다. 이 시간을 • 오전 0시 1분 (0 1 경우) • 오전 10시 30분 (10 30 경우) • 오후 12시 5분 (12 5 - 특수한 경우이므로 주의) • 오후 2시 5분 (14 5) • 처럼 출력하는 프로그램 hour.c를 작성하라. • if와 else를 사용한다. 공통부분은 가능한 두 번 쓰지 않도록 한다. • 분 단위가 59가 넘으면 오류로 표시한다.

  13. Cascaded if's • if (A && B) ... • if (A) if (B) ...

  14. lab13_06 ifif.c • scanf로 입력된 정수가 세자리 양의 정수인지 알아보는 프로그램을 작성하라. 단, if 문의 조건에서 &&를 쓰지 않는다. • YES 또는 NO를 출력한다. • 10, 99, 100, 333, 999, 1000, 2000에 대해서 모두 테스트해보라. • (세자리 수인지 직접 물어볼 수 없으므로 수의 범위를 확인 하면 된다.)

  15. #include<stdio.h> • int main(){ • int hh, mm; • scanf("%d %d", &hh, &mm); • if (mm>59){ • printf("Error\n"); • } else { • if (hh>=0 && hh<12){ • printf("오전 "); • } else { • printf("오후 "); • } • if (hh>=0 && hh<13) • printf("%d 시 %d 분\n", hh, mm); • else • printf("%d 시 %d 분\n", hh-12, mm); • } • }

  16. 조건의 만족이란? • 수식의 evaluation 결과가 NON-ZERO • if (1) • always true • if (0) • always false • if (0.1) • always true • if (“Hello”) • always true 그러나 쓰지마세요 그러나 쓰지마세요

  17. 예제: 숫자와 영소문자 세기 • int c, letter, digit, etc; • letter= digit =etc=0; • while ((c=getchar())!=EOF){ • if ((c>=‘a’) && (c<=‘z’)) letter++; • else if ((c>=‘0’) && (c<=‘9’)) digit++; • else etc++; • }

  18. 잘못된 예제: if 와 if-else차이 • int c, letter, digit, etc; • // 영소문자, 숫자, 기타의 개수를 센다. • letter=digit=etc=0; • while ((c=getchar())!=EOF){ • if ((c>='a') && (c<='z')) letter++; • if ((c>='0') && (c<='9')) digit++; • etc++; • }

  19. 실습 lab13_07/count.c • 앞의 예제를 else를 이용하여 수정하여 영소문자의 개수, 숫자문자의 개수, 기타 문자의 개수를 정확히 세도록 만들어보라. • 예를 들어 입력이 abcd12.5 였다면 newline을 포함하여 letter 4개, digit 3개 기타 2개가 될 것이다.

  20. Dangling 'else' • if .. if .. else 처럼 있으면 이 else는 앞의 if에 대응되는 else일까 아니면 뒤에 대응되는 else일까?

  21. 실습: lab13_08(else.c) 전페이지의 질문에 대하여 이 프로그램의 실행 결과를 보고 답변을 해보라. (프로그램 안에 comment로 넣어서 제출) • #include <stdio.h> • int main(){ • int x,y; • x = 1; y = 1; • if (x>0) • if (y>0) printf("둘 다 양수\n"); • else • printf("x는 음수\n"); • x = -1; • if (x>0) • if (y>0) printf("둘 다 양수\n"); • else • printf("x는 음수\n"); • }

  22. 속지말자 들여쓰기 • 공백 문자들은 컴파일러에게 아무 의미가 없음 • 오로지 토큰만이 소용있음. • 들여쓰기는 사람이 보기 위한 것. if (expr) if (expr) statement; else statement; if (expr) if (expr) statement; else statement;

  23. if A if B C else D A no else B C D

  24. if A if B C else D A B no else C D

  25. 실습 lab13_09/else2.c • else.c를 수정하여 의도대로 되도록 만들어 보라. 적절히 블록 기호를 이용한다.

  26. dangling else 규칙 • Ambiguous else는 가장 가까운 if에 붙는다. if (expr) if statement; else statement; if (expr) if (expr) statement; else statement; 바람직한 들여쓰기

  27. 권고 사항 • 반드시 { } 블럭을 사용하자. • if ((c>=‘a’) && (c<‘z’)) • letter++; •  추가시 • if ((c>=‘a’) && (c<‘z’)) • letter++; • total++; • // anything wrong ?

  28. 블럭을 사용했더라면... • 최초: • if ((c>=‘a’) && (c<‘z’)){ • letter++; • } •  추가시: • if ((c>=‘a’) && (c<‘z’)){ • letter++; • total++; • } • // safer !

  29. 실습 lab13_10/tax.c • 세금 계산 프로그램: A 나라에서 소득세는 다음과 같이 계산된다. 소득액(만원 단위)과 나이를 한 줄에 정수로 입력했을 때 (둘 사이는 하나 이상의 빈 칸으로 구분) 세액을 계산하는 프로그램을 작성하라. (세율과 세액을 둘 다 출력) • 세액 = 소득 * 세율 • 세율:

  30. 실습 lab13_11/tax2.c • 소득세율은 소득에 따라 결정된다. 1000만원 이하는 5%, 1000만원을 초과하는 금액에 대해서는 초과분 1000만원까지에 대해서 10%를 적용하며, 그 나머지 소득에 대해서 세율이 20%라고 하자. • 만일 홍길동씨의 소득이 1300만원이라면 이중 1000만원에 대해서는 5%, 나머지 300만원에 대해서는 10%를 세금으로 낸다는 뜻이다. (1300만원 전체에 대한 10%가 아니다.) • 자신의 소득을 입력하였을 때 세액을 계산하는 프로그램을 작성하라. • 사용 예:총 소득은 얼마입니까? (만원 단위)2300총 세액은 YYY입니다.

  31. Summary • Syntax: • if (expr) statement; • if (expr) statement; else statement; • Statement can be replaced by a block • non-zero means true;zero means false • beware of dangling else

  32. 13 강 끝.

More Related