layer7

Layer 7 03 과제

건_빵 2019. 3. 31. 13:20

# 문제 

  1) 팩토리얼(!) 프로그램 구현 
      - n이 입력되면 n!의 값을 출력하시오.

  2) 두 자연수 a, b 사이의 구간에 대해서
      홀수는 더하고 짝수는 빼는 식을 보여준 후 결과를 출력하시오.

  ex)
      - a = 5, b=10 일 경우, 5-6+7-8+9-10=-3
      - a = 6, b=9 일 경우, -6+7-8+9=+2

  3) 별찍기 문제 풀어오기 (아래에 사진)

 

# 문제 풀이

 1. 팩토리얼(factorial) 

      - 1부터 어떤 양의 정수 n까지의 정수를 모두 곱한 것을 말하며 n!로 나타낸다.

         또한 0!=1로 약속한다. 

      - ex) n=5일 경우 n!=   1*2*3*4*5 = 120   

 

    1-1. 프로그램 코드

factorial program

  1-2. 동작 설명

    - 먼저, 입력 받는 값을 저장할 변수 n을 선언하고, 그 후 정수를 입력 받는다. 

      그 후 1~n까지 모든 수를 곱한 수를 저장할 변수 sum을 만든 후

      for문을 이용해 i(1)부터 n이 될 때까지 i의 값을 1씩 증가 시키며

      i의 값을 변수 sum과 곱한 후 다시 저장한다. 

      그 후 printf() 함수로 팩토리얼(factorial) 값을 출력한다.  

 

  1-3. 실행 결과 ex) 

1-4. 프로그램의 취약점

 -팩토리얼의 값이 int형이 표현 할 수 있는 범위를 넘어가면 오버플로우(overflow)가 일어남.

 -> 좀 더 표현 범위가 큰 long long int를 사용하면 되지만 long long int의 범위를 넘어가는

     쓰면 또 오버플로우(overflow)가 일어남. 

 

 

 2.  두 자연수 a, b 사이의 구간에 대해서
    홀수는 더하고 짝수는 빼는 식을 보여준 후 결과를 출력하시오.

    2-1 프로그램 코드

  2-2 동작 설명

     -  입력 받을 변수 a, b를 만들고, 결과를 저장할 result 변수를 만듦.

        그 후 scanf() 함수로 입력을 받고, 만약 a가 b보다 크다면

        (먼저 입력 받은 값이 후에 입력 받은 값 보다 크다면) 둘의 값을 교환(swap)한다. 

        for문을 이용해 변수 a가 b 보다 작거나 같을 때까지 변수 a를 1씩 증가시키며 반복을 한다. 

        for문 안에 result+=a%2?a:-a;라는 부분은 삼항 연산자를 사용한 부분이며.

        a라는 변수를 2로 나누었을 때 1이라면 a를 result+=a하고, 만약 아니라면 

        result+=-a를 한다. 그 후 값을 출력한다. 

 

  2-3 실행 결과 ex) 

 

 

3~5. 여러가지 모양의 별 찍기.

  3-1 프로그램 코드

  3-2 동작 설명

     - 첫 번째 for문을 이용해 5번 반복.

       두 번째 for문은 i의 숫자 만큼 반복하여 별을 찍는다. 

       예를 들어 i=1이라고 했을 때 1번 반복을 하여 별 1개를 찍고, for문을 탈출한다.

       그 후  printf("\n") 부분을 만나 줄바꿈을 한다.

    

     - 요약: 첫 번째 for문=세로줄, 두 번째 for문 = 가로줄  

 

  3-3 실행 결과 ex) 

 

 

 

4-1 프로그램 코드

4-2 동작 설명

  - 위 3번의 별 찍기를 거꾸로 한 형태.  

    첫 번째 for문은 3과 동일하게 5번을 반복한다. 

    하지만 차이점은 5~1까지 -1씩 감소시키며 반복한다.

    두 번째 반복문은 똑같이 i 만큼 반복하여 별을 찍는다.

    i=5일 때 j도 5번 반복하기 때문에 

    처음에 별 5개, 4개, 3개, ... 이런식으로 감소하며

    별이 찍히게 된다.

 

4-3 프로그램 실행 결과 

 

 

5-1 프로그램 코드 

5-2 동작 설명

   - 먼저 4~0까지 -1만큼 감소 시키며 총 5번을 반복한다 .

      두 번째 for문에서는 1~i까지 반복을 하며 공백(space)를 출력 한다. 

      그 후 for문 하나를 더 써서 5-i로 별의 개수를 찍는다.

    

   -공백을 먼저 모두 출력하고, 그 후에 별을 찍는다는 생각으로 

    프로그램을 만들었다. 

 

4-3 프로그램 실행 결과 

 

 

조금 보다가 어려운 부분이 있으시거나

잘못된 부분이 있다면 댓글로 꼭 알려주세요!.

봐주셔서 감사합니다.!