티스토리 뷰
난수란 무엇일까요? |
난수(random number)란
특정한 배열 순서나 규칙을 가지지 않는 연속적인 임의의 수를 말합니다.
[알아두기] 난수(random number)란?
특정한 배열 순서나 규칙을 가지지 않는 연속적인 임의의 수
C언어에서는 시스템 라이브러리에서 난수를 만드는 함수를 제공하고 있어요.
(그러고 보니 난수 만들기를 지원하지 않는 언어는 없는 것 같네요)
시스템 라이브러리에서 제공하는 함수 rand()를 이용하면 난수를 만들 수 있는데
이 함수를 사용하기 위해서는 stdlib.h 파일을 포함시켜야 해요.
[알아두기] 난수를 만들기 위해서 필요한 것!
헤더파일인 stdlib.h를 포함시켜 함수 rand()를 이용
(stdlib.h에 함수 rand()의 함수 원형이 정의되어 있기 때문에 포함)
함수 rand()의 난수 생성 범위 |
함수 rand()에 의해 생성되는 정수의 범위는 0부터 n까지!
함수 rand()에 의해 생성되는 정수는 [0, n] 까지 즉 0부터 n사이의 임의의 정수입니다.
(여기서 n은 시스템에 따라 다르기 때문에 n으로 표시했습니다.)
n은 일반적으로 헤더 파일 stdlib.h 파일에 기호 상수 RAND_MAX에 의해 정의됩니다.
[알아두기] 함수 rand()에 의해 생성되는 정수의 범위
함수 rand()에 의해 생성되는 정수의 범위는 [0, n]까지 즉, 0부터 n까지!
그래서 stdlib.h파일을 열어보니
아래 보이는 그림과 같이 RAND_MAX라는 값이 보이는 것을 확인할 수 있었습니다
0x7fff라고 되어 있네요. 0x7fff를 10진수로 변환하면 32767이에요.
즉, 여기서는 [0, 32767]의 범위 내에서 생성이 된다는 거죠.
함수 rand()를 이용한 예제 소스 |
// ex1 : #include<stdio.h> return 0 ; |
소스 파일을 아래에 첨부합니다. 다운로드 하셔서 실행해 보세요
위의 예제를 실행하면 아래와 같은 화면이 나옵니다.
몇 번 실행하다보니 이상한 점을 발견할 수 있었어요.
몇 번을 실행해도 위와 같은 결과가 나온다는 것이지요.
그래서 위의 문제를 해결하기 위해
즉, 매번 난수를 다르게 발생시키기 위하여 시드(seed)값을 주는 방법을 사용할 거에요.
시드값이 다르면 함수 rand()에서 발생시키는 난수가 다릅니다
srand()의 사용법 | 함수 srand()를 이용하여 시드값 주기 |
이 시드값을 주기 위해서 함수 srand()를 이용할거에요.
함수 time()으로 반환되는 값을 함수 srand()의 인자로 주면 고민 끝!
함수 time(NULL)은 1970년 1월 1일 이후의 경과된 시간을 초 단위로 반환하는 함수에요.
함수 time()을 사용하기 위해서는 헤더 파일 time.h를 포함시켜야 된다는 것 잊지 마세요.
난수에 매번 다른 시드를 주기 위해서 srand( time ( NULL ) ) 을 호출하면 되요.
그러면 더 길어지기 전에 최종 소스를 보도록 하겠습니다.
#include<stdio.h> return 0 ; |
소스 파일을 아래에 첨부합니다. 다운로드 하셔서 실행해 보세요
실행하면 아래 화면처럼 나옵니다.
PC마다 값이 다르겠죠? 하지만 중요한 것은!
실행할 때마다 값이 달라진다는 것이죠!
위의 결과는
웹에서 여러 프로그래밍 언어를 컴파일 해볼 수 있는 사이트( http://codepad.org ) 에서
실행한 결과입니다
한번 가서 실행해 보세요^^
rand() 함수 사용예 | 0부터 n까지의 난수 만드는 법을 알아봅시다 |
0부터 n까지의 난수를 만들어 볼까요?
앞서 이야기한 것과 같이
함수 rand()에 의해 생성되는 정수는 [0, n] 까지 즉 0부터 n사이의 임의의 정수입니다.
0부터 (n-1) 까지의 난수를 발생시키려면 아래와 같이 사용합니다.
rand() % n
예를 들어 볼게요 rand() % 10 → 0 ~ 9 사이의 난수가 나옵니다 (rand() % 10)+ 1 → 1 ~ 10 사이의 난수가 나옵니다 그러면 조금만 응용해 볼까요? 10 + (rand() % 10) → 10 ~ 19사이의 난수가 나옵니다. |
'IT 이야기 > 프로그래밍' 카테고리의 다른 글
[HTML 쉽게 이해하기 강좌] - <input> 태그 (0) | 2011.12.07 |
---|---|
[HTML 쉽게 이해하기 강좌] - <form> 태그 (0) | 2011.12.07 |
[HTML 쉽게 이해하기 강좌] - Element Level에 대해서 (0) | 2011.12.05 |
[HTML 쉽게 이해하기 강좌] - DOCTYPE에 대해서 (0) | 2011.12.05 |
[Javascript] getElementById 예제 - 링크 보이기/숨기기 (0) | 2011.12.05 |
[Javascript] 홈페이지에 현재의 년월일을 이미지로 된 숫자로 표시하는 자바스크립트 소스 (1) | 2011.12.03 |
[HTML 쉽게 이해하기 강좌] - <h1>~<h6> 태그에 대해서 (0) | 2011.12.03 |
[HTML 쉽게 이해하기 강좌] - <head> 태그에 대해서 (0) | 2011.12.02 |
[HTML 쉽게 이해하기 강좌] - HTML 문서의 기본 구조 (0) | 2011.12.02 |
[HTML 쉽게 이해하기 강좌] - 주석문 (0) | 2011.12.02 |
- Total
- Today
- Yesterday
- W3Schools Online Web Tutorials
- 구차니의 잡동사니 모음
- [IT]블로거팁닷컴
- 비앤아이님의 블로그
- Blog Suspect
- 즐거운하루 blog
- zinicap의 검색엔진 마케팅(SEM)
- 머니야머니야님의 블로그
- [Friend] AtinStory
- [기타배우기]해브원 박스
- [웹표준] SINDB.com
- 해커 C 이야기
- [애드센스] 길라잡이
- 정순봉의 IT SCHOOL
- 씨디맨의 컴퓨터이야기
- 2proo Life Story
- 못된준코의 세상리뷰
- [IT강좌] 정보문화사
- IN 대전
- 에우르트는 나쁜남자 -_-
- 씬의 싱크탱크
- 엔돌슨의 IT이야기
- 진이늘이
- 'Cooltime'의 블로그
- 후이의 Tistory
- Soulstorage
- 앤드&엔드의 블로그
- June Blog
- 노지의 소박한 이야기
- gbWorld
- 인터넷 속 나의 생각
- HarshNix
- ART of WEB
- 녹두장군 - 상상을 현실로
- 안드로이드
- 스마트폰
- 안드로이드 어플 추천
- 강좌
- 안드로이드 어플
- 리뷰
- MBTI 자료
- 인터넷 익스플로러
- 프로그래밍 문제
- 효과음
- MBTI 강좌
- 강의
- 인터넷
- C언어
- 모토로이
- C
- 예제 소스
- JavaScript
- php
- HTML
- C언어 문제
- MBTI
- 프로그래밍
- MBTI 테스트
- 소스코드
- MBTI 검사
- 소스
- 성공
- It
- C언어 소스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |