Chapter 3 Flow of Control

Slides:



Advertisements
Similar presentations
YES C 제 1 장 C 언어의 개요 1/34 제 1 장 C 언어의 개요 문봉근. YES C 제 1 장 C 언어의 개요 2/34 제 1 장 C 언어의 개요 1.1 프로그램과 C 언어의 특징 1.2 C 언어의 프로그램 구성 1.3 비주얼 C++ 통합 환경 들어가기.
Advertisements

C 언어 컴퓨터학과 C 언어 ( STS ) (Chap5. Selection-Making Decisions ) C 언어.
제6장 조건문.
프로그래밍1 및 실습 (C언어) - 3장 기본자료형 (3.6부터 끝까지) -
슬라이드 1~21까지는 각자 복습! 슬라이드 22부터는 수업시간에 복습
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express.
제 1장 C 언어의 소개.
제 7 장 문장 구조화 제어문 지정문 조건문 반복문 GOTO 문 비결정적문.
시스템 생명 주기(System Life Cycle)(1/2)
제7장 제어구조 I – 식과 문장.
제3장 추가 실습 3장 관련 C 언어 프로그래밍 실습.
4장: 자료형과 수식.
시스템 생명 주기(System Life Cycle)(1/2)
쉽게 풀어쓴 C언어 Express 제4장 변수와 자료형 C Express.
제5장 제어명령
컴퓨터의 기초 제 4강 - 표준 입출력, 함수의 기초 2006년 4월 10일.
처음으로 배우는 C 프로그래밍 제2부 기초 제5장 반복문.
쉽게 풀어쓴 C언어 Express 제3장 C프로그램 구성요소 C Express.
6장. printf와 scanf 함수에 대한 고찰
누구나 즐기는 C언어 콘서트 제4장 수식과 연산자.
7. while 문의 흐름 제어.
연산자 대입 연산자 산술 연산자 관계 연산자 논리 연산자 비트 연산자 콤마 연산자 축약 연산자 sizeof 연산자
자료구조 김현성.
기초C언어 제3주 C프로그램 구성요소, 변수와 자료형 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원
컴퓨터 프로그래밍 기초 - 2nd : scanf(), printf() 와 연산자 -
쉽게 풀어쓴 C언어 Express 제3장 C프로그램 구성요소 C Express.
Chapter 4 – 연 산 자 Outline 4.1 산술 연산자 4.2 관계 연산자 4.3 동등 연산자 4.4 논리 연산자
Chapter 06. 선택문.
C언어 프로그래밍의 이해 Ch05. 명령문 Phylogenetic: 계통, 발생(학)의.
내용 프로그래밍 언어(programming language) C 언어란?? C 언어 역사 C 언어 특징 C 프로그램의 구조
제 3 장 상수와 변수
쉽게 풀어쓴 C언어 Express 제7장 반복문 C Express.
쉽게 풀어쓴 C언어 Express 제4장 변수와 자료형 C Express.
4장 제어문 선택문: if 문, if – else 문, switch 문
4주차: Data Types and Functions
쉽게 풀어쓴 C언어 Express 제4장 변수와 자료형 C Express.
C 4장. 연산자 #include <stdio.h> int main(void) { int num;
adopted from KNK C Programming : A Modern Approach
개정판 누구나 즐기는 C언어 콘서트 제6장 반복문 출처: pixabay.
Chapter 2 Lexical Elements, Operators, and the C System
컴퓨터의 기초 제 2강 - 변수와 자료형 , 연산자 2006년 3월 27일.
adopted from KNK C Programming : A Modern Approach
제 6장 함수 Hello!! C 언어 강성호 김학배 최우영.
자전거를 배우려면 안장에 올라가 페달을 밟아라.
제 3 장 연산자 (Operators).
컴퓨터 프로그래밍 기초 - 4th : 수식과 연산자 -
제어문 & 반복문 C스터디 2주차.
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
컴퓨터 프로그램 제2,3장 간단한 C 프로그램 김 문 기.
프로그래밍 기초와 실습 Chapter 11 Recursion.
루프와 카운트 Looping and counting
연산자Operators C언어의 기본 구조 도서출판 한산 C언어의 기본 구조 1: #include <stdio.h>
6장 반복제어문 for 문 while 문 do while 문 기타 제어문.
누구나 즐기는 C언어 콘서트 제2장 기초 사항 IT응용시스템공학과 김형진 교수.
C언어 프로그래밍의 이해 Ch05. 명령문.
-Part1- 제8장 조건문이란 무엇인가 (교재 199페이지 ~ 224페이지)
쉽게 풀어쓴 C언어 Express 제6장 조건문 C Express Slide 1 (of 28)
쉽게 풀어쓴 C언어 Express 제6장 조건문 C Express.
Chapter 08 조건문.
반복문의 기능 반복문 반복문 특정 영역을 특정 조건이 만족하는 동안에 반복 실행하기 위한 문장 while문
제5장 디버깅과 추적 문봉근.
3주차: Control Flow and Others
어서와 C언어는 처음이지 제16장.
C 4장. 연산자 #include <stdio.h> int main(void) { int num;
printf("Global Korea\n");
어서와 C언어는 처음이지 제22장.
배열, 포인터, 함수 Review & 과제 1, 2.
PHP 기초문법 PHP를 공부하는데 있어 가장 기초가 되는 PHP기초문법에 대해서 배워 봅니다.
Presentation transcript:

