Prosto

if문과 for문이 사용된 문제들 -2 -C언어 본문

Programing/C Programing

if문과 for문이 사용된 문제들 -2 -C언어

Prosto 2016. 9. 22. 14:27
if문과 for문에 대한 이해가 부족하면 아래의 글을 먼저 봐주세요.

 

if문(조건문) 이해, 예제 -C언어

 

for문(반복문) 이해, 예제 -C언어

 

프로그래밍을 이용하여 프로그램을 만들 때

빠지지 않는. 가장 중요한 if문과 for문에 대하여 제대로 익히기 위해

if문(조건문)과 for문(반복문) 문제(예제)들을 풀어보도록 합시다.

 

 

저번 시간과 마찬가지로 진행됩니다.

이번 시간의 문제는 총 4개입니다.(문제 3 + 보너스 문제 하나 더)

 각 문제에 대한 출력 결과 예시와 힌트

 그리고 완성된 소스와 그에 대한 설명이 함께 제공될 겁니다.

 

 

자 그럼 시작해볼까요?

 

문제 1.

 숫자를 입력받고 해당 숫자의 팩토리얼(factorial)을 구하는 프로그램을 만드시오.

  (팩토리얼이란 1부터 n까지의 정수를 모두 곱한 것을 말합니다.)

   ex) 3!(3팩토리얼) = 1*2*3 = 6,  4! = 1*2*3*4 = 24입니다.

      단, 예외로 0!은 1입니다.(1!은 1 그대로고요.)

 

(출력 결과 예1 : 4입력)

 

(출력 결과 예2 : 0입력)

 

 

 

 

 

 

 

 

 

 

 

 

문제 2.

 숫자를 입력받고 해당되는 단구구단을 출력하는 프로그램을 만드시오.

 

 

(출력 결과 예1 : 2입력)

 

(출력 결과 예2 : 7입력)

 

 

 

 

 

 

 

 

 

문제 3.

 구구단을 2단부터 9단까지 전체 출력해주는 프로그램을 만드시오.

 

 

(출력 결과 예1 : 시작 부분)

 

(출력 결과 예2 : 끝 부분)

 

 

 

 

 

 

 

 

 

 

 

 

보너스 문제 (문제3으로부터).

 구구단을 2단부터 9단까지 전체 출력해주는데, 출력 형태를 아래와 같이 바꾸시오.

 

 

(출력 결과 예)

 

 

 

 

 

 

 

 

 

 

 

완성 소스와 설명

(소스는 스크린샷입니다. [소스가 화면에 안 들어올 정도로 길다면 따로 올려드리고요.] )

 

 

 문제 1.

4번 라인에서 scanf를 통하여 입력을 받을 대상인 num이라는 int(정수형) 변수를 선언했습니다.

5번 라인에서 factorial 값을 저장할 대상인 fNum이라는 int(정수형) 변수를 선언하고 1로 초기화 했습니다.

6번 라인에서 printf를 통하여 콘솔화면에 숫자 입력 : 이라고 출력했습니다.

7번 라인에서 scanf를 통하여 콘솔창에서 입력을 받았습니다.(입력 전에는 대기)

 

11번 라인에서 if문을 이용하여 0이 아닌지 예외를 확인합니다. (0이면 무조건 1이니)

 

12번 라인11번 라인조건부가 맞는 경우 반복적으로 실행되는 부분입니다.(1부터 num까지)

   1부터 입력받은 수까지 1씩 증가하며 반복합니다.

13번 라인12번 라인의 조건이 맞는 경우 실행되는 부분입니다. fNum에 i를 곱하고 있습니다.

   fNum *= i;는 fNum = fNum * i;와 같습니다.

 

16번 라인에서 printf를 통하여 Factorial의 값을 알려줍니다.

 

 

 

 

 문제 2.

 

4번 라인에서 scanf를 통하여 입력을 받을 대상인 num이라는 int(정수형) 변수를 선언했습니다.

5번 라인에서 printf를 통하여 콘솔화면에 "구구단 - 단 입력 : "이라고 출력했습니다.

6번 라인에서 scanf를 통하여 콘솔창에서 num에 입력을 받았습니다.(입력 전에는 대기)

 

10번 라인에서 반복문을 통하여 1부터 9까지 1씩 증가하며 반복합니다.

