Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C 언어로 숫자가 속한 범위(구간)를 출력하는 방법

문제 정의

주어진 숫자가 어느 범위(구간)에 속하는지 찾아서 출력하는 것이 이 글의 목표입니다. 예를 들어 45가 입력되면 "40 ~ 50 사이"라는 결과를 얻어야 합니다.

해결 원리

핵심 아이디어는 매우 간단합니다. C 언어에서 정수끼리 나누면 소수점 이하가 버려지고 몫만 남는다는 정수 나눗셈의 특성을 활용하는 것입니다. 이를 이용해 숫자가 속한 10 단위 구간의 하한값과 상한값을 구할 수 있습니다.

lower = (n / 10) * 10; /* 산술 연산자는 왼쪽에서 오른쪽으로 차례로 계산됨 */
upper = lower + 10;

동작 과정 살펴보기

숫자 n이 45라고 가정하고 계산 과정을 따라가 보겠습니다.

  • lower = (45 / 10) * 10 → 정수 나눗셈은 몫만 반환하므로 45 ÷ 10 = 4 → 4 × 10 = 40
  • upper = 40 + 10 = 50
  • 따라서 45가 속한 범위는 40 ~ 50입니다.

예제 프로그램 1

다음은 숫자의 범위를 출력하는 C 프로그램입니다.

#include<stdio.h>
main(){
    int n, lower, upper;
    printf("Enter a number:");
    scanf("%d",&n);
    lower = (n / 10) * 10; /* 산술 연산자는 왼쪽에서 오른쪽으로 계산됨 */
    upper = lower + 10;
    printf("Range is %d - %d", lower, upper);
    getch();
}

실행 결과

프로그램을 컴파일하여 실행하면 다음과 같은 결과가 출력됩니다.

Enter a number:25
Range is 20 – 30

25를 입력하면 25 ÷ 10 = 2, 2 × 10 = 20이 하한값이 되고, 여기에 10을 더해 30이 상한값이 됩니다. 즉 25는 20 ~ 30 구간에 속한다는 것을 확인할 수 있습니다.

예제 프로그램 2

같은 로직을 변수 이름만 바꿔 작성한 또 다른 버전의 프로그램입니다.

#include<stdio.h>
main(){
    int number, start, end;
    printf("Enter a number:");
    scanf("%d",&number);
    start = (number / 10) * 10; /* 산술 연산자는 왼쪽에서 오른쪽으로 계산됨 */
    end = start + 10;
    printf("Range is %d - %d", start, end);
    getch();
}

실행 결과

Enter a number:457
Range is 450 – 460

세 자리 숫자인 457을 입력해도 동일한 논리가 그대로 적용됩니다. 457 ÷ 10 = 45, 45 × 10 = 450이 하한값이 되고, 상한값은 460이 됩니다.

참고 사항

  • getch() 함수는 Windows 환경의 Turbo C 계열 컴파일러에서 사용되는 함수로, 최신 컴파일러(GCC 등)에서는 <conio.h> 헤더가 필요하거나 해당 함수 대신 getchar()를 사용하는 것이 좋습니다.
  • 표준 C에서는 main() 함수를 int main(void) 형태로 선언하고 마지막에 return 0;을 넣는 것이 권장됩니다.
  • 음수를 입력할 경우에도 같은 공식이 적용되지만, 예상과 다른 방향의 구간이 나올 수 있으므로 필요하다면 음수 처리 로직을 추가하는 것이 좋습니다.