1절 조선분기 제어문
1. if문
1) 단순 if문
(1) 조건식
o 조건식의 결과 논리값이 참(true)이면 종속문장 실행, 거짓(false)이면 ifans을 빠져 나와 다음문장 실행
(2) 복합문
o 조선식이 참일 때 실행할 문장이 두 개 이상일 경우 { } 사용해 문장을 하나로 묶어줌
o { } : 블록!
2) if ~ else문
u 두 문장 중 하나를 선택하여 처리할 경우 사용
(1) 조건식
o if문의 조건이 참이면 종속문장 1 실행한 후 if문 빠져나오고, 거짓이면 else로 이동해 종속문장 2 실행하고 if문 종료
o 조건식의 결과에 따라 종속문장1, 종속문장2 중 하나를 선택적으로 실행
(2) 주의사항
o 조건식 뒤에 ; 붙이지 않음
o else 뒤에 조건식 단독으로 사용할 수 없음
3) 중첩된 if문
u if문 안에 또 다른 if문 포함시키는 것
(1) 조건식
o 마지막 else 뒤의 문장 n은 조건식1 ~ 조건식n-1이 모두 거짓인 경우에 실행
(2) 주의사항
o 중첩된 if문이 else와 짝이 맞지 않을 때 해석 상 문제 발생
o 사용 범위를 명확하게 표시하기 위해 { }로 표시
2. switch문
n 중첩된 if문 사용하면 프로그램이 복잡해지고 이해하기 힘들…ㅇㅇ
n 다중 분기문 : switch문은 조건식 값에 따라 여러 종류 중 한 가지만 선택해 실행할 때 많이 사용됨
n 1개 이상의 case문과 default문으로 구성됨
n 여러 case문 중 조건식의 결과 값이 일치하는 case를 찾아서 그 뒤에 나오는 문장들 실행
1) switch문의 형식과 실행 흐름
(1) 조건식
o 조건식의 결과 값은 반드시 정수여야 함
è 논리식은 결과가 참일 때 정수 1, 거짓일 때 정수 0으로 변환
o ASCII 코드 값이 정수형이므로 문자인 수식도 결과 값으로 사용 가능
(2) case문
o case문에 명시하는 값은 반드시 정수형 상수 한 개만 가능
o 변수를 포함한 수식은 가능한데 상수끼리의 수식은 불가능
o 문자상수 가능
o case문 뒤 문장에 일반적으로 break문 가짐(switch문 종료)
(3) 실행의 흐름
o switch문은 조건식을 평가한 결과 값이 case문의 값을 차례대로 비교해 같은 값을 가진 case문 뒤의 문장을 실행
그 후 break문 만나면 switch문 빠져나옴
(4) default문
o 조건식 결과 값과 case 뒤의 값을 비교하여 일치하는 값을 찾지 못하면 default문 뒤의 내용 실행
o 불필요하면 생략 가능
o default문이 case문 중간에 위치하면 default문 뒤의 내용을 실행한 다음 뒤의 case문 계속 실행
2) 주의사항
(1) switch문에서 break문을 생략할 경우
o 실행문장 뒤에 break문 없으면 그 뒤 case문과 상관없이 다음 문장을 계속 실행해 모든 문장 실행한 후 switch문을 빠져 나옴
(2) 여러 결과 값에 따라 동일한 코드를 처리할 경우
o break를 사용하지 않음으로써 조건식의 여러 결과 값에 따라 동일 코드 처리 가능
case 1 : case 2 : 실행문 casel 3 : case 4 : 실행문 |
case 1, 2 : <- 이렇게는 안됨 |
2절 반복 제어문
l 동일한 내용을 특정횟수만큼 반복하여 처리할 때 사용
l Loop 루프라고도 함
l 반복문 작성할 때는 먼저 어떤 내용을 반복해야 하는지부터 분석해야 함!
1. for문
n for문은 반복횟수가 분명할 때 사용
1) for문의 형식과 실행 흐름
(1) for문 헤더
o for문의 첫 행
o 세 부분으로 나뉘고 반드시 ;로 구분
① 초기식 : 반복 루프가 시작될 때 한 번만 실행. 루프 반복을 제어하는 제어변수 초기화하는 용도로 사용. 제어변수도 변수를 먼저 선언해야 함.
② 조건식 : 조건식의 결과 값이 참이면 for문의 본체를 실행, 거짓이면 본체를 실행하지 않음
③ 증감식 : 제어변수를 증가시키거나 감소시키는데 사용. for문의 본체를 실행하면 실행 순서가 증감식으로 이동
- 증감식 실행 한 후에는 언제나 조건식 부분으로 이동
- 증감식의 실행으로 제어변수의 값이 변경되어 조건식의 결과 값이 거짓이 되면 반복이 끝남
(2) for문 본체
o 본체의 마지막 문장을 실행하면 언제나 헤더의 증감식으로 돌아감
(3) 주의사항
o for문의 헤더 뒤에 처리문장 없이 ;로만 구성된 문장(null문장)
- for문의 헤더 부분만 반복 -> 결국 1번만 실행됨
- int i;
for(i = 1; i <= 5; i++) ; <- 요걸로 끝
o for문의 헤더에서 초기식, 조건식, 증감식을 구분하기 위해 ; 써야 함
2) 다양한 for문의 헤더
(1) 초기식에서 콤마 연산자를 이용하는 여러 문장 사용 가능, 증감식도 다양하게 사용 가능
o 초기화를 하는 식이니 다양한 변수를 초기화 할 수 있다
o int i, sum;
for(sum = 0, i = 1 ; i <=10 ; i++) { } // 뭐 이렇게
for(i = 9 ; i > 0 ; i--, sum++) {} // 이렇게도 ok
(2) for문의 조건식에서는 논리연산자를 이용해 여러 조건 결합 가능
o int i, sum, n;
for(sum = 0, i = 1; i <= 5 && sum <= 10; i++) sum += i ; // 이런 식
(3) 초기식, 조건식, 증감식을 모두 생략할 수 있음
o 무조건 for문의 본체를 실행함. 무한반복!
o 본체 안에서 for문 탈출하는 방법을 반드시 포함시켜야 함
break문을 쓰는 것 같이
3) 중첩된 for문
(1) 형식과 실행 흐름
o 반복문 안에 또 다른 반복문이 포함된 것
o 각 반복문의 제어변수가 달라야 함
(2) 중첩된 for문에서 제어변수의 활용
o 중첩된 for문에서 안쪽으로 중첩되는 for문들은 자신보다 밖에 있는 for문의 제어변수들을 많이 활용함
int line, star; for(line = 1; line <= 5; line++){ for(star=1; star <= line; star ++){} } |
for의 반복 횟수를 고정시키지 않고 외부 for문의 제어변수로 지정 -> 외부 제어변수가 증가할 때 내부 제어변수 반복 횟수가 같이 증가함 |
2. while문
n while문은 반복횟수는 정확히 모르며 특정 조건을 만족하는 한 반복할 때 사용
1) while문과 for문의 비교
u while문 이전에 제어변수가 초기화되고 while문의 본체가 끝나기 전에 제어변수의 증감식이 포함됨
2) while문과 무한루프
u while문에서 무한루프를 만들려면 조건식이 항상 참이면 됨
u 보통 조건식으로 1을 넣으면 됨
u 반복을 끝내고 while문 탈출할 수 있도록 break문을 이용하는 경우가 많음
3. do ~ while
n do ~ while문은 반복횟수는 정확히 모르지만 무조건 한 번은 반복한 후 특정 조건을 만족하는 한 반복이 필요할 때 사용
1) do ~ while문의 형식과 실행 흐름
(1) 형식과 실행 흐름
o do문 뒤에 조건식이 없으므로 무조건 본체를 실행함. 본체를 실행한 후 while 뒤의 조건식을 검사해 참이면 다시 본체를 실행하고 거짓이면 do ~ while문을 탈출함
2) do ~ while문의 본체
u 반복할 문장이 하나뿐이더라도 반드시 { }로 묶어야 함
u 본체가 끝난 후 while(조건식)을 붙임
u 마지막은 ;로 끝남
3절 기타 제어문
1. break문
n switch문, while문, do ~ while문을 실행하는 중간에 완전히 탈출할 때 사용
n break문 사용 시 주의 사항
u 개수에는 제한이 없음. 많이 쓰면 코드 복잡해짐
u 중첩된 루프인 경우 내부 루프에서 break문 사용하면 break문이 속한 내부루프만 탈출
u if문 탈출은 안됨
u break문은 반복문과 switch문에서만 사용.
2. continue문
u continue문의 다음 내용만 실행하지 않은 채 다음 반복으로 진행하기 위해 루프의 시작이나 끝으로 이동
u continue를 만나면
o for문 : 무조건 헤더의 증감식으로 이동
o while문 : 헤더의 조건식으로 이동
o do ~ while문 : 맨 끝 while 뒤의 조건식으로 이동
3. goto문
n 프로그램 실행 중 레이블이 붙은 위치로 제어를 무조건 이동시킴
n 문장을 가리키는 레이블이 필요
n 레이블 구별하기 위한 이름과 콜론( : )이 필요
1) goto문의 주의사항
u 중첩된 반복 루프에서 문제가 발생하였을 때 중첩된 루프를 단번에 빠져나올 수 있어 유용
u C언어의 레이블 (세 가지)
o switch ~ case문의 case 레이블, default 레이블
o goto 레이블
u 레이블 이름은 작명규칙 준수, 레이블 이름 뒤에는 반드시 콜론
u goto문은 switch문의 레이블에 갈 수 없고 해당 레이블 이름 있는 곳으로만 이동
'[시험] 독학사 2020 전공기초' 카테고리의 다른 글
[독학사][C프로그래밍] 06 배열과 포인터 (0) | 2020.04.28 |
---|---|
[독학사][C프로그래밍] 05 함수와 기억클래스 (0) | 2020.04.28 |
[독학사][C프로그래밍] 03 입 ∙ 출력함수와 연산자 (0) | 2020.04.28 |
[독학사][C프로그래밍] 02 자료형과 선행처리기 (0) | 2020.04.28 |
[독학사][C프로그래밍] 01 C언어의 개요 (0) | 2020.04.28 |