1. 목적
  - 난수 생성을 할줄 안다.

2. 문제 (점수 : 40 점)
  - 컴퓨터가 생성한 1 ~ 10 사이의 임의의 번호를 맞추는 프로그램을 만들어라.
  - 힌트 : rand() % (최대 - 최소 + 1 ) + 최대
  - 입력 값을 확인하여 "크다" "작다" 의 응답을 확인해 줘야 한다.
  - 출력 화면

임의의 값을 생성 했습니다.

값을 예상해 보세요 : 4
더 작은 값 예상해 보세요

값을 예상해 보세요 : 3

정확히 맞추셨습니다. 생성한 값은 3 였습니다.
Press any key to continue

3. 이해
  - 난수를 해당 범위내에 입력을 시킬줄 아는가?
  - 크고 작음을 판단할 줄 아는가?

4. 코드

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
 int in, gen;
 in = gen = 0;
 srand((unsigned)time(NULL));
 gen = rand() % 10 + 1;
 puts("임의의 값을 생성 했습니다.\n");

 while(in != gen)
 {
  printf("값을 예상해 보세요 : ");
  scanf("%d", &in);
  printf(in < gen ? "더 큰값을 예상해 보세요.\n" : in > gen ? "더 작은 값 예상해 보세요\n" : "");
  putchar('\n');

 }

 printf("정확히 맞추셨습니다. 생성한 값은 %d 였습니다.\n", gen);

 return 0;

}

5. 해설
  - srand 함수로 rand 함수의 초기화를 했습니다.
  - 삼항 연산자로 대소 판정을 단순화 했습니다.
  - while 문으로 같을때 까지 반복 했습니다.

6. 참고
  - 삼항 연산자 문제
  - rand 내부 검색

Posted by 카켈