Presentation is loading. Please wait.

Presentation is loading. Please wait.

Part 07 제어 구조 ©우균, 창병모 © 우균, 창병모.

Similar presentations


Presentation on theme: "Part 07 제어 구조 ©우균, 창병모 © 우균, 창병모."— Presentation transcript:

1 Part 07 제어 구조 ©우균, 창병모 © 우균, 창병모

2 이 장의 내용 제어 흐름 If 문 switch 문 while 문 do-while 문 for 문 중첩 루프, 무한 루프, 기타2
© 우균, 창병모

3 7.1 제어 흐름 © 우균, 창병모

4 제어 흐름(flow of control) 제어 흐름이란 ? 제어 구조(control construct)
프로그램에서 실행되는 문장들의 실행 순서 특별히 지정하지 않으면, 프로그램의 실행은  첫 번째 문장에서 시작하여 한 번에 한 문장씩 순차적으로 실행된다 제어 구조(control construct) 프로그램에서 실행되는 문장들의 실행 순서를 제어하는 문장 © 우균, 창병모

5 제어 구조(control construct)
조건문, 루프, 분기문, 함수 호출 등은 제어 흐름, 즉 실행 순서를 변경한다. 조건문(conditional statement) if 문, if-else 문, switch 문 if 문은 조건에 따라 실행할 문장을 선택한다. 반복문(repetition statement) 혹은 루프(loop) while 문, for 문, do-while 문 루프는 특정 문장을 여러 번 반복해서 실행하게 한다. 분기문(branching statement) goto 문, return 문, break 문, continue 문 함수 호출(function call) © 우균, 창병모

6 7.2 if 문 © 우균, 창병모

7 if 문 형식 if (조건식) 제어 흐름 문장1; 조건식이 참이면 문장1을 실행하고, 다음 문장으로 진행
       문장1; 제어 흐름 조건식이 참이면 문장1을 실행하고, 다음 문장으로 진행 조건식이 거짓이면 문장1을 실행하지 않고, 다음 문장으로 진행 조건식 문장 1 거짓 © 우균, 창병모

8 if 문 예 if (x > 0) printf ("x가 양수이다."); if (a < min) min = a; 주의!
C 언어에서는 0은 거짓으로 0 이외의 값은 모두 참으로 간주한다. if (x)    printf("x가 0이 아님“); © 우균, 창병모

9 if-else 문 if-else 문은 조건에 따라 실행할 문장을 선택할 수 있다. 구문 형식 if (조건식) 제어 흐름
     문장1; else      문장2; 제어 흐름 조건식이 참이면 문장1을 실행하고, 거짓이면 문장 2 실행 조건식 문장 2 거짓 문장 1 © 우균, 창병모

10 if-else 문 예 a, b 값 중 작은 값을 min에 대입하는 문장 if (a < b) min = a; else
     min = b; © 우균, 창병모

11 복합문(compound statement)
중괄호로 둘러싸인 문장들의 집합 필요하면 변수 혹은 상수들을 먼저 선언할 수 있다. 구문 형식 {      선언들;      문장 1;      문장 2;           문장 n; } 주의! 복합문도 하나의 문장처럼 사용될 수 있다 © 우균, 창병모

12 minmax.c 실행결과: 입력 1: 20 입력 2: 35 작은 값: 20 큰 값: 35 © 우균, 창병모

13 중첩된 if(nested if) if 문 내에 또 다른 if 문을 포함할 수 있다. 예
이미 결정한 사항에 기초하여 또 다른 결정을 할 수 있다. if (num1 < num2)    if (num1 < num3)         min = num1;     else         min = num3; © 우균, 창병모

14 min.c 실행결과: 입력 1: 20 입력 2: 35 작은 값: 20 큰 값: 35 © 우균, 창병모

15 중첩된 if 문 중첩된 if 문에서, else 절은 짝이 없는 가장 가까운 if와 짝이 된다.
if (num1 < num2)    if (num1 < num3)         min = num1;     else         min = num3; vs {     if (num1 < num3)        min = num1; } else min = num3; © 우균, 창병모

16 중첩된 if 문을 이용한 다중선택 형식 if (조건식1) 문장1; else if (조건식2) 문장2; ...
    문장1; else if (조건식2)      문장2;      ... else if (조건식n)     문장n;   조건식1 거짓 문장 1 조건식2 문장 2 거짓 조건식n 문장 n 거짓 © 우균, 창병모

17 grade.c 실행결과: 점수 입력: 85 점수: 85           학점: B © 우균, 창병모

18 7.3 switch 문 © 우균, 창병모

19 switch 문 switch 문 switch 문의 구문 형식
정수 수식 값에 따라 여러 경로 중에서 한 경로를 선택할 수 있다. switch 문의 구문 형식 switch ( 수식 ) {     case 상수1: 문장들1     case 상수2: 문장들2             ...     case 상수n: 문장들n     default   : 문장들n+1 } © 우균, 창병모

20 switch 문 switch 문의 실행 흐름 . . . (1) 수식의 값을 계산한다.
값==상수1 수식 문장들1 거짓 값==상수2 문장들2 값==상수n 문장들n . . . 문장들n+1 switch 문의 실행 흐름 (1) 수식의 값을 계산한다. (2) 수식의 값을 각 case의 상수 값과 비교한다. (3) 일치된 case 값이 있으면 그 case 절의 문장들을 실행한다.     (3.1) 그 case 절의 마지막 문장이 break이면 switch 문을 빠져 나온다.     (3.2) 그렇지 않은 경우에는 다음 case 절의 문장들을 실행한다. (4) 일치된 case 값이 없으면 default 절의 문장들을 실행한다. © 우균, 창병모

21 switch 문 이용한 학점 수 계산 switch (grade) { case 'A': ACount = ACount + 1;
        break;     case 'B':         BCount = BCount +1;        break;     case 'C':        CCount = CCount + 1;         break;     case 'D':        DCount = DCount + 1;     case 'F':        FCount = FCount + 1;        break;     default:        printf ("오류: %c 학점은 없습니다.", grade); } © 우균, 창병모

22 switch 문 이용한 학점 수 계산 char 형 변수 grade에 따라 해당 학점의 수 증가하는 코드
ACount부터 FCount는 int 변수 보통 switch 문을 벗어나기 위해 각 case 절의 마지막에 break 문을 사용한다. © 우균, 창병모

23 실행결과: 점수 입력 (0 ~ 100): 86 점수: 86        학점: B © 우균, 창병모

24 7.4 while 문 © 우균, 창병모

25 while 문 while 문 구문 형식 제어 흐름 조건이 거짓이 될 때까지 동일한 문장을 반복해서 실행한다.
    문장1; 제어 흐름 조건식을 계산하고, 그 값이 참(0이 아닌 값)인 동안 문장 1를 반복해서 실행한다. 조건이 거짓이 되면 while 문을 종료하고 다음 문장을 실행한다. 조건식 문장 거짓 © 우균, 창병모

26 odd.c 실행결과: 1부터 100까지 홀수의 합은 2500 입니다. © 우균, 창병모

27 Average1.c 실행결과: 점수 입력 (0은 끝): 85 90 75 99 64 총점: 413 평균: 82.60
총점: 413 평균: 82.60 © 우균, 창병모

28 7.5 do-while 문 © 우균, 창병모

29 do-while 문 do-while 문 구문 형식 . . .
루프 본체를 먼저 실행하고 조건을 검사하고 그 값이 참인 동안 반복한다 루프 본체를 적어도 한 번 실행 구문 형식 do {     문장1;      ...     문장n; } while (조건식); 조건식 문장1 거짓 문장n . . . © 우균, 창병모

30 max.c 실행결과: 점수 입력 (0은 끝): 수를 입력하세요 85 170 88 192 가장 큰 수는 192 입니다.
가장 큰 수는 192 입니다. © 우균, 창병모

31 7.6 for 문 © 우균, 창병모

32 for 문 for 문 구문 형식 제어 흐름 보통 정해진 회수만큼 반복할 때 사용된다.
    문장1; 제어 흐름 수식1: 초기화를 위한 수식 루프를 시작하기 전에 한번 계산 수식2: 부울 조건식 문장1 실행 전에 계산 값이 참(0이 아닌 값)이면 문장1 실행 거짓(값이 0)이면 루프를 벗어남 수식3: 수식2의 변수 증가/감소 위한 식 문장1 실행 후에 계산 수식2 문장1 거짓 수식1 수식3 © 우균, 창병모

33 for 문 예 for 루프를 사용해서 1부터 100까지의 자연수의 합 계산
for (count = 1; count <= 100; count++)     total = total + count; for (count = 100; count > 0; count--)     total = total + count; © 우균, 창병모

34 for 문과 while 문 vs for ( 수식1 ; 수식2 ; 수식3 ) 문장1; 수식1 ; while ( 수식2 ) {
    문장1; vs 수식1 ; while ( 수식2 ) {        문장1;       수식3 ; } © 우균, 창병모

35 three.c 실행결과: 3의 배수를 몇 개 프린트할까요? 10 3 6 9 12 15 18 21 24 27 30
3  6  9  12  15  18  21  24  27  30 © 우균, 창병모

36 tempTable.c 실행결과: 0.00 도 F = -17.78 도 C 10.00 도 F = -12.22 도 C
© 우균, 창병모

37 Average2.c © 우균, 창병모

38 7.7 중첩루프, 무한루프, 기타 © 우균, 창병모

39 중첩 루프(nested loop) 루프의 본체 내에 다른 루프를 포함할 수 있다. 예를 들어
while 루프 내에 다시 while 루프가 포함될 수 있다. for 루프 내에 다시 for 루프가 포함될 수 있다. while 루프 내에 for 루프가 포함될 수 있다. 바깥 루프의 각 반복에 대해서 안쪽 루프가 완전히 실행되므로 이차원의 반복적인 일을 수행할 수 있다. © 우균, 창병모

40 multiply.c © 우균, 창병모

41 실행결과 실행결과: 1 단 1 X 1 = 1 1 X 2 = 2 1 X 3 = 3 1 X 4 = 4 1 X 5 = 5
 1 단 1 X 1 = 1 1 X 2 = 2 1 X 3 = 3 1 X 4 = 4 1 X 5 = 5 1 X 6 = 6 1 X 7 = 7 1 X 8 = 8 1 X 9 = 9 2 단 2 X 1 = 2 2 X 2 = 4 2 X 3 = 6 2 X 4 = 8 2 X 5 = 10 2 X 6 = 12 2 X 7 = 14 2 X 8 = 16 2 X 9 = 18 실행결과: ...        9 단 9 X 1 = 9 9 X 2 = 18 9 X 3 = 27 9 X 4 = 36 9 X 5 = 45 9 X 6 = 54 9 X 7 = 63 9 X 8 = 72 9 X 9 = 81 © 우균, 창병모

42 무한 루프(infinite loop) 루프의 조건이 항상 참이면 루프는 무한히 반복된다. 예
while (1)  // 경고: 무한 루프이다!     printf (“무한 루프”); int count = 1; while (count != 100)      count += 2; while (count <= 100) {  //경고: 이것이 무한 루프이다!     printf(“%d\n", count);     count--; } © 우균, 창병모

43 무한 루프(infinite loop) 프로그래머는 무한 루프를 피하기 위해서 프로그램을 주의 깊게 설계해야 한다 !
for (i = 0; ;i++)    printf("루프 반복: %d\n", i); 프로그래머는 무한 루프를 피하기 위해서 프로그램을 주의 깊게 설계해야 한다 ! © 우균, 창병모

44 break 문 루프 내에서 break 문 루프의 실행이 중단되고 루프 다음에 위치한 문장이 실행된다. while (1) {
    scanf("%d",&j)    if (j == 0)         break;     result = i/j; } © 우균, 창병모

45 continue 문 루프 내에서 continue 문 루프 조건을 다시 계산하고, 그 조건이 참이면 루프 본체를 다시 실행한다.
for (i = 0, sum = 0; i <= n; i++) {     if (i % 2 == 0)         continue;     sum += i; } © 우균, 창병모

46 Key Point © 우균, 창병모

47 Key Point 1 if 문은 조건에 따라 실행할 문장을 선택한다. 루프는 특정 문장을 여러 번 반복해서 실행하게 한다.
C 언어에서 조건문, 루프, 분기문, 함수 호출 등은 제어 흐름, 즉 실행 순서를 변경한다. if-else 문은 조건에 따라 실행할 문장을 선택할 수 있다. 중첩된 if 문에서, else 절은 짝이 없는 가장 가까운 if와 짝이 된다. © 우균, 창병모

48 Key Point 2 switch 문은 한 개의 정수 값에 따라서 여러 개의 경로 중에서 한 경로를 선택할 수 있다.
보통 switch 문을 벗어나기 위해 각 case 절의 마지막에 break 문을 사용한다. while 문은 그 조건이 거짓이 될 때까지 동일한 문장을 반복해서 실행한다. for 문은 보통 루프가 정해진 회수만큼 실행될 때 사용된다. do-while 문은 루프 본체를 적어도 한 번 실행한다. 프로그래머는 무한 루프를 피하기 위해서 프로그램을 주의 깊게 설계해야 한다. © 우균, 창병모

49 프로그래밍 실습 © 우균, 창병모

50 ▶ 프로그래밍 실습 1. 프로그램 7.5는 (0보다 작거나 100보다 큰) 잘못된 점수가 입력되어도 전혀 오류 메시지를 내지 못한다. 이 프로그램을 0부터 100까지의 유효한 점수만을 입력 받을 수 있도록 확장해보자.  잘못된 점수가 입력되면 유효한 점수가 입력될 때까지 반복해서 다시 입력받도록 한다. © 우균, 창병모

51 ▶ 프로그래밍 실습 2. 실습 1의 프로그램을 확장하여 3. 실습 2의 프로그램을 확장하여
입력된 각 점수에 대해서 학점을 결정하여 출력하고 모든 점수의 합과 평균도 출력하도록 확장하라.  프로그램 7.4를 참조하여 입력 점수에 대해서 학점을 결정한다. 3. 실습 2의 프로그램을 확장하여 학점, 점수의 합, 평균뿐만 아니라 각 학점의 수를 계산하는 프로그램을 작성하라. switch 문을 이용하여 해당 학점을 결정하고 해당 학점의 수를 증가시키도록 한다. © 우균, 창병모


Download ppt "Part 07 제어 구조 ©우균, 창병모 © 우균, 창병모."

Similar presentations


Ads by Google