1. 목적
  - 무작위 숫자를 만들어 그 갯수를 확인한다.

2. 문제 (점수 : 40점)
  - 1부터 6사이의 임의의 정수 100개를 생성 각 숫자가 나타나는 확률을 계산하는 프로그램
  - 정수를 출력할 필요는 없다.
  - 중첩된 if-else 문 사용 / switch-case 문 사용 가능 (여기서는 switch-case 문으로 풀이)
  - 실행 화면

1 이 나올 확률 : 0.150
2 가 나올 확률 : 0.190
3 이 나올 확률 : 0.150
4 가 나올 확률 : 0.210
5 가 나올 확률 : 0.200
6 이 나올 확률 : 0.100
Press any key to continue


3. 이해
  - 원하는 범위의 난수를 잘 만들줄 아는가?
  - if-else / switch-case 문을 잘 활용할 줄 아는가?
  - 확률을 낼줄 아는가?

4. 코드

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

int main()
{
 
 int in = 0;
 int i = 0;
 int one = 0;
 int two = 0;
 int three = 0;
 int four = 0;
 int five = 0;
 int six = 0;

 srand((unsigned)time(NULL));
 
 while(i<100)
 {
  in = (rand() % 6) + 1;
  switch(in)
  {
   case 1:
    one++;
    break;

   case 2:
    two++;
    break;

   case 3:
    three++;
    break;

   case 4:
    four++;
    break;

   case 5:
    five++;
    break;

   case 6:
    six++;
    break;

   default:
    rand();

    break;

  }

  i++;
 }

 printf("1 이 나올 확률 : %0.3f\n", one == 0 ? 0 : (float)one/100 );
 printf("2 가 나올 확률 : %0.3f\n", two == 0 ? 0 : (float)two/100 );
 printf("3 이 나올 확률 : %0.3f\n", three == 0 ? 0 : (float)three/100 );
 printf("4 가 나올 확률 : %0.3f\n", four == 0 ? 0 : (float)four/100 );
 printf("5 가 나올 확률 : %0.3f\n", five == 0 ? 0 : (float)five/100 );
 printf("6 이 나올 확률 : %0.3f\n", six == 0 ? 0 : (float)six/100 );
 return 0;
}

5. 해설
  - 확률이 드물게 0 이 된다면 100으로 나눌때 오류가 나는걸 방지 하기 위해 간단한 조건문을 작성
    했습니다.
  - 선언된 변수가 int 형이기 때문에 출력시 소숫점 출력을 위해 float 형으로 형변환(casting)을 했습
    니다.
  - 0 ~ 32797 을 6으로 나눈 나머지 0 ~ 5 까지의 숫자에서 1을 더해 1 ~ 6 까지의 나올수 있는 숫자
    범위를 구했습니다.
  - if-else 문은 switch-case 문보다 더 자세한 경우를 다룰수 있지만 이 경우 처럼 숫자가 제한적
    인 경우 훨씬 세련된 코드로 보일수 있습니다.
  - srand((unsigned)time(NULL)) 구문은 첫부분에서 선언한 이상 추가 선언시 난수 생성시 예상치
    못한 경과가 생길수 있습니다.

6. 참고
  - http://www.winapi.co.kr/clec/cpp1/8-2-1.htm : rand() : 내부 검색
  - http://www.winapi.co.kr/clec/cpp1/9-3-4.htm : switch-case 구문

Posted by 카켈



1. 목적

  - 입력에 따른 분기를 할줄 안다.

2. 문제
  - 숫자를 입력받아 비프음을 낸다.
  - 1은 한번, 2는 두번, 3은 세번, 이후의 숫자나 다른 값은 소리를 내지 않는다.
  - 특별한 출력 화면은 없다.
  - switch-case 문을 활용한다.

3. 이해
  - 입력에 따른 분기를 정확히 할줄 아는가?
  - 비프음을 낼줄 아는가?

4. 코드

#include <stdio.h>

int main()
{
 int i = 0;
 scanf("%d",&i);

 switch(i)
 {
  case 1:
   printf("\a");
   break;
  case 2:
   printf("\a\a");
   break;
  case 3:
   printf("\a\a\a");
   break;

  default:
   break;

 }

 return 0;
}

5. 해설
  - switch-case 문으로 특정 조건에 따른 분기문장을 구현 했습니다.
  - prinf 함수에서 \a 인수가 비프음을 내는 값입니다.

6. 참고
  - 네이버 지식인
  - http://mwultong.blogspot.com/2006/06/c-printf-pc-beep.html : 비프음 코드 예제
  - http://www.cprogramming.com/tutorial/lesson5.html : switch-case 구조

Posted by 카켈




1. 목적
  - 경우에 따라 분기하는 제어문인 switch-case 문장을 이해한다.

2. 문제
  - no_10.txt 파일을 읽어 들여 각각 소문자 모음의 갯수와 알파벳 숫자, 전체 글자 수를 출력한다.
  - 모음을 구분하는 문장은 switch-case 문장을 쓰면 편리하다.
  - 출력형식

문자 'a' 의 개수 : 1204
문자 'e' 의 개수 : 2086
문자 'i' 의 개수 : 1154
문자 'o' 의 개수 : 1393
문자 'u' 의 개수 : 565
알파벳 문자의 개수 : 17954
전체 문자의 개수 : 26422
Press any key to continue

3. 이해
  - switch-case 분기 구문을 따로 이해할수 있는가?
  - 파일 입력 및 글자의 성질을 이해 할수 있는가?

4. 코드

#include <stdio.h>
#include <ctype.h>

int main()
{
 FILE *fp;
 char instr[255] = {0};
 long a,e,i,o,u,j;
 long total,alpha;

 a = e = i = o = u =j = total = alpha = 0;

 fp = fopen("no_10.txt","r");
 while(fgets(instr,255,fp))
 {
  j = 0;
  while(instr[j] != '\n')
  {
   if( isalpha(instr[j]) ) alpha++;

   switch(instr[j])
   {
   
    case 'a':
     a++;
     total++;
     break;

    case 'e':
     e++;
     total++;
     break;

    case 'i':
     i++;
     total++;
     break;

    case 'o':
     o++;
     total++;
     break;

    case 'u':
     u++;
     total++;
     break;
     
    default:
     total++;
     break;
   }

   j++;

  }

 }

 printf("문자 'a' 의 개수 : %d\n",a);
 printf("문자 'e' 의 개수 : %d\n",e);
 printf("문자 'i' 의 개수 : %d\n",i);
 printf("문자 'o' 의 개수 : %d\n",o);
 printf("문자 'u' 의 개수 : %d\n",u);
 printf("알파벳 문자의 개수 : %d\n",alpha);
 printf("전체 문자의 개수 : %d\n",total);

 fclose(fp);

 return 0;
}

5. 해설
  - 파일 구조체 알파벳 구문 이해는 이전 문제에 자세히 예제로 나와 있습니다.
  - switch case 구문은 조건에 따라 분기되어 수행된후 break 문으로 분기문을 빠져 나갑니다.
   특정 조건에 만족하지 않으면 default 문에서 수행되어 break 을 통해 빠져 나갑니다.
  - 한 문장을 읽었을때 줄내림 문자('\n') 가 나오기 전까지 계속 수행하게 while 조건을 만들었습니다.
  - 문제에 주어진 no_10.txt 는 임의로 넣었습니다.

6. 참고
  - switch-case 문 예

Posted by 카켈
이전페이지 1 다음페이지