[TIL]211013

Namung's Sea·2021년 10월 13일
0

Today I Learned

목록 보기
5/6
post-thumbnail

continue & break의 활용

문제 1

구구단을 출력하되 짝수 단(2단, 4단, 6단, 8단)만 출력되도록 하자. 또한 2단은 2 x 2까지, 4단은 4 x 4까지, 6단은 6 x 6까지, 8단은 8 x 8까지만 출력되도록 프로그램을 구현해 보자. 이렇게 어수선한 문제를 제시하는 이유는 continuebreak문의 사용법을 익히기 위해서다. 그러니 가급적이면 continuebreak문을 사용해서 이 문제를 해결하기 바란다.

🤔

도대체 어떻게 break를 중간에 껴서 활용하는지 모르겠다. 내 상상력의 한계...
break문 활용은 그냥 답안 코드를 보고 익히는 걸로 하고 일단 다른 걸 활용해서 문제를 풀어보기로 결심했다.
2단, 4단 등의 단을 변수 dan으로 정하고 뒤에 곱해지는 숫자는 변수 i로 지정한 다음 idan보다 작게 설정하면 되는 거 아니겠는가.
그래서 나온 코드는 다음과 같다.

코드

#include <stdio.h>

int main(void)
{
     int i;
     int dan = 2;                                                 // 2단부터 시작.

     printf("짝수단 구구단을 출력합니다.\n");
	
     while (dan <= 8)                                             // 8단까지 시행
     {
	  if (dan % 2 != 0)                                    // 홀수면 i++ 을 통해 짝수가 되게 함.
		continue;

	  for (i = 1; i <= dan; i++)                               // i는 dan보다 크면 안됨.
		printf("%d x %d = %d\n", dan, i, dan * i);   
		
	   dan++;
      }
	return 0;
}

위 코드에서 while문 대신에 for문을 써서

for (; dan <= 8; dan++)                                       
{
        if (dan % 2 != 0)                            
		continue;

	for (i = 1; i <= dan; i++)                    
		printf("%d x %d = %d\n", dan, i, dan * i);   
}

이렇게 사용해도 같은 결과값이 출력된다.

실행 결과

답안 코드

#include <stdio.h>

int main(void)
{
	int i;
	int dan;

	printf("짝수단 구구단을 출력합니다.\n");

	for (dan = 1; dan < 10; dan++)        // 구구단 진행
	{
		if (dan % 2 != 0)                 // 홀수면 for문으로 돌아가서 dan++시행해서 짝수로 만듦.
			continue;

		for (i = 1; i < 10; i++)
		{
			if (dan < i)                  // dan이 i보다 작다면 for문 종료.
				break;

			printf("%d x %d = %d\n", dan, i, dan * i);
			
		}

	}

	return 0;
}

코드를 잘 살펴보면 i를 이용한 for에서 조건문인 if문을 사용dani보다 작으면 for문의 조건을 멈출 거(break 사용)라고 설정하고 있다. 체크!

break 사용

: 반복문( while, for)을 중단할 때 사용!
for문 안에서 사용하되 break문 사용시 if의 조건을 둬서 ~~이러한 조건일 때 빠져나오도록 사용하기.

문제 2

다음 식을 만족하는 모든 A와 Z를 구하는 프로그램을 작성해보자.

  AZ
+ZA
ㅡㅡㅡ
99
참고로, 가능한 모든 수의 조합을 시도하기 위해서는 반복문을 중첩시켜야 한다.

코드

#include <stdio.h>

int main(void)
{
	int A, Z;

	printf("AZ+ZA = 99를 충족하는 값은\n");

	for (A = 0; A < 10; A++)           
	{
		for (Z = 0; Z < 10; Z++)
		{
			if ((A * 10 + Z) + (Z * 10 + A) != 99)       // AZ+ZA = 99가 아닌 경우,  
				continue;                            // for 반복.
			else			                     // AZ+ZA = 99인 경우,	
				printf("A는 %d, Z는 %d.\n", A, Z);    // 해당되는 A값과 Z값을 출력.
		}
	}

	return 0;
}

실행 결과

답안 코드는 전역변수에 int result;를 추가하고 for (Z = 0; Z < 10; Z++)문의 내용의 내용이 다음과 같이 작성되어 있다.

for (Z = 0; Z < 10; Z++)
{
    if(A==Z)            // A값과 Z값이 같은 경우 반복문으로 다시 돌아감.
        continue;
    result = (A*10+Z)+(Z*10+A);
    if(result==99)     // reult가 99인 경우,
       printf("%d%d+%d%d=%d \n", A, Z, Z, A, result);  // 해당 값을 출력.
}
 
 
 
profile
개발자로 시작| 공부한 것을 기록합니다.

0개의 댓글