Prosto

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

Programing/C Programing

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

Prosto 2016. 9. 24. 01:46

if문과 for문에 대한 이해가 부족하면 아래의 글을 먼저 봐주세요.

 

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

 

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

 

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

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

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

 

 

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

이번 시간의 문제는 총 3개입니다.

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

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

 (이번 글부터 설명은 프로그램 내에서 중요한 부분만 다룹니다.)

 

자 그럼 시작해볼까요?

 

문제 1.

 숫자를 입력받고 1부터 해당 숫자 사이에 존재하는 홀수를 구하는 프로그램을 만드시오.

 

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


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





 

 

 

 

 



문제 2.

 숫자를 입력받고 1부터 해당 숫자 사이에 존재하는 소수를 구하는 프로그램을 만드시오.

  (소수란 1과 자기 자신만으로 나누어 떨어지는 1보다 큰 양의 정수입니다.

        -> 약수가 1과 자기 자신만 있는 수를 말합니다.)

   ex) 소수의 종류들... 2(1,2),  3(1,3),  5(1,5),  7(1,7),  11(1,11), ...입니다.

 

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


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

 

 

 


 

 

 

 

 



문제 3.

 숫자를 두 개 입력받고 해당 숫자들의 공약를 구하는 프로그램을 만드시오.

  (약수란 자기 자신(입력된 숫자)이 나머지 없이 나누어 떨어지는 수들입니다.)

  (공약수는 해당되는 수들이 공통으로 가지고 있는 약수를 말하는거죠?)

   ex) 약수의 종류들... 2(1,2),  3(1,3),  5(1,5),  7(1,7),  11(1,11), ...입니다.

 

(출력 결과 예1 : 12, 8입력)


(출력 결과 예2 : 120, 132입력)


(출력 결과 예3 : 16, 16입력 [해당 숫자의 약수가 나옴] )


  

 

 

 

 

 

 

 

 



 

 

 

완성 소스와 설명

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

 

 

 문제 1.

10번 라인에서 for문을 이용하여 1부터 입력받은 수(num)까지 반복합니다.

 

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

   if문을 통하여 현재 변수(i)가 홀수인지 확인합니다. (2로 나눈 나머지가 1인지)


12번 라인에서 11번 라인의 조건이 맞으면 해당 숫자(i)를 출력합니다.



여기서 가장 중요한 부분은 for문과 if문의 사용이겠죠?
 다른 방법으로는 15번 라인부터 17번 라인까지입니다.
 증감부를 이용하여 홀수를 출력하는 방법을 확인할 수 있습니다.





 문제 2.

5번 라인에서 약수의 수를 셀 count 변수를 선언했습니다.


11번 라인에서 for문을 이용하여 1부터 입력받은 수(num)까지 반복합니다.

 (반복은 for(;;){  }로 중괄호 내부의 내용을 실행합니다.)


12번 라인에서 11번 라인의 for문의 조건이 맞아 반복될 때마다

 초기에 count 변수를 0으로 초기화해줍니다.

13번 라인에서 for문을 이용하여 2부터 현재 반복되는 숫자인 i까지 1씩 증가하며 반복합니다. 

  1과 자기 자신만 있으면 소수이기 때문에

  , 1과 자기 자신은 제외하고 그 사이에 약수가 몇 개있는지 확인하는 방식입니다.


14번 라인에서 13번 라인for문 조건부가 맞다면,

  if문을 통하여 i(소수 판별 대상) / j(2부터 i-1까지)의 나머지가 0인지 확인합니다.

  (반복하여 현재 숫자(i)의 약수를 확인하는 부분.)


15번 라인에서는 14번 라인의 조건이 맞다면 약수의 수를 세는 count변수의 값을 1 증가합니다.

16번 라인은 곧바로 약수를 세는 내부 for문을 중지시킵니다.

  (1과 자기 자신 외의 약수가 나왔기 때문에 더 볼 필요도 없이 소수 아님)


19번 라인에서는 count변수의 값이 0인지 확인합니다.

20번 라인에서는 19번 라인의 조건이 맞다면 현재 소수 판별 대상(i)를 출력해줍니다.






문제 3.

5번 라인에서 더 큰 수를 저장할 biggerNum 변수를 선언했습니다.


13번 라인에서 if문으로 num1과 num2 중 더 큰 수를 비교하고,

  num1이 큰 경우 num1을 biggerNum에 저장,

  그렇지 않다면 num2를 biggerNum에 저장하였습니다.(13~18번 라인)


20번 라인에서 for문을 이용하여 1부터 저장된 더 큰 수(biggerNum)까지 반복합니다.


21번 라인에서는 20번 라인의 for문 조건부가 맞다면,

  if문으로 num1을 현재 for문으로 반복되는 수(i)로 나눈 나머지를 이용해 약수인지 확인합니다.


22번 라인에서는 21번 라인 의 조건이 맞았다면, 이번에는

  if문으로 num2을 현재 for문으로 반복되는 수(i)로 나눈 나머지를 이용해 약수인지 확인합니다.


23번 라인에서는 위 2122라인 모두 조건이 맞아야 들어오기 때문에,

  두 수의 공약수임을 확인할 수 있습니다. 현재 해당 숫자(i)를 출력합니다.






 이번 시간부터는 중요한 라인들만 설명을 달았죠?

 앞으로도 이러한 방식으로 달도록 하겠습니다.

 (혹시 이해가 더 필요한 설명이 있으시다면 말씀해주세요.)


 

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

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

 

 

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


Comments