[위 에] c 언어 로 난수 생 성

C 언어 에서 rand () 함 수 는 임 의 수 를 만 드 는 데 사용 할 수 있 지만 이것 은 진정한 의미 에서 의 임 의 수가 아니 라 가짜 임 의 수 입 니 다. 하나의 수 에 따라 우 리 는 이 를 씨앗 이 라 고 부 를 수 있 습 니 다. 기준 으로 특정한 전달 공식 으로 계산 한 계수 입 니 다. 이 시리즈 의 수가 많 을 때 정상 적 인 발표 에 부합 되 어 임 의 수가 생 긴 것 과 같 습 니 다.그러나 이것 은 진정한 난수 가 아 닙 니 다. 컴퓨터 가 정상적으로 작 동 한 후에 이 피 드 의 값 은 정 해 졌 습 니 다. 시스템 을 파괴 하지 않 는 한 이 피 드 의 값 을 바 꾸 기 위해 C 는 srand () 함 수 를 제공 합 니 다. 그 원형 은 void srand (int a) 입 니 다.
C 언어의 무 작위 함수 random 을 모두 가 알 고 있 을 지 모 르 지만 random 함 수 는 ANSI C 표준 이 아니 기 때문에 random 함 수 는 gcc, vc 등 컴 파일 러 에서 컴 파일 할 수 없습니다.
rand () 는 랜 덤 수 치 를 되 돌려 줍 니 다. 범 위 는 0 에서 RAND 입 니 다.맥 스 룸.0 에서 RAND 로 돌아 가기MAX 간 의 랜 덤 수치, RANDMAX 는 stdlib. h 에 정의 되 어 있 습 니 다. (그 값 은 적어도 32767) 제 가 연산 한 결 과 는 부정 확 한 숫자 입 니 다. 당신 이 정의 한 변수 유형 을 보 려 면 int 성형 은 32767 입 니 다.이 함 수 를 호출 하여 무 작위 수 를 만 들 기 전에 srand () 를 이용 하여 무 작위 피 드 를 설정 해 야 합 니 다. 무 작위 피 드 가 설정 되 어 있 지 않 으 면 rand () 는 호출 할 때 자동 으로 무 작위 피 드 를 1 로 설정 합 니 다.일반적으로 for 구문 으로 피 드 의 개 수 를 설정 합 니 다.구체 적 으로 아래 의 예 를 보시오.
 
예측 할 수 없 는 무 작위 시퀀스 를 만 드 는 방법 은 srand (unsigned int) (time (NULL) 를 이용 하 는 방법 입 니 다. 프로그램 을 실행 하 는 시간 이 다 르 기 때 문 입 니 다.
       C 언어 에서 제공 하 는 난수 발생 기 사용법: 현재 의 C 컴 파 일 러 는 모두 ANSI 표준 을 기반 으로 하 는 위조 난수 발생 기 함 수 를 제공 하여 난수 생 성 에 사용 합 니 다. 이것 이 바로 rand () 와 srand () 함수 입 니 다. 이 두 함수 의 작업 과정 은 다음 과 같 습 니 다.
1) 먼저 srand () 에 피 드 를 제공 합 니 다. 이것 은 unsigned int 형식 이 고 수치 범 위 는 0 ~ 65535 입 니 다.
2) 그리고 rand () 를 호출 합 니 다. srand () 에 제 공 된 피 드 값 에 따라 무 작위 수 (0 에서 32767 사이) 를 되 돌려 줍 니 다.
3) 필요 에 따라 rand () 를 여러 번 호출 하여 끊임없이 새로운 무 작위 수 를 얻는다.
4) 언제든지 srand () 에 새로운 피 드 를 제공 하여 '랜 드 () 의 출력 결 과 를 추가 할 수 있 습 니 다.      다음은 0 ~ 32767 사이 의 난수 프로그램 입 니 다.
#include <stdlib.h>
#include <stdio.h>
#include <time.h>           //         