Chapter 3 Flow of Control 프로그래밍 기초와 실습 Chapter 3 Flow of Control

Contents Relational, Equality, and Logical Operators Short-Circuit Evaluation The Compound Statement The Empty Statement The if and if-else Statements Nested Flow of Control The switch Statement The Conditional Operator

Contents The while Statement The for Statement The Comma Operator The do Statement The goto Statement The break and continue Statements Nested Flow of Control

Relational, Equality, and Logical Operators Relational operators (관계 연산자) less than < greater than > less than or equal to <= greater than or equal to >= Equality operators (등가 연산자) equal to == not equal to != Logical operators (논리 연산자) (unary) negation ! logical and && logical or ||

Relational, Equality, and Logical Operators Associativity Precedence 가 동일한 연산자가 서로 만났을 때 연산 되어지는 순서 방향 Operators Associativity ( ) ++ (postfix) -- (postfix) left to right + (unary) - (unary) ++ (prefix) -- (prefix) right to left * / % + - < <= > >= == != && || ? : = += -= *= /= etc , (comma operator)

Relational Operators and Expressions 관계연산자 Syntax 틀린 사용의 예 < : less than > : greater than <= : less than or equal to >= : greater than or equal to [Ex] a =< b /* out of order */ a < = b /* space not allowed */ a >> b /* this is a shift expression */

Relational Operators and Expressions i = 3 , j = 2 , k = 1 /* but different interpret */ if ( i > j > k ) → ( i > j ) > k /* 결과는 F */ int i =1, j = 2, k = -7 ; i < i + j; /* i < (i + j) → 1 */ 3 < j < 5; /* ( 3 < j ) < 5 → 1 */ (- i) - 5 * j >= k + 1; /* (( -i)→( 5 * j )) >= ( k + 1 ) → 0 */ i가 j보다 크므로 true 는 1이므로 1 > k가 되어 결과는 False 수학적인 표현의 의미로, j 가 가진 값이 i , k 가 가진 값의 중간 값이라고 표현하려면 ( i < j ) && ( j < k ) → true

Relational Operators and Expressions 관계식에서의 우선순위와 결합법칙의 사용 예 Declarations and initializations int i = 1, j = 2, k = 3; double x = 5.5, y = 7.7; Expression Equivalent expression Value i < j - k i < ( j – k ) -i + 5 * j >= k + 1 ( ( -i ) + ( 5 * j ) ) >= ( k + 1 ) 1 x – y <= j – k – 1 ( x – y ) <= ( ( j – k ) – 1 ) x + k + 7 < y / k ( ( x + k ) + 7 ) < ( y / k )

