본문 바로가기

c,c++

#2 반복문과 난수생성

1. While 문

- 반복문의 종류중 하나. while(조건){내용} 으로 작성

- 소괄호 안의 문구가 참인 순간동안은 계속해서 블록안의 명령어를 반복해서 실행한다.

- i++, ++i 이런명령어는 할때마다 변수 i 에 1을 더한다는 식으로 생각하면됨.

2. For문

- 반복문의 종류중 하나. for(초기값; 조건; 증감값) 으로 작성

- for 루프는 진입조건 루프이다. ( 이말이 무엇이냐면 먼저 블록안의 명령어를 실행한 다음, 조건을 검사하고 조건에 맞지 않을 때 증감값을 실행하고 다시 루프함으로써 작동한다.)

- 지역변수는 class, function내에서만 사용되는 변수이고, 전역변수는 각 클래스나 함수 밖에서 선언되어서 각각의 클래스 안에서도 사용될 수 있는 변수들이다. 전역변수선언후 각 함수들이 전역변수를 사용하면 그 함수가 지나간 이후엔 전역변수가 그 함수에 의해 변해진 채로 저장되어진다.

- 2중 for문의 반복횟수가 고민된다면 바깥의 for문의 반복수 * 안쪽 for문의 반복수 를 계산하면 된다.

3. 난수생성

- 난수생성을 하기위해서는 해더 time.h 와 stdlib.h가 필요하다.

- 일반적으로 rand()를 사용하면 랜덤난수가 생성된다. 하지만, c 에서 기본으로 제공된 시드를 사용하기때문에 항상 같은 난수들만 나온다.

- 사용할 때마다 다른 난수 생성을 위해서는 시간을 기준으로 잡아서 seed를 넣어서 생성하는 난수를 만들어야 하고, 그것을 위해서 time.h의 time함수를 seed로 잡게된다.

- 따라서 사용할 때마다 다를 무작위한 난수를 얻고 싶으면 rand()를 쓰기 전에 srand(time(NULL));을 선언해주어야 한다.

- 우리가 원하는 범위 내의 난수를 얻고싶으면 rand()%(원하는수) + 1 로하면된다.

(이유에 대해서 고민해봤는데 rand에 모듈러로 원하는 수의 나머지 + 1 하면 결국 원하는 수 범위 내의 난수라고 생각 가능하기 때문.)