11번 라인에서 printf를 이용하여 %d X %d = %d로 단, 곱할 수, 곱한 값을 출력합니다.

 

 

 

 

문제 3.

4번 라인에서 printf를 통하여 콘솔화면에 "구구단 - 단 입력 : "이라고 출력했습니다.

 

8번 라인에서 반복문(1)을 통하여 2부터 9까지 1씩 증가하며 반복합니다.

9번 라인에서 printf를 이용하여 몇 단인지 출력합니다.

 

10번 라인에서 다시 반복문(2)을 통하여 1부터 9까지 1씩 증가하며 반복합니다.

11번 라인에서 printf를 반복문(1)과 반복문(2)를 통하여 얻은 값으로 곱셈을 출력합니다.

 

 

 

 

보너스 문제 (문제3으로부터).

4번 라인에서 printf를 통하여 콘솔화면에 "구구단 - 단 입력 : "이라고 출력했습니다.

 

7번 라인에서 반복문(1)을 통하여 0부터 2까지 1씩 증가하며 반복합니다.

   2345 / 6789단으로 나눠 출력하기 위한 덩어리의 수 입니다. (주석 참고)

 

10번 라인에서 반복문(2-1)을 통하여 2부터 6까지 1씩 증가하며 반복합니다.

   위의 7번 라인에서와 마찬가지로 2345 / 6789로 나눠서 현재 몇 단인지를 먼저 출력하기 위한 for문입니다.

11번 라인에서 10번 라인의 조건이 맞는동안 -%d단-\t\t을 출력합니다.

   여기서 %d는 (i1*4)+j로 i1은 덩어리 0 1이고, j는 2,3,4,5입니다.

     그렇다면 i1이 0일 때는 2 3 4 5단이 출력되고, i1이 1일 때는 6 7 8 9단이 출력될 것입니다.

 

13번 라인에서 printf를 이용하여 개행(줄바꿈)을 해줍니다.

 

15번 라인에서 반복문(2-2)를 통하여 1부터 9까지 1씩 증가하며 반복합니다.(곱할 값인 1-9)

16번 라인에서 다시 반복문(3)을 통하여 1부터 4까지 1씩 증가하며 반복합니다.(한 줄에 출력할 단의 수 1-4)

17번 라인에서 printf를 반복문(1)과 반복문(2-2), 반복문(3)를 통하여 얻은 값으로 곱셈을 출력합니다.

   첫 번째 %d의 값인 (i1*4) + i2 + 1은 단을 나타내는 수이고, 두 번째 값인 j는 곱할 값,

   세 번째 값인 ( (i1*4) + i2 + 1) * j은 곱한 값입니다.

   그 결과를 출력한 후 탭(일정 간격 띄움) 후 다음 단의 해당 곱할 값을 계산합니다.

   그래야 2X1 = 2    3X1 = 3    4X1 = 4 같이 세 개가 한 줄에 나타납니다.

 

19번 라인에서 16번 라인의 for문이 끝난 후 printf를 이용하여 개행(줄바꿈)을 해줍니다.

 

그렇게 반복작업을 통하여 나오는 최종 결과가 아까 본 화면입니다.

이렇게 for문을 어떻게 사용하느냐에 따라 다른 형태로 출력해줄 수도 있습니다.

 

 

 

마지막으로 두 개의 단씩 4번에 걸쳐 출력된 결과와 소스를 보시고,

어디가 어떻게 바뀌었는지 확인해보세요.(주황점으로 체크된 부분입니다.)

(바뀐 출력 결과 예 : 시작 부분)

 

(바뀐 출력 결과 : 끝 부분)

 

(바뀐 출력 형태의 소스)

 

 

 

 이번 시간까지는 변수 선언, printf, scanf 까지 모두 설명을 달겠지만,

 printf, scanf는 아주 기본적인 부분이니 세 번째 시간부터는 생략하겠습니다.

 (변수 선언도 특별히 의미가 있지 않다면 주석 정도로 처리하겠습니다.)

 (차라리 그 시간에 if와 for, 로직에 대한 설명을 하겠습니다.)

 

 

if문과 for문이 사용된 문제들 두 번째 글이었습니다.

다음 글에서 또 다양한 문제들을 올리도록 하겠습니다.

 

 

궁금한 점 있으시면 댓글이나 따로 메일로 질문하시면 시간되는 대로 답변드리겠습니다. ( 연락 )


Comments