Equality Operators and Expressions 등가 연산자 Syntax lower precedence than relational operators 등가식에서의 우선순위와 결합법칙의 사용 예 = : assignment operator == : equality operator != : not equality operator Declarations and initializations int i = 1, j = 2, k = 3; Expression Equivalent expression Value i == j j == i i != j j != i 1 i + j + k == - 2 * - k ((i + j) + k ) == (( -2) * (-k))

Logical Operators and Expressions 논리 연산자 Syntax 부정 연산자의 값 ! : logical negative && : logical and || : logical or not operator T && T ? T , otherwise F F || F ? F , otherwise T Values of negation expressions 긍정 부정 a !a zero 1 nonzero

Logical Operators and Expressions C언어에서 !연산자는 일반적 논리에서의 ‘not’ 연산자와 다르다. [Ex] s가 논리 문 : not ( not s) = s 의 결과값. C 언어: !( !5 ) = !( 0 ) = 1 의 값을 생성 C언어에서는 0이 아닌 모든 값은 true로 인식한다. !5는 !(true)와 같으므로 !5 = 0 의 값을 가진다. [Ex] char c = ‘A’ ! c !c = !(A) 으로 나타낼 수 있다. 여기서 A는 0이 아닌 값이므로 true의 값을 가진다. !c는 결국 not true이므로 결과는 0 (false) 이다.

Logical Operators and Expressions 논리식에서의 우선순위와 결합법칙의 사용 예 Declarations and initializations int i = 7, j = 7; double x = 0.0, y = 999.9; Expression Equivalent expression Value ! (i – j) + 1 ( ! (i – j)) + 1 2 ! i – j + 1 (( ! i ) – j ) + 1 -6 ! ! ( x + 3.3 ) ! ( ! ( x + 3.3 )) 1 ! x * ! ! y (! x) * (! (! y))

Logical Operators and Expressions Binary logical operators && 와 ||는 식에 적용되면 0이나 1의 값을 생성한다. Value of bitwise expressions a b a && b a || b zero nonzero 1 Truth table for && and || a b a && b a || b F T

Logical Operators and Expressions 이항 논리식에서의 우선순위와 결합법칙의 사용예 Declarations and initializations int i = 3, j = 3, k = 3; double x = 0.0, y = 2.3; Expression Equivalent expression Value i && j && k ( i && j ) && k 1 x || i && j -3 x || ( i && ( j -3 ) ) i < j && x < y ( i < j ) && ( x < y ) i < j || x < y ( i < j ) || ( x < y )

Logical Operators and Expressions Short-Circuit Evaluation &&와 ||의 연산에서 true와 false의 값이 결정됨과 동시에 계산과정은 멈추게 된다. expr1 && expr2 expr1의 결과가 F이면, expr2 연산 할 필요 없이 결과는 F no need to evaluate expr2 expr1 || expr2 expr1의 결과가 T이면, expr2 연산 할 필요 없이 결과는 T

Logical Operators and Expressions Short-Circuit Evaluation의 예 [Ex] int i, j; i = 2 && ( j = 2 ); printf(“%d %d\n”, i, j); /* 1 2 is printed */ ( i = 0 ) && ( j = 3 ); printf(“%d %d\n”, i, j); /* 0 2 is printed */ i = 0 || ( j = 4 ); printf(“%d %d\n”, i, j); /* 1 4 is printed */ ( i = 2 ) || ( j = 5 ); printf(“%d %d\n”, i, j); /* 2 4 is printed */

Logical Operators and Expressions 구간 확인 하는 경우 여러 개의 변수의 구간을 확인하는 경우 [Ex] if ( i > -5 && i < 10 ) printf(“ 구하는 수는 -5와 10의 범위 내에 있습니다. “); else printf(“구하는 수는 -5와 10의 범위 내에 있지 않습니다. “); [Ex] if( ( ( age >= 10 ) && ( age < 20 ) ) && ( height >= 170 ) ) printf(“ %s은 10대이고, 키가 170 이상인 사람입니다.”, name ); if( ( ( age >= 10 ) && ( age < 20 ) ) || ( height >= 170 ) ) printf(“ %s은 10대이거나, 키가 170 이상인 사람입니다.”, name );