void main( void )
{int i;
srand( (unsigned)time( NULL ) );          //      
     for( i = 0; i < 10;i++ )                          //   10    
          printf( " %d
", rand() ); }

 
   위의 프로그램 에 따라 0 ~ 1 사이 의 임 의 수 를 쉽게 얻 을 수 있 습 니 다.
#include <stdlib.h>
#include <stdio.h>
#include <time.h> 
main( )
{int i;
srand( (unsigned)time( NULL ) );  
       for( i = 0; i < 10;i++ )
            printf( "%5.2f
", rand()/32767.0); }

 
     그리고 1 ~ 100 사이 의 무 작위 수 는 이렇게 쓸 수 있다.
#include <stdlib.h>
#include <stdio.h>
#include <time.h> 
main( )
{int i;
srand( (unsigned)time( NULL ) );  
       for( i = 0; i < 10;i++ )
            printf( "%d
", rand()%100+1); }

 
come from http://hi.baidu.com/akaneyu
두 번 째, 세 번 째 통용 되 는 난수 발생 기, 세 번 째 함수 명: rand 공 추천  난수 발생 기 용  법: void rand (void);프로그램 예:
#include <stdlib.h> 
#include <stdio.h> 

int main(void) 
{ 
   int i; 

   printf("Ten random numbers from 0 to 99

"); for(i=0; i<10; i++) printf("%d
", rand() % 100); return 0; }

  함수 명: random  난수 발생 기 용  방법: int random (int num);프로그램 예:
#include <stdlib.h> 
#include <stdio.h> 
#include <time.h> 

/* prints a random number in the range 0 to 99 */ 
int main(void) 
{ 
   randomize(); 
   printf("Random number in the 0-99 range: %d
", random (100)); return 0; }

    
함수 명: randomize     이게 나 아!공적.  에너지: 난수 발생 기 초기 화  법: void randomize (void);프로그램 예:
#include <stdlib.h> 
#include <stdio.h> 
#include <time.h> 

int main(void) 
{ 
   int i; 

   randomize(); 
   printf("Ten random numbers from 0 to 99

"); for(i=0; i<10; i++) printf("%d
", rand() % 100); return 0; }

  에서 랜 덤 수의 생 성 알고리즘 을 소개 했다.
3. 설정 범위 내의 임 의 수 를 어떻게 생 성 합 니까?  
 rand 로 인해 발생 하 는 난수 0 에서 randmax, and randmax 는 매우 큰 숫자 입 니 다. 그러면 어떻게 X ~ Y 의 수 를 만 듭 니까?
    X 에서 Y 까지 Y - X + 1 개의 수가 있 기 때문에 X 에서 Y 까지 의 수 를 만 들 려 면 이렇게 써 야 합 니 다.
    k=rand()%(Y-X+1)+X;
    이렇게 하면 당신 이 원 하 는 모든 범위 내의 무 작위 수 를 만 들 수 있 습 니 다.
4. 반복 되 지 않 는 난수 생 성 1)
#include <stdlib.h> 
#include <stdio.h> 
#include<stdio.h>
 #include <time.h>  
swap(int *pm,int *pn)      /*         */
{
   int temp;
   temp=*pm;
   *pm=*pn;
   *pn=temp;
}

int main(void)
{
int   i,a[513];
/*int *pa,*pb;*/
srand( (unsigned)time( NULL ) ); /*              */
for(i=1;   i<=512;   i++){a[i]=i;printf("%4d",a[i]);}
for(i=512;   i>=1;   i--)
{
 /* pa=&a[i]; pb=&a[rand()%i+1];*/
  swap(&a[i], &a[rand()%i+1]);     /*      i   ,     0*/
  /*       ,        */
}
   printf("
") ; for(i=1; i<=64; i++) printf("%4d",a[i] ); getch(); /*wintc */ }

 
2)
 #include <stdlib.h> 
#include <stdio.h> 
#include<stdio.h>


int main(void)
{
   int a[100]={0};  int i,m;
    for(i=1;   i<=99;   ++i)
     printf("%4d",a[i] );

srand( (unsigned)time( NULL ) );

for(i=1; i<=99; i++)
{
        while(a[m=rand()%100+1]);
        a = i;
}
       for(i=1;   i<=99;   ++i)
     printf("%4d",a[i] );

getch();
}



좋은 웹페이지 즐겨찾기