4/12 제어문 - 조건문과 반복문
제어문이란?
프로그램에서 순차적인 흐름을 통제하는 방법이다
코드는 위에서부터 아래로 순차적으로 진행되게 되는데 그 순서를 조절할 수 있도록 하는 코드인 것이다
조건문
특정 조건에 따라서 실행문을 실행 할지 안 할지 제어. if 와 switch 가 있다
1. if 문
if 의 조건이 참이면 실행, 거짓이면 종료한다
거짓일 때 다른 종류를 실행시키고 싶다면 else if 를 사용하며 이마저도 참이 아니면 else 를 사용하여 작동시킬 수 있다
else 는 혼자서는 실행 할 수 없고 앞에 if 문이 있어야한다
if (조건식)
{
실행문1;
}
else if (조건식 2)
{
실행문2;
}
else
{
실행문3;
}
-조건문 if 실습
정수를 하나 입력받아서 입력받은 숫자가 10보다 크면 "입력된 숫자가 10보다 큽니다." 출력
10이하 9초과 라면 "9보다 큽니다." 출력
9이하 6초과 라면 "6보다 큽니다." 출력
그 이외에는 "6보다 작거나 같습니다." 출력
위의 조건에 맞는 큰 수들이 걸러져서 오기때문에 아래 코드는 큰 수를 제외하고 생각해도 된다.
ex) 세번째줄 else if 같은 경우 (6 < entered_number) 으로 설정해도 된다
- 10 이상의 숫자는 앞의 if 와 두번째줄 else if에서 걸러지기 때문
if 문의 조건문에는 ;(세미콜론)을 붙이지 않는다 - 실행이 끝나버리기 때문
오늘의 오류
세번째줄 else if 문을 작성할 때 (6 < entered_number <= 9) 라고 작성
6보다 작은수를 넣어도 세번째 else if 문이 자꾸 출력 됨
why? 연산자 우선순위 때문
(6 < entered_number <= 9) 는 사실상 ((6 < entered_number) <= 9) 이기 때문에
6 < entered_number이 먼저 계산되어 참 / 거짓으로 인해 0또는 1로 출력, 그 뒤 0 <= 9 를 비교
- 정상적인 실행문이 작동되지 않는다
2. switch 문
switch (정수형 변수)
{
case 정수1:
실행문1;
break;
case 정수2:
실행문2;
break;
case 정수3:
실행문3;
break;
default:
실행문4;
break;
}
default 는 해당하는 정수값이 없을때를 나타낸다
break는 실행문을 멈춰주는 역할. 만약 case1에 break를 쓰지않았다면 case2의 실행문까지 출력된다
-조건문 switch 실습
실행시 당신의 고향은 어디입니까?
1. 서울 2. 양평 3. 광주 4. 대전 5. 제주 를 출력
값을 입력받고 값에 따라서 "안녕하세요. 당신의 고향은 __이군요." 출력
default는 5개 중에 선택해 주세요. 출력
반복문
특정 조건에 따라서 실행문을 일정 횟수만큼 반복 실행 하도록 제어. while 과 for 가 있다
1. while 문
while (조건식)
{
실행문;
조건식을 바꾸는 실행문;
}
- while문을 멈추는 첫번째 방법
while (조건식)
{
if (조건식)
{
break;
}
}
- while문을 멈추는 두번째 방법
if 없이 break 만 쓰면 한번만 실행되고 멈춘다 -> 반복문을 쓰는 의미가 없음
1_1 do while문
do
{
실행문;
}
while (조건식)
while 과 do while 의 차이점
while 은 조건에 따라 한번도 실행이 안 될 수있지만
do while 은 무조건 한번은 실행이 되고, 그 뒤 반복을 조절 할 수 있다
반복문 while 실습
어제 만들었던 1~9 중에 숫자를 입력받아 랜덤숫자와 일치하면 true , 불일치하면 false를 출력하는 프로그램을
while문을 이용하여 정답을 맞출 때까지 반복되는 프로그램으로 수정해보자
2. for 문 (ㅠㅠㅠㅠㅠㅠ)
for ([1. 초기식]; [2. 조건식]; [3. 증감식]) //증감식 : 변수를 변화시키는 식
{
[4. 실행문];
}
순서는 [1]->[2]->[4]->[3]->[2]->[4]->[3]->....
-> 조건식의 결과값이 거짓이 나올 때까지
for (int i =0; i < 5; i++)
{
cout << "Hellow World" <<endl;
}
반복문 for 실습
1. 10부터 1까지 차례대로 출력되는 코드를 작성
2. 100 미만의 3의 배수를 차례대로 출력하는 코드를 작성
3. 1000 미만의 2의 승수를 차례대로 출력하는 코드를 작성
4. 구구단을 출력해보자
4-1. 구구단 2단을 차례대로 출력해보자
4-2. 구구단 2단~9단을 차례대로 출력해보자.
4-3 구구단 2단~9단을
2단 3단 4단
5단 6단 7단
8단 9단
의 형태로 출력해보자
1. 식을 차례대로 감소시키기위해 --증감식 사용
2. 100미만 3의배수기 때문에 i+=3 으로 3씩 증가시키고 i < 100을 통해서 제한을 둠
3. 1000미만 2의 승수기 때문에 i*=2로 2승씩 증가시키고 i < 1000을 통해서 제한을 둠
4-1. 2단 고정이기때문에 뒤의 ( i )만 변하면 된다.
i의 범위를 1부터 시작, 10미만으로 제한하고 1씩 증가하여 i가 10이되면 멈추는 반복문을 만들었다
4-2. 2단~9단 이기때문에 앞에 j는 i가 1부터9까지 반복 된 후 1씩 증가하도록
j의 반복문 안에 i의 반복문을 두었다
j는 2단부터 시작이기때문에 시작값을 2로 설정, 10미만으로 제한하고 j가 10이되면 멈추는 반복문을 만들었다
출력은 j * i = ( j * i ) <-곱해서 계산 된 값
4-3 _1 은 위의 4-2 코드를 3단씩 끊어서 endl; (줄바꿈)을 한것이고 이를 또 줄여보라 하셔서 식을 만들어보았다
4-3_2
먼저 우리의 목적은 2 * 1 =2 , 3 * 1 =3, 4 * 1 =4 이 한 줄을 출력 후
이를 9번을 출력하고 이걸 크게 2바퀴 돌리는 것이다
k를 사용하여 0부터 시작해 3미만. 크게 2번을도는 반복문을 작성했고
위의 한줄에서 먼저 변하는 숫자는 j 이기 때문에 i의 반복문 안에 j의 반복문을 넣었다
i의 목적은 4-2와 같기때문에 같은 코드를 짰고 마지막 j 반복문!
j는 2,3,4 -> 5,6,7 -> 8,9,10 이 나오게 하는게 목적이다
첫 문장을 위해 j의 값을 2로 시작, 5미만으로 설정했고 j가 1씩 증가하게 만들었다
( int j = 2; j < 5; j++)
이 경우 2,3,4단은 정확하게 출력되지만 크게 2번을 돌때 2,3,4단 , 2,3,4단 , 2,3,4단 가 반복된다
이를 변화시키기 위해 j값이 k가 돌때 변화 해야하는데
k가 첫바퀴(k=1)를 돌때에 2단에서 5단으로 3증가,
두번째바퀴(k=2)를 돌때에 5단에서 8단으로 3증가 - 2단에서 8단으로는 6증가 를 통해
바퀴 수(k) * 3 이라는 점을 알았고,
이를 j 의 조건에 더했다 ( int j = 2+(k*3); < 5+(k*3); j++)
이렇게하면 두번째 바퀴때 j < 11이 되어 10단까지 출력이 되는데 j의 반복문 안에 if문을 넣어 j가 10과 같거나 커지면 반복을 멈추도록 break를 걸었다
오늘의 과제 - 별 찍기