Logical Operators and Expressions 윤년을 확인하는 예제 윤년이란? : 2월 29일까지 있는 해로, 4로 나누어지는 수 중 100으로 나누어지는 수는 평년, 아니면 윤년, 하지만 400으로 나누어지는 수는 윤년! [Ex] if (year % 4 == 0 ) { if (year % 400 == 0) printf(“윤년”); else if( year % 100 == 0) printf(“평년”); else printf(“윤년”); } else printf(“평년”); [Ex] 하나의 조건절로 나타냄 if (((year%4 == 0) && (year%100 != 0)) || ( year%400 == 0)) printf(“윤년”); else printf(“평년”);

Logical Operators and Expressions 연산자 우선순위의 예 [Ex] a = b += c++ - d + --e / -f ;  (a = ( b += (c++) – d + ( (--e) / (-f) ) ) ) a < -b || a < c && c + 2 < d  (( a < -b ) || (( a < c ) && ( (c + 2) < d ))) c값의 증가는 모든 계산이 끝나고 이루어진다. (++c 일 경우는 c값부터 증가시킨 후 계산) 8 7 1 5 6 2 4 3 3 1 2 5 7 4 6

The Compound Statement 복합문 중괄호 {}로 묶여진 선언문과 실행문이다. 실행문을 실행 가능한 단위로 그룹화 하는 것이다. 선언문이 복합문의 시작 부위에 왔을 때, 그 복합문을 block 이라고 한다. [Ex] { int a = 1; int b = 2; printf(“a=%d, b=%d \n”); } printf(“a=%d, b=%d, c=%d\n”); /* compile error */

The Empty Statement 공백문 공백문은 하나의 세미콜론을 사용하여 나타낸다. 공백문은 문법 상으로 필요하지만 의미상으로는 아무 동작도 요구하지 않는 곳에서 사용된다. if-else와 for같은 제어의 흐름에 영향을 주는 구조에서 유용하게 사용된다. [Ex] a = b; /* an assignment statement */ a + b + c; /* legal, but no useful work done */ ; /* an empty statement */ printf("%d\n", a); /* a function call */

The if and if-else Statements if statement Syntax expression이 true라면 statement가 실행된다. 그렇지 않으면 statement를 실행되지 않고 다음 문장으로 제어순서가 넘어가게 된다. Evaluate logical expression If an expression is T → Execute statement(s) F → Do nothing if (expression) statement if (expression){ statement1 statement2 : }

The if and if-else Statements [Ex] if ( x > y ) y = x; /* x>y일 때, x의 값이 y로 대입 */ if ( j > 10 ){ /* j가 10보다 클때만 block이 실행 */ j = 1 ; level = level + 1 ; printf(“clear step!\n”); } if ( grade >= 90 ) printf("Congratulations! \n"); printf("Your grade is %d.\n", grade ); /* grade값이 90 이상일 때만 Congratulations!가 표시되고 , 두 번째 printf()문은 항상 실행된다. */

