04. 구구단을 만들어 보자, 2001

@codemaru · October 26, 2011 · 7 min read

안녕하세요~ 오늘은 지난번에 배웠던 if문과 함께 반복문에 대해서 익혀보도록 하겠습니다~ 지난번 숙제는 다 하셨나요..?! 이번 강좌부터는 숙제는 계속 나가지만 해답은 올리지 않도록 하겠습니다. 왜냐하면 해답을 그냥 자꾸 올리니까 어려분의 상상력을 억제하는 듯한 느낌이 드네요. 풀어보고 모르시겠으면 Q&A란에 질문하시면 제가 아는 한도 내에서 답글을 올리도록 하겠습니다~ 그럼 오늘도 시작하도록 하죠~~!!…

오늘 배울것은 for라는 놈입니다~ 이놈은 아마도 C++언어에서 가장 많이 접하는 놈이 아닐까 생각합니다. 그럼 한번 for문의 문법부터 살펴보고 가도록 합시다~

for(초기문; 종료조건; 반복할것)
   실행문;

조금 난해해 보일수도 있겠지만 저게 for문의 모든 요소입니다. 그럼 지금부터 설명하도록 하죠~ 우선 한가지 저 for문에 걸리는 실행문이 두개 이상이면 어떻게 해야한다구요?!… 예… 바로 {}로 묶어줘야 겠죠~~ 항상 C++에서는 한 구문에 걸리는 문장이 두개이상이면 {}로 묶어야 합니다. 그것을 블록을 만든다라구 표현하죠~ for문의 요소를 보면 세가지가 있습니다. 초기문, 종료조건, 반복할것인데. 하나씩 뜯어보도록 하죠. 제일 처음 저 구문이 실행되면 제일 처음 초기문이 실행되고 실행문이 실행되고, 다음으로 반복할 것이 실행됩니다. 그 다음 종료조건을 검사하고 종료조건이 참이면 다시 실행문을 실행하고 반복할 것을 실행한다음 종료조건을 검사합니다. 그렇게 종료조건이 거짓일때까지, 계속 반복하는 것이죠. 말로 적으니까 조금 난해해 보이는데. 하나씩 적으면서 따져보면 금방 이해가 가실 겁니다. 그럼 아래 예를 보도록 하죠!!!

for(int i = 0; i < 10; ++i)
   cout << i << endl;

위 소스를 실행하면 결과가 어떻게 나올까요? 아마도 0부터 9까지 출력이 될 겁니다. 아시겠죠. 그럼 아래 문장은 어떻게 될까요?

for(int i = 0; i < 10; cout << i << endl, ++i)
   ;

똑같은 결과가 출력될 겁니다. 조금만 생각해 보면 금방 알수가 있겠죠~ 다음에를 보도록 합시다.

for(int i = 0; i < 10; ) 
{
   cout << i << endl;
   ++i;
}

위에 것도 똑같은 예 입니다. 이제 저것과 똑같은 예를 남아있는데로 한번에 열거해 보도록 하죠~

int i = 0;
for( ; ; )
   if(i < 10) 
   {
      cout << i << endl;
      i++;
   } 

for(int i = 0; ; )
   if(i < 10) 
   {
      cout << i << endl;
      i++;
   } 

for(int i = 0; ; i++)
   if(i < 10)
      cout << i << endl;

대충 이정도 보셨으면 마치 말장난 처럼, 똑같은 문법을 여러방법으로 돌려가면서 사용하는 것을 보셨을 겁니다. 처음 보시는 분들은 저런걸 왜 저렇게 머리아프게 다양한 방법으로 사용하는가 궁금해 하실텐데, 나중에 되면 저걸 알고 모르고가 얼마나 큰 차이인지 아실 겁니다. 가까운 예로 문자열을 입력받는 함수를 C로 한번 작성한다고 생각을 해 봅시다. 보통사람은 아래와 같이 작성합니다.

int get_str(char *str) 
{
   char temp[255];
   char ch;
   int i = 0; 

   ch = getchar();
   while(ch != 13) 
   {
      temp[i] = ch; 

      ch = getchar();
      i++;
   } 

   strcpy(str, temp);
   return 0;
}

보통 사람의 소스였습니다.. 조금 C언어를 공부한 사람들은 다음과 같이 작성하죠~~~!

int get_str(char *str) 
{
   char temp[255], ch;
   int i = 0; 

   while((ch = getchar()) != 13)
      temp[i++] = ch; 

   strcpy(str, temp);
   return 0;
}

어때요… 훨씬 깔끔해 졌죠… 하지만… 완벽하게 for문을 이해한 사람은 아래와 같이 작성합니다~~~~

int get_str(char *str) 
{
   char temp[255], ch;
   int i; 

   for(i = 0; (ch = getchar()) != 13; ++i)
      temp[i] = ch; 

   strcpy(str, temp);
   return 0;
}

이런 연유로 for문을 여러방향으로 사용할 수 있어야 합니다. 아시겠죠?! 이 정도 겅부하셨으면 아마 이제는 어떠한 for 문장이 나와도 두렵지 않을 겁니다. 그럼 오늘의 본론 구구단 프로그램을 작성 해 볼까요?!

for(int i = 1; i < 10; i++)
   cout << "2 * " << i << " = " << i * 2 << endl;

구구단 이단을 출력하는 프로그램입니다. 이제 몸에 금방 아!. 하고 느낌이 오죠~ 그럼 오늘 강좌는 여기서 마치도록 하겠습니다. 다음시간에는 while구문에 대해서 설명하도록 하죠!!!

숙제!!!

구구단을 2단부터 9단까지 출력하는 프로그램을 작성해보세요!! 단,. 각 단 사이에는 구분줄이 하나씩 들어가야 합니다. 아래 출력처럼 출력이 되도록작성해 보세요!!

[Hint: C++에서의 산술연산자에는 다음이 있다… 곱하기(*), 나누기(/), 더하기(+), 빼기(-), 나머지(%) 이걸 이용하면, 금방 답을 찾으실 수 있얼거예엽~~~]

> 2\*1 = 2  
> 
> 2\*2 = 4  
> 
> …  
> 
> …  
> 
> 2\*9 = 18  
> 
> ============== <== 이넘이 출력되도록…  
> 
> 3\*1 = 3  
> 
> ….
> 
> 

조금만 고민해 보면 금방 답이 보이실 겁니다~~~

@codemaru
돌아보니 좋은 날도 있었고, 나쁜 날도 있었다. 그런 나의 모든 소소한 일상과 배움을 기록한다. 여기에 기록된 모든 내용은 한 개인의 관점이고 의견이다. 내가 속한 조직과는 1도 상관이 없다.
(C) 2001 YoungJin Shin, 0일째 운영 중