본문 바로가기

메타버스 1기

4/12 제어문 - 조건문과 반복문

제어문이란?
프로그램에서 순차적인 흐름을 통제하는 방법이다
코드는 위에서부터 아래로 순차적으로 진행되게 되는데 그 순서를 조절할 수 있도록 하는 코드인 것이다

조건문

특정 조건에 따라서 실행문을 실행 할지 안 할지 제어. ifswitch 가 있다


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개 중에 선택해 주세요. 출력

 

위의 switch 문을 if 문으로 변환한 모습

 

반복문

특정 조건에 따라서 실행문을 일정 횟수만큼 반복 실행 하도록 제어. whilefor 가 있다

 

1. while 문

while (조건식)
{
      실행문;
      조건식을 바꾸는 실행문;
}

- while문을 멈추는 첫번째 방법


while (조건식)
{
       if (조건식)
       {
              break;
       }
}
- while문을 멈추는 두번째 방법
if 없이 break 만 쓰면 한번만 실행되고 멈춘다 -> 반복문을 쓰는 의미가 없음

순차적으로 repeat_count 의 값이 0부터 1씩 늘어나고 5<5 때 거짓이 되어 반복이 멈추는 프로그램 (첫번째 방법)

 

1_1 do while문

do

{

       실행문;

}
while (조건식)

 

while 과 do while 의 차이점
while 은 조건에 따라 한번도 실행이 안 될 수있지만
do while 은 무조건 한번은 실행이 되고, 그 뒤 반복을 조절 할 수 있다

do while을 사용하여 Hellow World 를 출력하고 반복횟수가 5<5가 될 때 멈추는 프로그램

 

반복문 while 실습

 

어제 만들었던 1~9 중에 숫자를 입력받아 랜덤숫자와 일치하면 true , 불일치하면 false를 출력하는 프로그램을
while문을 이용하여 정답을 맞출 때까지 반복되는 프로그램으로 수정해보자

while문 안에 if문을 사용하여 enteredNum과 randNum이 일치할때 break를 하는 프로그램을 만들었다

 

 

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을 통해서 제한을 둠

 

앞에 곱해지는수가 j 뒤의 곱하는 수를 i로 지정했다


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-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를 걸었다




오늘의 과제 - 별 찍기

220412_Star.cpp
0.00MB