기타 강좌

난수를 사용하기 위해서는

 

srand(( unsigned )time(NULL);

을 해주시면 됩니다. 하는건 자기 마음이겠죠? unsigned int 이렇게 사용하셔도 됩니다.

이렇게 해주셨으면 난수 발생의 범위를 지정해야합니다.

 

난수 발생의 범위를 지정하는 방법은 이렇습니다.


변수 = rand() % (종료 값 - 시작 값 + 1) + 시작 값

100부터 1000 사이의 난수를 발생시키려면
변수 = rand() % (1000 - 100 + 1) + 100
간단히 하면
변수 = rand() % (901) + 100
이렇게 되지요.

 



이건 난수 1,000개를 발생시켜서 최소값, 최대값 출력하는 소스.

  1. #include <stdio.h>  
  2. #include <stdlib.h>  
  3. #include <conio.h>  
  4. #include <time.h>  
  5. int main()  
  6. {  
  7.      int a;  
  8.      int start,end;  
  9.      int max,min;  
  10.      int count;  
  11.        
  12.      srand((unsigned)time(NULL));  
  13.        
  14.      printf("시작 : ");  
  15.      scanf("%d",&start);  
  16.      printf("종료 : ");  
  17.      scanf("%d",&end);  
  18.        
  19.      min=end;  
  20.      max=start;  
  21.        
  22.      for(count=0;count<1000;count++)  
  23.      {  
  24.           a=rand() % (end - start + 1) + start;  
  25.           printf("%4d ",a);  
  26.             
  27.           if(min > a)  
  28.                  min=a;  
  29.           if(max < a)  
  30.                  max=a;  
  31.      }  
  32.        
  33.      printf("n최소 : %d",min);  
  34.      printf("n최대 : %d",max);  
  35.        
  36.      getch();  
  37.      return 0;  
  38. }  
Comment '2'
  • ?
    곤네꼬 2009.01.28 18:51

    저는 100부터 1000까지시 rand()%100+1000 으로 배웟습니다. << 정확하지않음

    그리고 unsigned 가 아닌 unsigned int으로 배웟는데요. << srand(unsigned int)time(NULL)); << 이거 아닌가요?
    제가 틀렷나요?

  • ?
    Last H 2009.02.14 19:37
    음 매우 지난 뒤의 답변이지만 님이 첫번째 쓰신 형태로도 사용합니다만
    그렇게 사용할 시 진정한 의미에서의 랜덤숫자가 성립되지 않습니다.
    난수라지만 일정 패턴을 가져버리죠 즉 저렇게 프로그램을 돌리면 숫자가
    (190,420,145)  <-- 이런식으로 무작위로 나온다고 치면
     다음에 프로그램을 틀어도 (190,420,145) 로 나옵니다. 즉 패턴을 유지하죠
    그래서 이 강좌에서 처럼 주로 타임함수를 호출해서 타이머를 사용합니다. 이때 PC의 타이머 클럭은 CPU속도에 준하기 때문에
    요새 컴퓨터로 약 3기가의 CPU속도라면 같은 패턴을 지는 난수가 나올 확률은 한없이 0에 가깝게 되죠.
    p.s 3기가라면 1초에 3x10^9번의 주기를 갖는 다는겁니다.

    두번째로 unsigned int 라는건 unsigned와는 다른 겁니다 이미 unsigned라는 문장 자체는 일종의
    명령어입니다. 뜻은 간단히 말해 자연수만 받겠다는거죠 즉
    음수를 처리하지 않겟다는 의미입니다. 과거엔 RAM의 사양상 unsigned int를 통해 자연수를 더욱 큰 수까지 입력 받으려고
    주로 사용하였으나 최근엔 일반 프로그래밍에선 그다지 따지지 않습니다. 램이 차고 넘치거든요.
    각종 페이징 기법같은 메모리 관리 방식도 발전해서 효율도 높아졌고요.
    물론 임베디드 관련으로 쓰일땐 자료구조적으로 가장 효율적으로 할 수록 더 작은 기계에 더 많은 기능을 집어 넣을 수 있기때문에
    중요하지만요.

List of Articles
분류 제목 글쓴이 날짜 조회 수
Vegas Pro 베가스 강좌 목록 아방스 2017.09.28 912
파이널컷X 파컷 강좌 목록 아방스 2017.06.18 798
기타 XNA로 게임만들기 - 1. 인사겸 소개 3 file 재훈군 2012.08.03 3116
기타 XNA로 게임만들기 - 2. 강의에 앞서 C#의 문법 1 file 재훈군 2012.08.03 4213
기타 XNA로 게임만들기 - 3. 자신만의 라이브러리를 만들자. 7 file 재훈군 2012.08.03 3454
C언어 [ - Zennys - ] 제니스의 C언어 강좌 [3중문자] 1 제니스 2009.06.13 2352
C언어 [ - Zennys - ] 제니스의 C언어 강좌 [include] 3 제니스 2009.06.13 3126
C언어 [ - Zennys - ] 제니스의 C언어 강좌 [printf함수] file -Zennys- 2009.06.13 1878
C언어 [ - Zennys - ] 제니스의 C언어 강좌 [scanf함수] -Zennys- 2009.06.13 2377
C언어 [ - Zennys - ] 제니스의 C언어 강좌 [그외 입출력 함수] -Zennys- 2009.06.13 2764
C언어 [ - Zennys - ] 제니스의 C언어 강좌 [문자열] 제니스 2009.06.13 2840
C언어 [ - Zennys - ] 제니스의 C언어 강좌 [변수의 선언] -Zennys- 2009.06.13 2175
C언어 [ - Zennys - ] 제니스의 C언어 강좌 [변수의 정의] 2 -Zennys- 2009.06.13 2757
C언어 [ - Zennys - ] 제니스의 C언어 강좌 [변수의 종류] 2 -Zennys- 2009.06.13 2770
C언어 [ - Zennys - ] 제니스의 C언어 강좌 [실수형 상수] 제니스 2009.06.13 3089
C언어 [ - Zennys - ] 제니스의 C언어 강좌 [실수형 종류] 1 제니스 2009.06.13 3073
C언어 [ - Zennys - ] 제니스의 C언어 강좌 [아스키(ASCII)코드] 1 제니스 2009.06.13 3643
C언어 [ - Zennys - ] 제니스의 C언어 강좌 [열거형,정의] 제니스 2009.06.13 2558
C언어 [ - Zennys - ] 제니스의 C언어 강좌 [정수의 길이] 1 제니스 2009.06.13 2395
C언어 [ - Zennys - ] 제니스의 C언어 강좌 [정수의 정의] 4 제니스 2009.06.13 2664
C언어 [ - Zennys - ] 제니스의 C언어 강좌 [정수형 상수] 제니스 2009.06.13 2989
C언어 [ - Zennys - ] 제니스의 C언어 강좌 [컴파일러] 4 -Zennys- 2009.06.13 1980
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 Next
/ 19