The if and if-else Statements If... else Syntax if (expression) { statement1; statement2; : } else { statement1; statement2; [Ex] if (x == y) { printf(“x is equal to y”); e_count += 1 ; } else { printf(“x is not equal to y”); ne_count += 1 ;

The if and if-else Statements [Ex] if ( j < k ) min = j; printf(“ j is smaller than k \n”); 위의 code를 다음과 같이 쉽게 고쳐 쓸 수 있다. if ( j < k ) { } if ( n < 0 ) printf(“n is less than 0\n”); else if ( n == 0 ) printf(“n is equal to 0\n”); else printf(“n is greater than 0\n”);

find_min Program [Ex] /* find the minimum of three values. */ #include <stdio.h> int main(void) { int x, y, z, min; printf( “Input three integers: “ ); scanf( “%d%d%d”, &x, &y, &z ); if (x < y) min = x; else min = y; if ( z < min) min = z; printf( “The minimum value is %d\n”, min ); return 0; } 최소값을 찾는 if. else문. Input three integers: 5 9 6 ꎠ The minimum value is 5

Nested Flow of Control Nested if statement if ( expr1) statement1; else if ( expr2) statement2; else if ( expr3) statement3; ….. else if ( exprN) statementN; else default statement1; next statement

Nested Flow of Control Nested if statement [Ex] if (age < 18) printf(“children”); else if (age < 65) printf(“adult”); else printf(“senior”); age가 18미만인 경우 children출력 age가 18과 65사이 adult출력 age가 65보다 많은 경우 senior출력

Nested Flow of Control Nested if statement [Ex] if (c == ‘ ’) ++blank_cnt ; else if (c >=‘0’ && c <= ‘9’) ++digit_cnt ; else if (c >=‘A’ && c <= ‘Z’) ++upper_cnt ; else if (c >=‘a’ && c <= ‘z’) ++lower_cnt ; else if (c ==‘\n’) ++nl_cnt ; else ++other_cnt ; c가 space인 경우 c가 0과 9사이인 경우 c가 A와 Z사이인 경우 c가 a와 z사이인 경우 c가 new line인 경우 c가 그외인 경우

The switch Statement switch문은 if-else문을 일반화한 다중 조건문 switch ( expression ){ case constant-expression : statements ……………….. default : statements } [Ex] switch (grade) { case 4 : case 3 : case 2 : case 1 : printf(“Passing”); break; case 0 : pritnf(“Failing”); break; default : printf(“Illega grade”); break; }

The switch Statement switch에서 break의 역할 [Ex] switch (grade){ case 4 : printf(“A”) ; break; case 3 : printf(“B”) ; break; case 2 : printf(“C”) ; break; case 1 : printf(“D”) ; break; default : printf(“Illegal grade”); break; } grade = 4  A grade = 3  B grade = 2  C grade = 1  D grade = 0  illegal grade [Ex] switch (grade){ case 4: printf(“A”) ; case 3: printf(“B”) ; case 2: printf(“C”) ; case 1: printf(“D”) ; default : printf(“illegal grade”); } grade = 4  ABCDillegal grade grade = 3  BCDillegal grade grade = 2  CDillegal grade grade = 1  Dillegal grade grade = 0  illegal grade

The switch Statement 날짜를 표시하는 예제 [Ex] switch (day) { case 1: case 21: case 31: printf(“st”); break; case 2: case 22: printf(“nd”); break; case 3: case 23: printf(“rd”); break; default: printf(“th”); break; }

The switch Statement 앞의 예제를 if-else로 변환 [Ex] if ( day == 1 || day == 21 || day ==31 ) printf(“st”); else if ( day == 2 || day = 22 ) printf(“nd”); else if ( day == 3 || day = 23 ) printf(“rd”); else printf(“th”);

The switch Statement 숫자를 영문으로 표시하는 예제 #include <stdio.h> main() { int number; printf( "Enter number(1~99): “ ); scanf( "%d", &number ); if ( number < 1 || number > 99 ) printf( "Enter numbers between 1 and 99“ ); printf( "Try again“ ); } 1~99 숫자만 입력 받는다

The switch Statement 숫자를 영문으로 표시하는 예제 else if ( number >= 10 && number <= 19 ) switch(number) { case 11: printf("eleven\n");break; case 12: printf("twelve\n");break; case 13: printf("thirteen\n");break; case 14: printf("fourteen\n");break; case 15: printf("fifteen\n");break; case 16: printf("sixteen\n");break; case 17: printf("seventeen\n");break; case 18: printf("eighteen\n");break; case 19: printf("nineteen\n");break; default: break; } 1~19 숫자의 출력 구문

The switch Statement 숫자를 영문으로 표시하는 예제 1의 자리의 숫자 else { switch( number / 10 ) { case 2: printf("twenty "); break; case 3: printf("thirty "); break; case 4: printf("forty "); break; case 5: printf("fifty "); break; case 6: printf("sixty "); break; case 7: printf("seventy "); break; case 8: printf("eighty "); break; case 9: printf("ninety "); break; default:printf(" ");break; } /* end switch */ switch( number % 10 ){ case 1: printf("one\n");break; case 2: printf("two\n"); break; case 3: printf("three\n"); break; case 4: printf("four\n"); break; case 5: printf("five\n"); break; case 6: printf("six\n"); break; case 7: printf("seven\n"); break; case 8: printf("eight\n"); break; case 9: printf("nine\n"); break; default:break; }/* end switch */ }/* end else */ } 10의 자리의 숫자

The Conditional Operator Conditional Operator Syntax 조건식 연산자 ? : 는 삼항 연산자이다. expr1이 먼저 계산된 후, 참이면 expr2가 실행, 거짓이면 expr3이 수행된다. if-else 문 Conditional Operator expr1 ? expr2 : expr3 if ( y < z) x = y; else x = z x = ( y < z ) ? y : z

The while Statement while Syntax while (expr) statement next statement 먼저 expr이 계산된다. 만일 expr의 결과가 true이라면 statement가 실행되고, 제어는 while 루프의 시작 부분으로 다시 전달 된다. expr의 값이 true일 경우에만 statement가 실행된다. expr의 값이 false일 경우에는 next statement가 실행된다. while (expr) statement next statement [Ex] /* 1~10까지의 합을 구하는 statement*/ i = 1; while ( i <= 10 ) { sum += i; ++i; }

Finding Maximum Values [Ex] /* Find the maximum of n real calues. */ #include <stdio.h> int main(void) { int cnt = 0, n; float max, x; printf("The maximim value will be computed.\n"); printf("How many numbers do you wish to enter?"); scanf("%d", &n); while( n <= 0 ) { printf("\nERROR: Positive integer required.\n\n"); }

Finding Maximum Values printf("\nEnter %d real numbers: ", n); scanf("%f", &x); max = x; while (++cnt < n) { if (max < x) } printf("\nMaximum value: %g\n", max); return 0; The maximim value will be computed. How many numbers do you wish to enter? 3 ꎠ Enter 3 real numbers: 1 5 10 ꎠ Maximum value: 10

The for Statement for statement Syntax for ( expr1; expr2;expr3 ) 위의 statement는 다음 statement와 동일하다. expr1은 for loop를 초기화 하는데 사용. for ( expr1; expr2;expr3 ) statement next statement statement를 실행한 후에 expr3의 조건을 실행한다. expr2의 조건이 계산이 된다. 그 조건이 true가 되면 for loop안에 있는 statement를 실행 expr1; while (expr2) { statement expr3; } next statement

The for Statement Counting up from 0 to n-1 Counting up from 1 to n Counting up from n-1 to 0 Counting up from n to 1 10부터 1까지 count하는 예제 for ( i = 0; i < n; i++ ); for ( i = 1; i <= n; i++ ); for ( i = n -1; i >= 0; i-- ); for ( i = n; i > 0; i-- ); [Ex] for ( i = 10; i > 0; --i) printf(“ T minus %d and counting\n”, i );

The for Statement 제곱근을 나타내는 Program [Ex] /* Prints a table of squares using a for statement */ #include <stdio.h> main() { int i, n; printf(“Enter number of entries in table: “); scanf(“%d”, &n); for ( i = 1; i <= n; i++ ) printf(“%10d%10d\n”, i, i * i ); return 0; } Enter number of entries in table : 5 ꎠ 1 1 2 4 3 9 4 16 5 25

The for Statement 1에서 100사이의 숫자 중 5의 배수를 한 line에 4개씩 출력 [Ex] #include <stdio.h> main() { int i=1,j=0; for ( i = 1; i <= 100; i++ ) { if( ( i%5 ) == 0 ) { printf(“ %d ",i ); j++; if( ( j % 4 ) == 0 ) printf("\n"); } 5 10 15 20 30 35 40 50 55 60 70 75 80 85 90 95 100

The Comma Operator Comma Operator Syntax C의 모든 연산자중에 가장 낮은 우선순위를 가짐. expr1 , expr2 [Ex] a = 0, b = 1; Declarations and initializations int i, j, k = 3; double x = 3.3; Expression Equivalent expression value i = 1, j = 2, ++k + 1 ((i = 1), (j=2)), ((++ k) +1) 5 k != 7, ++x * 2.0 + 1 ( k != 7 ), ((( ++x) * 2.0 ) + 1 ) 9.6

The do Statement do { statement; } while(expression) ; do 문 Syntax 양의 정수만을 읽는 프로그램 do { statement; } while(expression) ; next statement; [Ex] do { printf(“Input a positive integer: “); scanf(“%d”, &n); if (error = ( n <= 0 )) printf(“\nERROR: Negative value not allowed!\n\n”); } while (error);

#include <stdio.h> main(){ int n, error; do { printf("Input a positive integer: "); scanf("%d", &n); if (error = ( n <= 0 )) printf("\n ERROR: Negative value not allowed! \n\n"); }while (error); printf("\n A positive value is inserted! \n"); }

The do Statement do 문과 while문의 비교 ( do statements ) [Ex] /* 정수의 자릿수를 출력하는 프로그램 */ #include <stdio.h> main(void) { int digits = 0, n; printf(“Enter a nonnegative integer: “); scanf(“%d”, &n); do { n /= 10; digits++; } while ( n > 0 ); printf(“The number has %d digit(s).\n”, digits); return 0; } 입력 받은 수를 반복적으로 10으로 나누어서 자릿수를 계산한다. Enter a nonnegative integer : 0 ꎠ The number has 1 digit(s).

The do Statement do 문과 while문의 비교 ( while statements ) [Ex] /* 정수의 자릿수를 출력하는 프로그램 */ #include <stdio.h> main(void) { int digits = 0, n; printf(“Enter a nonnegative integer: “); scanf(“%d”, &n); while ( n > 0 ) { n /= 10; digits++; } printf(“The number has %d digit(s).\n”, digits); return 0; 입력 받은 수를 반복적으로 10으로 나누어서 자릿수를 계산한다. Enter a nonnegative integer : 0 ꎠ The number has 0 digit(s).

The goto Statement goto문은 현재 함수에서 label이 붙은 문장으로 무조건 분기할 수 있게 한다. (가능한 사용하지 않는다.) [Ex] goto error; …. error: { printf(“An error has occurred – bye!\n”); exit(1); } [Ex] while (scanf(“%lf”, &x) == 1 ) { if ( x < 0.0 ) goto negative_alert; printf(“%f %f\n”, sqrt(x), sqrt(2 * x)); } negative_alert: printf(“Negative value encountered!\n”);

The break and continue Statements break문은 가장 내부의 루프나 switch문으로부터 빠져 나오는데 사용된다. 입력 받은 수가 음수이면 loop를 빠져 나오는 코드 [Ex] while(1) { scanf(“%lf” , &x); if ( x < 0.0 ) break; /* exit loop if x is negative */ printf(“%f\n”, sqrt(x)); } /* break jumps to here */

The break and continue Statements [Ex] for( i = 2 ; i < n ; i++ ) if (n % i == 0) break; if (i == n) printf(“n is a prime number\n”); … for( ; ; ) { scanf(“%d”, &n); if( n == 0 ) break; } i가 2에서 1씩 증가하면서 n이 될 때까지 n을 i로 나누어지는 지 check. i로 나누어 지면 가장 가까운 반복문 for문을 종료 즉, for문의 exit -> i < n : n은 소수 아님 또는 i=n이 되어 exit -> i = n : n은 소수 For문의 경우 항상 true로 무한 loop를 돌게 됨 그러나 read한 n의 값이 0라면 break, for문을 exit

The break and continue Statements cotinue문은 루프의 현재 반복 동작을 멈추게 하고 즉시 루프의 다음 반복 동작을 하게 한다. ±0.01 사이의 숫자가 입력되면 continue문이 실행되는 코드 [Ex] while ( cnt < n ) { scanf(“%lf”, &x ); if( x > -0.01 && x < +0.01) continue; /* disregard small values */ ++cnt; sum += x; /* continue transfers control here to begin next iteration */ }

The break and continue Statements if 조건절을 바꾸면 continue문을 사용하지 않아도 되는 예제 [Ex] n = 0; sum = 0; while ( n < 10) { scanf( “%d”, &i ); if ( i == 0 ) continue; sum += i; n++; /* continue jumps to here */ } /* end of while */ if ( i != 0 ) { } /* end of if */ } /* end of while */

The break and continue Statements break 사용시 결과와 continue 사용시 결과의 차이 [Ex] break #include <stdio.h> main() { int n = 0, i = 1; int sum = 0; for ( ; i <= 10; i++ ) { if ( i == 5 ) break; sum += i; n++; } printf(“Sum=%d\n”, sum); [Ex] continue for ( ; i <= 10; i++ ){ if ( i == 5 ) continue; 1+2+3+4 = 10 1+2+3+4+6+7+8+9+10 = 50 sum = 10 sum = 50

Nested Flow of Control Nested for statement [Ex] for ( expr1; expr2; expr3) { statement1; for ( expr4; expr5; expr6 ) { statement2; for ( expr7; expr8; expr9) { statement3; } 1 2 3

Nested Flow of Control Nested for statement [Ex] int i , k , count = 0 ; for ( i=1 ; i <= 10 ; i+=2) for ( k=1 ; k <= i ; k++) { if ( k%2 == 0 ) count++ ; } printf(“ Count = %d \n”, count); 1 2 Count = 10

다중 for 문 구구단을 출력하자. #include <stdio.h> void main(void){ int i, j, result; for (i=2; i<=9; i++) { for (j=1; j<=9; j++) result = i * j; printf(" %d * %d = %d \n", i, j, result); }

#include <stdio.h> main(){ int i , k , count = 0 ; for ( i=1 ; i <= 10 ; i+=2){ for ( k=1 ; k <= i ; k++){ if ( k%2 == 0 ){ printf(" \n i=%d , k = %d ", i,k); count++ ; } printf(" \n\n Count = %d ", count);

2로 나누어서 나머지가 0인 경우는 총 10번이다. i k 1 1 3 1 , 2 , 3 5 1 , 2 , 3 , 4 , 5 7 1 , 2 , 3 , 4 , 5 , 6 , 7 9 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9

Nested Flow of Control Nested for statement [Ex] int i, k, count = 0 ; for ( i = 1 ; i <= 10 ; i++ ) for ( k = 1 ; k <= i ; k++ ) { if ( k % 4 == 0 ) break; count++; } printf( “Count = %d\n”, count ) ; 1 2 Count = 27

Nested Flow of Control Nested for statement [Ex] for ( j = 1 ; j <= 5 ; j++ ) { for ( k = 1, sum = 0 ; k <= 3 ; k++ ) if ( j != k ) sum += j + k ; printf (“%5d\t%5d\t%5d\n”, sum, j, k ) ; } 7 1 4 2 4 3 4 4 4 21 5 4

add_to_n Program /* Find triples of integers that add up to N. */ #include <stdio.h> #define N 7 int main(void) { int cnt = 0, i, j, k, n; for ( i = 0; i <= N; ++i ) for( j = 0; j <= N; ++j ) for ( k = 0; k <= N; ++k ) if ( i + j + k == N ) { ++cnt; printf("%3d%3d%3d\n", i, j, k); } printf( "\nCount: %d\n", cnt ); return 0; } 0 0 7 0 1 6 0 2 5 0 3 4 … 5 0 2 5 1 1 6 1 0 7 0 0 Count : 36

수고하셨습니다. Flow of Control