430 likes | 669 Views
C Programming Review. 제어문 함수 배열. 목차. 제어문 개념 선택문 if 문 관계 및 논리 연산자 if – else if – else if - else if 실습 예제 반복문 while 문 증감 (++, --) 및 대입 (+=, -= … ) 연산자 for 문 do-while 문 반복문 실습 문제들. 제어문 이란 ?. 순차적으로 실행되는 프로그램의 순서를 변경하고자 할 때 사용되는 문장을 제어문이라 한다 . 프로그램 작성 논리의 중요한 부분
E N D
C Programming Review 제어문 함수 배열
목차 • 제어문 개념 • 선택문 • if 문 • 관계 및 논리 연산자 • if – else • if – else if - else • if 실습 예제 • 반복문 • while 문 • 증감 (++, --) 및 대입 (+=, -= …) 연산자 • for 문 • do-while 문 • 반복문 실습 문제들 C-Program I Review
제어문 이란? • 순차적으로 실행되는 프로그램의 순서를 변경하고자 할 때 사용되는 문장을 제어문이라 한다. • 프로그램 작성 논리의 중요한 부분 • 제어문의 종류 C-Program I Review
if 문 형식 및 의미 • 형식: • if (조건식) 문장; • if (조건식) { 문장1; 문장2; .. } • {, } 은 제어문의 유효범위를 표시, 없으면 제어문 다음의 한 문장만 유효 범위가 된다. • 주어진 조건에 따라 문장을 수행 • 선택적으로 else, else if 등과 함께 사용될 수 있음 C-Program I Review
if 문 형식 및 의미(계속) • 조건식 • 참/거짓 으로 판명될 수 있는 문장(관계 및 논리 연산자) • 실제 C 언어에서 참/거짓은 정수(1/0)등으로 계산 • 판별 시는 0(거짓), 0이외의 값(참), 연산 시에는 0(거짓), 1(참) • 조건식 예 • if( i > 0) : i 가 0 보다 크면 참(1), 그렇지 않으면 거짓(0) • if( i > 0 && i <10) : i 가 0보다 크고 10 보다 작으면 참(1) • if( i ) : i 가 0 이면 거짓, 그 외의 값은 모두 참 • if 문 예 int num; scanf(“%d”,&num); if (num<0) printf(“\n number is negative”); if (num>-1) printf(“\n number is not negative”); C-Program I Review
관계 연산자 • 크다 작다를 판정하여 참/거짓(1/0)값을 되돌려 줌. • 제어문 등의 조건식에 주로 사용됨. • 우선 순위는 산술 연산자 보다 낮다. • 연산자 종류 연산자 내용 ----------------------------------------------------------- < 작다(less than) <= 작거나 같다(less than or equal to) > 크다(greater than) >= 크거나 같다(greater than or equal to) == 같다(equal to) != 같지 않다(not equal to) ----------------------------------------------------------- • 사용 예 if( x < y ) ..... while( x >= y ) .... if( x == y ).... C-Program I Review
논리 연산자 • 논리적 곱/합 등을 나타내며 그 결과는 관계 연산자와 같이 참/거짓(1/0)를 되돌려 줌. • 우선 순위는 산술, 관계연산자 보다 낮다. • 연산자 종류 연산자 내용 ---------------------------------------------------- && AND(둘 다 참일 경우만 참) || OR(둘 중 하나만 참이면 참) ! NOT(참은 거짓으로, 거짓은 참으로) --------------------------------------------------- • 사용 예 if( x>y || y!=z ) .... if( !(x>0) ) ... if( x>2 && y>10 ) ... if( !x ) C-Program I Review
관계/논리 연산 결과 • 다음의 문장의 결과는? • 예제 • int a,b; • a = 1 > 2; • b = 2 > 1; • if (a) • printf(“\n %d”, a); • else • printf(“\n %d”, b); • if (!1) • printf(“\n %d”, a+b); • 관계/논리 연산자결과 • 참 : 1 • 거짓: 0 • 관계/논리 연산자 판별 • 0이 아닌 모든 값: 참 • 0 : 거짓 C-Program I Review
if – else 문장 • 형식 • if(조건식) 문장 1; else 문장 2; • if(조건식) { 문장들 } else { 문장들 } • 예제 • int num; • scanf(“%d”,&num); • if (num<0) • printf(“\n number is negative”); • else • printf(“\n number is not negative”); C-Program I Review
if - else if – else 문장 • 형식 if(조건식 1) { 문장들 } else if (조건식 2) { 문장들 } else if (조건식 3) { 문장들 } else { 문장들 } • 예제 • int num; • scanf(“%d”,&num); • if (num<0) • printf(“\n number is negative”); • else if (num==0) • printf(“\n number is 0”); • else • printf(“\n number is positive”); C-Program I Review
참고사항 • if 문만 사용도 가능하고, if-else 문만 사용도 가능하며, if-else if 문만 사용도 가능하다. • 즉 어떤 조합도 상관없다. • if 문 등의 조건에 해당되는 문장이 하나일 경우에는 {, } 을 사용할 필요가 없으며, 조건에 해당되는 문장이 둘 이상일 경우에는 {, }을 사용하여 그 유효 범위를 정확히 지정해야 한다. • 들여쓰기 및 의미 있는 변수 명 쓰기(좋은 습관) • 들여쓰기 할 경우 무조건 [Tab] 사용 ([Space bar] 쓰지 말 것!! ) • 변수를 선언할 때 자신의 기능에 따라 의미 있는 이름을 붙이는 습관을 들일 것(나중에 좀 큰 프로그램을 작성할 경우, 판독성이 높아지고, 변수의 잘못된 사용을 막을 수 있다.) • 예) 합계을 계산하는 변수 => sum total C-Program I Review
if문 관련 예제 • 예제 1 : 두 수(정수)를 입력 받아, 그 중 큰 수를 출력하는 프로그램을 작성하시오. #include <stdio.h> int main(void) { int a, b; printf(“\n Enter two number: “); scanf(“%d%d”,&a,&b); if (a>b) printf(“\n %d”, a); else printf(“\n %d”, b); return 0; } C-Program I Review
예제 2: 하나의 정수를 입력 받아 이 수가 짝수(even number) 인지 홀수(odd number)인지를 출력하는 프로그램을 작성하시오. #include <stdio.h> int main(void) { int in; printf(“\n\n Input Number :”); scanf(“%d”, &in); if ( in%2 == 0) printf(“\n This is Even number !!”); else printf(“\n This is Odd number !!); return 0; } C-Program I Review
실습 문제 • 예제1: 년도를 입력하면 윤년인지 평년인지를 판단하는 프로그램을 작성하시오. • 예제2: 영문자 하나를 입력 받아, 이 문자가 소문자이면 대문자로, 대문자이면 소문자로 변환하여 출력하는 프로그램을 작성하시오. 그리고 입력한 문자가 영문자가 아닐 경우에는 변환할 수 없는 문자라는 에러 메시지를 출력하시오 Hint: 년도를 4로 나누어 나머지가 0이고,100으로 나누었을 때나머지가 0이 아니면 윤년, 단 예외로 100으로 나누었을 때 나머지가 0이라도 400으로 나누었을 때 나머지가 0이면 윤년이됨 Hint: 영문자 ‘a’는 ASCII 코드로 97, 대문자 ‘A’는 ASCII 코드로 65이며, 각 영문자들은 연속적 ASCII 코드 값이 할당됨(‘b’는 98, ‘B’는 66으로 …) C-Program I Review
while 문 • 조건에 따라 특정 문장(들)을 일정 횟수 동안 반복하여 실행하고자 할 때 사용 • 형식 while(조건식) { 문장1; 문장2; …… } • 먼저 조건을 검사하여 거짓이면 while 문 탈출, 참이면 문장을 실행하고 다시 조건 검사, (이렇게 계속 반복) C-Program I Review
while문 예제 1 • 1부터 10까지 연속 출력하는 예제 #include <stdio.h> int main(void) { int count; count = 1; /* 초기 인덱스 설정 */ while (count <= 10) /* 조건식 */ { printf(“ %d ”, count); count = count + 1; /* 조건 탈출을 위한 증가식 */ } return 0; } C-Program I Review
while문 예제 2 • 10개의 정수를 입력 받아 그 총합을 출력하는 프로그램. #include <stdio.h> int main(void) { int num, sum, count; count=1; sum=0; while (count <= 10) { scanf(“%d”, &num); sum = sum+num; count = count+1; } printf(“\n Sum = %d”, sum); return 0; } C-Program I Review
while문 실습 • 1부터 100사이의 숫자(정수) 중에서 3의 배수(3,6,9,12,..)들의 총합을 출력하는 프로그램을 작성하시오. C-Program I Review
증감 연산자.(++, --) • 단항 연산자로서 하나의 변수 값을 1 증가, 감소할 때 사용된다. • 형식 • ++ : 변수의 값을 1 증가. num++; ++count; • -- : 변수의 값을 1 감소. num--; --count; #include <stdio.h> int main(void) { int count; count = 1; while (count <= 10) { printf(“ %d ”, count); count++; } return 0; } C-Program I Review
대입 연산자(+=, -=, *= ...) • 변수의 현재 값에 누적한 계산을 수행 • 종류 += -= *= /= • 형식 및 정의 a += b; => a = a + b; a -= b; => a = a - b; a *= b; => a = a * b; a /= b; => a = a / b; C-Program I Review
대입 연산자 예제 #include <stdio.h> int main(void) { int num, sum, count; count=1; sum=0; while (count <= 10) { scanf(“%d”, &num); sum += num; count += 1; } printf(“\n Sum = %d”, sum); return 0; } C-Program I Review
for 문 • 형식 for( 초기화; 반복조건; 증감식 ) { 문장; 문장; .. } • 초기화: for문 진입 시 단 한번만 수행 • 반복조건: for문 반복 시마다 반복 조건을 검사 • 증감식: for문 한번의 반복이 끝날 때마다 증감식 수행 • 각 문장(초기화, 반복 조건, 증감식)들은 경우에 따라 생략 가능하다. C-Program I Review
for문 예제 #include <stdio.h> int main(void) { int count; for (count=1; count<=10; count++) printf(“ %d ”, count); return 0; } #include <stdio.h> int main(void) { int num, sum, count; sum=0; for (count=1; count <= 10; count++) { scanf(“%d”, &num); sum += num; } printf(“\n Sum = %d”, sum); return 0; } C-Program I Review
for문 실습 • 1부터 100사이의 숫자(정수) 중에서 3의 배수(3,6,9,12,..)들의 총합을 출력하는 프로그램을 작성하시오.(for문) • 어떤 양의 정수(n)를 입력 받아, 그 수의 2n을 구하는 프로그램을 작성하시오. C-Program I Review
do-while 문 • 형식 do { 문장1; 문장2; …… } while(조건식); • while문과 거의 동일하게 조건에 따라 반복하는 문장을 수행 • 반복할 문장을 수행한 후, 조건을 검사하여 거짓이면 do-while 문 탈출, 참이면 문장을 다시 반복하고 조건 검사, (이렇게 계속 반복) • while과 다르게 적어도 한 번 이상은 문장들을 수행 • while(조건식); -> 세미콜론 주의 할 것 C-Program I Review
do-while 문 예제 #include <stdio.h> int main(void) { int count; count = 1; do { printf(“ %d ”, count); count++; } while (count <= 10); return 0; } #include <stdio.h> int main(void) { int num, sum, count; count=1; sum=0; do { scanf(“%d”, &num); sum += num; count++; } while (count <= 10); printf(“\n Sum = %d”, sum); return 0; } C-Program I Review
입력의 유효성 검사 • do-while 문은 사용자 입력을 걸러내고 데이터 유효성 검사를 제공하는 데 유용 • do-while 문을 이용한 유효성 검사의 예 • ……… • do • { • printf(“\n Enter a score(0 ~ 99) : “); • scanf(“%d”, &score); • } while (score < 0 || score > 99); • ………… C-Program I Review
do-while 실습 • 1부터 100사이의 숫자(정수) 중에서 3의 배수(3,6,9,12,..)들의 총합을 출력하는 프로그램을 작성하시오.(do-while문) • 0이 입력될 때까지 계속 정수를 입력 받고, 입력된 모든 숫자들의 총합을 출력하시오. C-Program I Review
반복문 비교(while, do-while) #include <stdio.h> int main(void) { int sum, count; count=1; sum=0; while (count <= 100) { sum += count; count++; } printf(“\n Sum = %d”, sum); return 0; } #include <stdio.h> int main(void) { int sum, count; count=1; sum=0; do { sum += count; count++; } while (count <= 100); printf(“\n Sum = %d”, sum); return 0; } C-Program I Review
반복문 비교(for) #include <stdio.h> int main(void) { int sum, count; sum=0; for (count=1; count <= 100; count++) sum += count; printf(“\n Sum = %d”, sum); return 0; } C-Program I Review
반복문의 선택 • C언어에서 for 문과 while 문은 동등하기 때문에 서로 바꿔 쓸 수 있다 • 주 종목 • for 문은 주로 고정 카운트 반복에 쓰이고 (반복 횟수가 고정된 경우) • while 문은 주로 변수 조건 반복에 쓰인다(반복 횟수가 가변적인 경우) • do-while은 while문과 흡사하나, 앞의 설명과 같이 입력의 유효성 등을 검사할 때 널리 사용된다. • 일반적으로 for문의 사용 빈도가 제일 높고, do-while문의 사용 빈도가 제일 낮다. C-Program I Review
switch 문 • 다중 선택문으로서 if, else if 문장을 여러 번 사용하는 것 대신 간단히 문장을 구성할 수 있다. • 형식 switch( 변수[수식] ) { case 값1 : 문장1; break; case 값2 : 문장2; break; : default : 문장 n; } ==> if( 조건==값1 ) 문장 1; else if( 조건==값2 ) 문장 2; else if( 조건==값3 ) 문장 3; : else 문장 n; C Program-I Review
switch문(계속) • break 문은 전체 switch 문을 탈출하는 용도로 사용된다. • 주의 사항 • switch문은 하나의 변수(수식) 값이 일치하는 경우의 문장을 수행한다. • if ~ else if 처럼 관계 연산자에 의한 조건을 지정하는 것이 아니다. • break 문을 잊어버리지 않도록 주의 할 것. • break문이 없으면 그 아래 문장을 순차적으로 실행하게 됨. C Program-I Review
switch문 예제 1 int i, j, choice, result; scanf(“%d %d”, &i, &j); printf(“input 1) add 2) subtract 3) multiply 4) divide”); scanf(“%d”, &choice); switch(choice) { case 1: result = i+j; break; case 2: result = i-j; break; case 3: result = i*j; break; case 4: result = i/j; break; default: printf(“\n input error”); } printf(“\n result = %d”, result); C Program-I Review
switch문 예제 2 char ch; printf(“\n Input character :”); scanf(“%c”, &ch); switch(ch) { case ‘a’: /* 여러 case문이 코드를 공유할 수 있음 */ case ‘e’: case ‘i’: case ‘o’: case ‘u’: case ‘y’: printf(“\n is a vowel.”); break; default: printf(“\n is a consonant.”); } C Program-I Review
break 문 • switch, do-while, while, for와 같은 반복/제어 문 내에서 사용되며, 그 반복 블록을 무조건 탈출한다. • 반복을 탈출하여 반복 문 뒤의 문장을 수행하게 함. • 중첩 반복 문 일 경우에는 가장 안쪽의 블록을 탈출한다. C Program-I Review
break 예제 1 #include <stdio.h> int main(void) { int i; for(i=1; i<100; i++) { printf(“%d”, i); if ( i==10) break; } return 0; } C Program-I Review
break 예제2 (무한 반복문과 사용) #include <stdio.h> int main(void) { int sum=0, i; for(; ;) /* 무한 반복 while(1)과 동일 */ { scanf(“%d”, &i); sum += i; if ( i==0) break; } printf(“\n Sum = %d”, sum); return 0; } C Program-I Review
break 예제3 #include <stdio.h> int main(void) { int i, j; for(i=1; i<=5; i++) { for(j=1; j<=100; j++) { printf (“%d %d”, i, j); if ( j==5) break; } printf(“\n”); } return 0; } C Program-I Review
continue 문 • 반복 제어문 중간에서 나머지 반복문 코드를 무시하고 반복제어문의 처음(조건 검사문)으로 제어를 변경시켜준다. /* 수행 결과는 ? */ #include <stdio.h> int main() { int s=0, i; for(i=1; i<=10; i++) { if( i % 2 ) continue; s += i; } printf(“\n sum = %d", s); return 0; } C Program-I Review
goto 문 • goto label; 이 문장을 만나면 무조건 label이 있는 곳으로 분기한다. • 프로그램 상의 심각한 오류가 발생했을 경우, 여러 중첩문을 한꺼번에 탈출할 때 사용할 수 있다. • 최대한 사용하지 않는 것이 좋다.(프로그램의 판독성을 저해한다.) C Program-I Review
goto 문 예제 #include <stdio.h> int main(void) { int sum=0, i; i = 1; again : sum += i++; if ( i <= 10) goto again; printf(“\n Sum = %d”, sum); return 0; } C Program-I Review
실습 문제 • 1부터 9사이의 숫자 하나를 입력 받아 그 숫자의 구구단을 출력하는 프로그램을 작성하시오.(5이면 5단을 출력) • 위의 문제에서 1부터 9사이 이외의 숫자를 사용자가 잘못 입력할 수도 있으니, 이 경우에 잘못된 숫자라는 것을 알려주고 다시 숫자를 입력 받도록 수정하시오.(입력의 유효성 검사) • 사용자가 입력한 수의 약수들을 모두 출력(1과 자신은 제외)하는 프로그램을 작성하시오. • 8 => 2 4 • 12 => 2 4 6 • 위의 문제를 0을 입력하기 전까지는 계속 수행하도록 수정하시오. C-Program I Review