[1번 문제]
/*
이 절에서 소개되지 않은 난수 생성방법들을 조사하여 각 방법에 대해
최대 5자리의 정수 난수 10개와 0부터 1 사이의 실수 난수 10개를 출력하는 프로그램을 작성합니다
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
srand((unsigned)time(NULL));
printf("정수 난수:\n");
for (int i = 0; i < 10; i++)
printf("%d\n", rand() % 100000 + 1); //5자리 난수
printf("실수 난수:\n");
for (int i = 0; i < 10; i++)
printf("%g\n", rand() / (double)(RAND_MAX + 1)); //0~1 사이의 실수
return 0;
}
[3번 문제]
/*
어느 컵에 동전이 들어 있는지 맞추는 게임 프로글매을 작성합니다.
게임을 시작하면 컵 세 개(또는 네 개)를 표시하고, 동전이 들어 있는 한개의 컵을 맞추도록 한다.
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
int cup[4] = { 0, }; //컵 네개
int sel;
srand((unsigned)time(NULL));
for (int i = 0; i < 4; i++)
{
cup[i] = rand() % 2;
if (cup[i] == 1)
break;
}
printf("어떤 컵에 동전이 있을 것 같나요?(1~4)");
scanf("%d", &sel);
if (cup[sel - 1] == 1)
{
printf("맞았습니다\n");
}
else
{
printf("꽝입니다. 다시 도전하세요\n");
for (int i = 0; i < 4; i++)
printf("%d\t", cup[i]);
}
printf("\n");
return 0;
}
[4번 문제]
/*
함수 rand를 이용하여 1~6 사이의 주사위 눈금 1000개를 생성하고,
각 눈금의 빈도에 대한 확률을 계산합니다
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
int arr[1000]; //크기가 1000인 배열
int frequency[6] = { 0, }; //눈금 배열
srand((unsigned)time(NULL));
for (int i = 0; i < 1000; i++)
{
arr[i] = rand() % 6 + 1;
}
for (int i = 0; i < 1000; i++)
{
switch (arr[i])
{
case 1:
frequency[0]++;
break;
case 2:
frequency[1]++;
break;
case 3:
frequency[2]++;
break;
case 4:
frequency[3]++;
break;
case 5:
frequency[4]++;
break;
case 6:
frequency[5]++;
break;
}
}
for (int i = 0; i < 6; i++)
{
//printf("%d\n", frequency[i]);
printf("주사위를 돌릴 때 %d 눈금이 나올 확률은:%g\n", i, (double)(frequency[i] / 1000.0));
}
return 0;
}
[5번 문제]
/*
지금까지 당첨된 실제 로또 번호에 대해 조사하고, 이 번호들이 과연 임의로 추출된 것인지 각 번호에 대한 당첨 확률을 계산하시오
*/
//760회 10 22 27 31 42 45 + 12
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
int lotto[6] = { 0, };
int i = 0, j;
int a = 0, b = 0, c = 0, d = 0, e = 0, f = 0;
srand(time(NULL));
while (i<100)
{
for (j = 0; j<6; j++)
lotto[j] = rand() % 50 + 1;
for (j = 0; j<6; j++)
{
if (lotto[j] == 10)
a++;
if (lotto[j] == 22)
b++;
if (lotto[j] == 27)
c++;
if (lotto[j] == 31)
d++;
if (lotto[j] == 42)
e++;
if (lotto[j] == 45)
f++;
}
i++;
}
printf("10이 나올 확률 %g\n15가 나올 확률 %g\n18이 나올 확률 %g\n21이 나올 확률 %g\n34가 나올 확률 %g\n41이 나올 확률 %g\n", (double)a / 100, (double)b / 100, (double)c / 100, (double)d / 100, (double)e / 100, (double)f / 100);
return 0;
}
[6번 문제]
/*
함수 rand를 이용하여 중복되지 않는 로또번호 6개를 생성하는 과정을 1000번 반복한
다음 각 번호에 대한 당첨 확률을 계산한다
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
int num = 0;
int frequency[45] = { 0, }; //각 번호에 대한 당첨 확률
int lotto[6] = { 0, };
srand((unsigned)time(NULL));
while (num < 1000)
{
for (int i = 0; i < 6; i++)
{
lotto[i] = rand() % 45 + 1;
for (int j = 0; j < i; j++)
{
if (lotto[i] == lotto[j])
{
i--;
break;
}
}
}
for (int i = 0; i < 6; i++)
{
for (int j = 0; j < 45; j++)
{
if (lotto[i] == j)
frequency[j]++;
}
}
num++;
}
for (int i = 0; i < 45; i++)
printf("로또번호 %d가 나올 확률은 %g다\n", i + 1, (double)(frequency[i] / 1000.0));
return 0;
}
[9번 문제]
/*
임의의 비밀번호(password)를 생성하는 프로그램을 작성합니다.
비밀번호의 길이와 개수는 입력받아 처리합니다
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
int *arr;
int num, sel;
int capital; //영문 대문자 여부
int ifalpha; //영문인지 숫자인지 여부
srand((unsigned)time(NULL));
printf("비밀번호의 길이 입력:");
scanf("%d", &num);
arr = (int*)malloc(sizeof(int)*num);
printf("비밀번호를 어떻게 설정하시겠습니까?\n");
printf("1. 영문\t2. 숫자\t3. 영문+숫자: ");
scanf("%d", &sel);
switch (sel)
{
case 1:
for (int i = 0; i < num; i++)
{
capital = rand() % 2; //bool처럼 1이면 대문, 0이면 소문
arr[i] = rand() % ('z' - 'a') + (capital ? 'A' : 'a');
//printf("%c\n", arr[i]);
}
break;
case 2:
for (int i = 0; i < num; i++)
{
arr[i] = rand() % ('9' - '0') + '0';
}
break;
case 3:
for (int i = 0; i < num; i++)
{
capital = rand() % 2;
ifalpha = rand() % 2;
if (ifalpha)
{
capital = rand() % 2; //bool처럼 1이면 대문, 0이면 소문
arr[i] = rand() % ('z' - 'a') + (capital ? 'A' : 'a');
}
else
{
arr[i] = rand() % ('9' - '0') + '0';
}
}
break;
default:
printf("잘못된 입력입니다\n");
}
printf("비밀번호는 ");
for (int i = 0; i < num; i++)
printf("%c", arr[i]);
printf("\n");
free(arr);
return 0;
}
개발환경:Visual Studio 2017
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~
[참고] 명품 C언어 프로젝트 안기수 저
*생략된 문제는 토의문제라 생략했습니다!
'C > 명품 C언어 프로젝트(안기수 저)' 카테고리의 다른 글
명품 C언어 프로젝트 4.1장 연습문제 (0) | 2017.07.05 |
---|---|
명품 C언어 프로젝트 3.8장 연습문제 (0) | 2017.07.01 |
명품 C언어 프로젝트 3.6장 연습문제 (0) | 2017.06.23 |
명품 C언어 프로젝트 3.5장 연습문제 (1) | 2017.06.22 |
명품 C언어 프로젝트 3.4장 연습문제 (0) | 2017.06.18 |