C 언어 난수 생 성 튜 토리 얼(rand 와 srand 용법)
C 언어 에서 우 리 는 일반적으로
int rand (void);
void 는 매개 변 수 를 전달 할 필요 가 없다 고 표시 합 니 다.C 언어 에는 랜 덤 수 를 얻 을 수 있 는 random()함수 가 하나 더 있 지만 random()은 표준 함수 가 아니 라 VC/VS 등 컴 파 일 러 를 통과 할 수 없 기 때문에 비교적 적 게 사용한다.
rand()는 0~RAND 에 무 작위 로 생 성 됩 니 다.맥 스 사이 의 정수.
RAND_MAX 는
다음은 난수 생 성의 실례 입 니 다.
#include <stdio.h>
#include <stdlib.h>
int main(){
int a = rand();
printf("%d
",a);
return 0;
}
실행 결과 예:193
난수 의 본질
위의 코드 를 여러 번 실행 하면 매번 발생 하 는 난수 가 똑 같은 것 을 발견 할 수 있 습 니 다.어떻게 된 일 입 니까?왜 랜 덤 수가 랜 덤 이 아 닙 니까?
실제로 rand()함수 가 발생 하 는 임 의 수 는 위 임 의 수 이 고 하나의 수치 에 따라 특정한 공식 에 따라 계산 한 것 이다.이 수 치 를 우 리 는'씨앗'이 라 고 부른다.피 드 와 난수 간 의 관 계 는 정상 적 인 분포 로 다음 그림 과 같다.
C 언어 임 의 수 와 피 드 간 에 정상 적 인 분 포 를 나타 낸다.
피 드 는 컴퓨터 를 시작 할 때마다 무 작위 이지 만 컴퓨터 가 시작 되면 변 하지 않 습 니 다.컴퓨터 를 시작 할 때마다 피 드 는 값 을 정 하기 때문에 공식 에 따라 추 산 된 결과(즉 생 성 된 난수)는 고정 적 인 것 이다.
다시 파종 한다
우 리 는 srand()함 수 를 통 해 씨앗 을 다시 파종 할 수 있다.그러면 씨앗 이 바 뀔 것 이다.srand()의 용법 은:
void srand (unsigned int seed);
unsigned int 형식의 인자 가 필요 합 니 다.실제 개발 에서 우 리 는 시간 을 매개 변수 로 할 수 있다.매번 파종 하 는 시간 이 다 르 면 생 성 된 씨앗 이 다 르 고 최종 난수 도 다르다.
srand((unsigned)time(NULL));
관심 있 는 독 자 는여 기 를 강 타 하 다스스로 time()함수 의 용법 을 연구 하 세 요.이 절 에서 우 리 는 더 이상 설명 하지 않 겠 습 니 다.위의 코드 를 수정 하고 무 작위 수 를 만 들 기 전에 먼저 파종 합 니 다.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
int a;
srand((unsigned)time(NULL));
a = rand();
printf("%d
", a);
return 0;
}
프로그램 을 여러 번 실행 하면 매번 생 성 되 는 난수 가 다르다 는 것 을 알 수 있다.그러나 이런 랜 덤 수 는 점점 커지 거나 점점 줄 어드 는 추 세 를 보일 것 이다.이것 은 우리 가 시간 을 씨앗 으로 하고 시간 이 점점 커지 기 때문이다.위의 정상 분포 도 를 결합 하면 랜 덤 수도 점점 커지 거나 줄 어 들 것 이 라 고 추측 하기 쉽다.일정 범위 내의 난수 생 성
실제 개발 에서 우 리 는 일정한 범위 내의 랜 덤 수가 필요 하 다.너무 크 거나 너무 작 아 도 요구 에 부합 되 지 않 는 다.그러면 어떻게 일정한 범위 의 랜 덤 수가 생 길 수 있 습 니까?우 리 는 모델 링 방법 을 이용 할 수 있다.
int a = rand() % 10; // 0~9 , 10
상하 한 을 정 하려 면:
int a = rand() % 51 + 13; // 13~63
분석:모델 링 을 하면 나머지 를 얻 을 수 있 습 니 다.rand()%51+13 우 리 는 두 부분 으로 볼 수 있 습 니 다.rand()%51 은 0~50 의 랜 덤 수 를 만 들 고 뒤에+13 보증 a 는 최소 13 만 있 으 며 최대 50+13=63 입 니 다.마지막 으로 13~63 범위 내 무 작위 수 를 만 드 는 전체 코드 를 드 립 니 다.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(){
int a;
srand((unsigned)time(NULL));
a = rand() % 51 + 13;
printf("%d
",a);
return 0;
}
연속 생 성 난수때때로 우 리 는 한 조 의 난수(여러 개의 난수)가 필요 하 다.어떻게 생 성 해 야 합 니까?쉽게 생각 할 수 있 는 해결 방안 은 순환 을 사용 하고 매번 순환 할 때마다 다시 파종 하 는 것 입 니 다.아래 의 코드 를 보십시오.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
int a, i;
// for 10
for (i = 0; i < 10; i++) {
srand((unsigned)time(NULL));
a = rand();
printf("%d ", a);
}
return 0;
}
실행 결과 예:8 8 8 8 8 8 8 8 8 8
운행 결 과 는 매우 이상 하 다.매번 순환 할 때마다 우 리 는 다시 파종 을 하 는데,왜 생 성 된 난수 가 모두 같 습 니까?
이것 은 for 순환 운행 속도 가 매우 빨 라 서 1 초 안에 운행 이 완성 되 었 고 time()함수 가 얻 은 시간 은 초 까지 만 정확 할 수 있 기 때문에 매번 순환 할 때마다 얻 는 시간 은 똑 같 습 니 다.그러면 피 드 는 똑 같 고 임 의 수도 똑 같 습 니 다.
그렇다면 어떻게 해결 해 야 할 까?랜 덤 수 를 연속 으로 생 성 할 방법 이 없 나 요?물론 있 습 니 다.우 리 는 1 절 에서 교묘 한 해결 방안 을 제시 할 것 입 니 다.
C 언어 난수 생 성 튜 토리 얼(rand 와 srand 용법)에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 C 언어 난수 생 성 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C 언어 체인 시계는 뱀을 탐식하는 작은 게임을 실현한다본고의 실례는 여러분에게 C 언어 체인표가 뱀 탐식 게임을 실현하는 구체적인 코드를 공유하여 참고하도록 하였으며, 구체적인 내용은 다음과 같다. 프로젝트 이름: 뱀놀이 운영 환경: Linux 프로그래밍 언어: C 언...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.