공부했던 자료 정리하는 용도입니다.
재배포, 수정하지 마세요.
[Java] 조건문과 반복문 : https://pridiot.tistory.com/23?category=869931 |
Java의 문법과 크게 다르지 않아 간략하게 정리했다.
조건문
- if문
* if-else문
* if, else-if, else - 삼항 연산자(조건 연산자)
- switch 문
* case문에서의 변수 선언
반복문
- while문
* 중첩 while문
* 무한루프 - do-while문
- for문
* 중첩 for문
* 무한루프
제어문
- break 문
- continue 문
- goto 문
* 중괄호 { } 생략
조건문이나 반복문에서 실행할 문장이 하나라면 중괄호는 생략 가능하다.
단락 평가(short-circuit evalution) : 첫 번째 값만으로 결과가 확실할 때 두 번째 값은 확인(평가) 하지 않는 방법
ex1) AND 연산자는 두 값이 모두 참이어야 참이 되므로 첫 번째 값이 거짓이면 뒤의 값은 확인하지 않고 바로 거짓으로 결정됨.
ex2) OR 연산자는 두 값 중 하나만 참이면 참이 되므로 첫 번째 값이 참이면 뒤의 값은 확인하지 않고 바로 참으로 결정됨.
조건문
if문
if(조건식)
{
//조건식이 true일 때 수행될 문장
}
조건식을 만족하면 괄호 안의 문장들을 실행시킨다.
■ if-else문
if(조건식)
{
// if의 조건식이 true일 때 수행되는 문장
}
else
{
// if의 조건식이 false일 때 수행되는 문장
}
``else``는 독립적으로 사용되는 것이 아니라 ``if``와 같이 하나의 문장을 구성하는 형태로 사용된다.
조건식이 참일 경우 ``if``에 중괄호로 묶여있는 블록이 실행되고, 조건식이 거짓일 경우 ``else``에 묶여있는 블록이 실행된다.
■ if, else-if, else
if(조건 1)
{
// 조건1이 true일 때 수행되는 문장
}
else if(조건 2)
{
// 조건1이 false이고 조건 2가 true일 때 수행되는 문장
}
else
{
// 조건들이 모두 false일 때 수행되는 문장
}
셋 이상의 블록 중 하나를 선택해서 실행하는 구조이다. 중간에 ``else if``문을 추가해서 분기를 늘릴 수 있다. (@@if-else@@를 @@else@@블록을 대상으로 중첩시킨 형태이기 때문에) 하나라도 조건이 만족되어 해당 블록을 실행하고 나면, 마지막에 있는 @@else@@까지 그냥 건너뛴다.
삼항 연산자(조건 연산자)
(조건식) ? (조건식이 true일 때 실행할 문장) : (조건식이 false일 때 실행할 문장);
//ex) 아래와 같은 경우 대입 연산자보다 조건 연산자인 삼항연산자의 순위가 높아 먼저 진행된다.
int num3 = (num1 > num2) ? (num1) : (num2);
삼항 연산자(조건 연산자)는 간단한 ``if-else``문을 대신할 수 있는 연산자이다.
switch 문
switch(변수)
{
case [값1]:
// 변수가 값1일 때 실행할 문장
break;
case [값2]:
// 변수가 값2일 때 실행할 문장
break;
...
default:
// 변수가 모든 case값에 해당하지 않을때 실행할 문장
break;
}
if, else-if, else문과 기능이 비슷하다. 조건에 따라 다른데 보통 분기가 많아지면 사용한다.
- switch에서 판별할 변수는 정수와 문자 자료형만 가능하다. (실수 자료형이나 문자열은 사용 불가)
- case를 ``break``로 중단하지 않으면 그다음에 있는 ``case``, ``default``가 계속 실행된다. (이런 상황을 fall through라고 부른다.)
- 변수 : ``switch``문으로 전달되는 인자의 정보. 변수의 값에 따라 실행할 영역이 결정된다.
(정수형이나 @@char@@형 변수여야 함. 대표적으로 @@int@@형 변수) - case 문 : 변수의 값에 따라 실행할 영역. 끝에 콜론( : )을 붙여야 한다.
위치를 표시하는 데 사용되어 레이블(label)이라고 한다. - break 문(선택) : 사용하면 ``case``문을 벗어난다. (없을 경우 다음 @@case@@까지 계속해서 실행됨)
- default 레이블(선택) : 일치하는 ``case`` 레이블이 없을 경우에 실행되는 영역
■ case에서의 변수 선언
중괄호{ }로 묶고, 그 안에서 변수를 선언하면 된다. 선언된 변수는 해당 case문에서만 사용할 수 있고 중괄호를 벗어나면 사용할 수 없다.
반복문
while문
while(조건식) // 루프 선언문(loop statement)
{ // 루프 본체(loop body)및 변화식
// 조건식의 연산결과가 참(true)인 동안 반복될 문장
}
``while``문은 조건식을 만족하는 동안 괄호 안의 문장을 반복 실행하는 구조이다.
■ 중첩 while문
#include<stdio.h>
int main(void)
{
int dan = 2, num = 1;
while(num <= 9)
{
dan = 2;
while(dan <= 9)
{
printf("%d x %d = %d \t", dan, num, dan*num);
dan++;
}
num++;
printf("\n");
}
return 0;
}
``while``문 안에 ``while``문을 사용할 수 있다.
■ 무한루프
while(1)
{
printf("%d x %d = %d \n", dan, num, dan*num);
num++;
}
반복 조건에 ``0``이 아닌 값(참을 의미하는 값)이 올 경우 (보통 위의 코드처럼 ##1##을 넣는다.) 조건문이 항상 참이 되어 무한루프가 된다. ``break``문을 통해 반복문을 빠져나갈 수 있다.
do-while문
#include<stdio.h>
int main(void){
int total = 0, num = 0;
do
{
printf("정수 입력(0 to quit) : ");
scanf("%d", &num);
total += num;
}while(num != 0);
printf("합계 : %d \n", total);
return 0;
}
``do-while``문은 ``while``문과 달리 반복 조건을 뒷부분에서 검사하기 때문에 처음부터 반복 조건을 만족하지 못하면 한 번도 실행하지 않는 ``while``문과 달리, 반복문을 최소한 한 번 이상 실행하는 구조이다.
- break : ``for``, ``while``, ``do-while``, ``switch``문에서 제어 흐름(반복)을 벗어나기 위해 사용한다.
- continue : ``break``와 비슷하지만 다르다. ``break``는 제어 흐름(반복)을 중단하고 빠져나오는 반면, ``continue``는 제어 흐름(반복)을 유지한 상태에서 코드의 실행만 건너뛴다.
- goto : 다중 루프를 빠져나올 때 사용되기도 한다.
for문
for(초기식 ; 조건식 ; 증감식) // 루프 선언문(loop statement)
{ // 루프 본체(loop body)
// 반복의 대상이 되는 문장들
}
``for``문도 ``while``문처럼 반복 작업을 수행하는 반복문이다. 초기식과 조건식, 증감식은 선택사항으로 필요하지 않다면 비워도 된다. 반복 횟수가 정해진 경우에는 ``for``문을 사용하고 그렇지 않은 경우 ``while``문을 주로 사용한다.
■ 중첩 for문
#include<stdio.h>
int main(void)
{
int i, j;
for(i = 1 ; i <= 9 ; i++)
{
for(j = 2 ; j <= 9 ; j++)
{
printf("%d x %d = %d\t", j, i, i*j);
}
printf("\n");
}
return 0;
}
■ 무한루프
for(;;)
{
...
}
``for``문에서 조건식이 비워지면 무조건 '참'으로 인식되어 무한루프가 된다.
제어문
break문
``break``문이 실행되면 ``break``문을 가장 가까이 감싸고 있는 반복문 하나를 빠져나오게 된다.
continue 문
반복문안에서 ``continue``를 실행하면 실행 중인 위치에 상관없이 반복문의 조건 검사 위치로 이동한다. (``continue`` 이후는 생략) 검사 결과 반복 조건이 여전히 '참'이면 반복 영역을 다시 실행한다.
goto 문
프로그램의 흐름을 원하는 위치로 이동시킬 때 사용한다.
'기타 > C' 카테고리의 다른 글
[C] 배열 (1차원 배열, 다차원 배열, 가변 길이 배열) (1) | 2020.04.28 |
---|---|
[C] 함수 (0) | 2020.04.27 |
[C] printf, scanf 함수 (0) | 2020.04.09 |
[C] 자료형 변환 (0) | 2020.04.08 |
[C] 데이터 표현 방식, 기본 자료형과 상수 (0) | 2020.04.07 |