본문 바로가기
프로그램/C언어 1000제

C언어 20제] C언어 콘서트 CHAPTER 6 p242 도전문제 (3)

by 건티 2021. 11. 25.
728x90

출처 : 반크(독도 포스터)

 

도전문제]

3) 1번이 아니고 10번 맞추면 종료하도록 소스를 변경해보자.

 

 

참고풀이]

//Dev-C++ 5.11로 작업함.
#include <stdio.h>
#include <stdlib.h> //rand(), srand()
#include <time.h> //time()

int main()
{
   int i,j;//반복변수 
   int ans;//사용자 답 변수 
   int x,y;//임의의 수를 넣을 변수 
   int chk;//+(1), -(2), *(3), /(4) 부호 변수 
   int key;//산수 문제를 계속 출제할 지 체크변수
   int count;//문제를 맞춘 개수를 세는 변수 
   char ch;//산술기호 변수


   //문제를 출제할 때 마다 다른 문제를 출제하기 위하여
   //시간별로 문제를 발생할 수 있도록 srand()로 초기화 설정한다. 
   srand(time(NULL));

   printf("산수 문제를 자동으로 출제합니다.\n");
   printf("(정답을 10개 맞추어야 문제 출제를 종료합니다.)\n");

   for(count=1;count<=10;count++)
   {
      chk=rand()%4+1;//1~4 중 임의의 수를 발생한다. 
      x=rand()%100;//0~99사이의 임의의 수를 발생한다. 
      //나누기는 분모가 0이면 안된다.
      do{
         y=rand()%100;//0~99사이의 임의의 수를 발생한다.
      }while(chk==4 && y==0);

      if(chk==1) ch='+';
      else if(chk==2) ch='-';
      else if(chk==3) ch='x';
      else ch='/';
      key=0;

      while(1)
      {
         if(chk==4) printf("나누기 연산은 몫만 입력하세요.\n");
         printf("%d %c %d = ",x,ch,y);
         scanf("%d",&ans);

         switch(chk)
         {
           case 1: if(x+y==ans) key=1; break;
           case 2: if(x-y==ans) key=1; break;
           case 3: if(x*y==ans) key=1; break;
           default: if((int)(x/y)==ans) key=1;
         }
         if(key) break;
         printf("틀렸습니다.\n");
         printf("정답을 맞출 때까지 계속 반복됩니다.\n");
      }

      printf("맞았습니다.\n");
   }

   printf("수고하셨습니다.\n");
   return 0;
}

 

참고풀이 결과]

 

 

 

대한민국의 아름다운 영토, 독도의 가을

 

반응형

댓글