소개
이 실습에서는 C 프로그래밍을 사용하여 숫자를 서로 다른 진법으로 변환하는 방법을 배웁니다. 이 실습은 다음 단계를 포함합니다.
- 사용자 입력으로 숫자와 목표 진법을 읽습니다.
- 나눗셈과 나머지를 사용하여 변환 알고리즘을 구현하여 10 진수를 목표 진법으로 변환합니다.
- 변환된 숫자를 출력합니다.
이 실습은 C 로 기수 변환 프로그램을 개발하기 위한 단계별 가이드를 제공하며, 수론 및 이산수학에서 필요한 개념을 다룹니다.
이 실습에서는 C 프로그래밍을 사용하여 숫자를 서로 다른 진법으로 변환하는 방법을 배웁니다. 이 실습은 다음 단계를 포함합니다.
이 실습은 C 로 기수 변환 프로그램을 개발하기 위한 단계별 가이드를 제공하며, 수론 및 이산수학에서 필요한 개념을 다룹니다.
이 단계에서는 C 프로그래밍에서 숫자와 변환할 목표 진수를 읽는 방법을 배웁니다. 사용자가 10 진수를 입력하고 변환할 진수를 지정할 수 있도록 간단한 프로그램을 만들 것입니다.
먼저 기수 변환 프로그램을 위한 새로운 C 파일을 생성합니다.
cd ~/project
nano base_converter.c
이제 숫자와 목표 진수를 읽는 초기 코드를 작성합니다.
#include <stdio.h>
int main() {
int number, base;
// 사용자에게 10 진수 입력을 요청합니다.
printf("변환할 10 진수를 입력하세요: ");
scanf("%d", &number);
// 사용자에게 목표 진수를 입력하도록 요청합니다.
printf("변환할 목표 진수를 입력하세요 (2-16): ");
scanf("%d", &base);
// 진수 입력 유효성 검사
if (base < 2 || base > 16) {
printf("잘못된 진수입니다. 2 에서 16 사이의 진수를 입력하세요.\n");
return 1;
}
printf("입력된 숫자: %d\n", number);
printf("목표 진수: %d\n", base);
return 0;
}
프로그램을 컴파일하고 실행해 봅시다.
gcc base_converter.c -o base_converter
./base_converter
예시 출력:
변환할 10진수를 입력하세요: 42
변환할 목표 진수를 입력하세요 (2-16): 2
입력된 숫자: 42
목표 진수: 2
코드 설명:
scanf()를 사용하여 사용자 입력으로부터 10 진수와 목표 진수를 읽습니다.이 단계에서는 나눗셈과 나머지를 사용하여 10 진수를 다른 진수로 변환하는 핵심 알고리즘을 구현합니다. 이전 프로그램을 수정하여 변환 로직을 추가할 것입니다.
기존 파일을 열고 코드를 업데이트합니다.
cd ~/project
nano base_converter.c
이전 코드를 다음 구현으로 바꿉니다.
#include <stdio.h>
#include <string.h>
// 10 진수를 임의의 진수로 변환하는 함수
void convertToBase(int number, int base, char *result) {
int index = 0;
char digits[] = "0123456789ABCDEF";
// 0 인 경우 특수 케이스 처리
if (number == 0) {
result[index++] = '0';
result[index] = '\0';
return;
}
// 나눗셈과 나머지를 사용하여 변환
while (number > 0) {
int remainder = number % base;
result[index++] = digits[remainder];
number = number / base;
}
// 문자열 뒤집기
result[index] = '\0';
for (int i = 0, j = index - 1; i < j; i++, j--) {
char temp = result[i];
result[i] = result[j];
result[j] = temp;
}
}
int main() {
int number, base;
char result[33]; // 최대 32 비트 + null 종결자
// 사용자에게 10 진수 입력을 요청합니다.
printf("변환할 10 진수를 입력하세요: ");
scanf("%d", &number);
// 사용자에게 목표 진수를 입력하도록 요청합니다.
printf("변환할 목표 진수를 입력하세요 (2-16): ");
scanf("%d", &base);
// 진수 입력 유효성 검사
if (base < 2 || base > 16) {
printf("잘못된 진수입니다. 2 에서 16 사이의 진수를 입력하세요.\n");
return 1;
}
// 변환 결과 출력
convertToBase(number, base, result);
printf("10 진수 %d를 %d진수로 변환한 결과: %s\n", number, base, result);
return 0;
}
프로그램을 컴파일하고 실행합니다.
gcc base_converter.c -o base_converter
./base_converter
예시 출력:
변환할 10진수를 입력하세요: 42
변환할 목표 진수를 입력하세요 (2-16): 2
10진수 42를 2진수로 변환한 결과: 101010
변환할 10진수를 입력하세요: 255
변환할 목표 진수를 입력하세요 (2-16): 16
10진수 255를 16진수로 변환한 결과: FF
코드 설명:
convertToBase() 함수는 핵심 변환 알고리즘을 구현합니다.이 마지막 단계에서는 변환된 숫자를 표시하기 위한 더욱 포괄적인 출력 및 서식 지정 옵션을 추가하여 기수 변환 프로그램을 향상시킬 것입니다.
기존 파일을 열고 코드를 업데이트합니다.
cd ~/project
nano base_converter.c
개선된 출력 및 서식 지정으로 코드를 업데이트합니다.
#include <stdio.h>
#include <string.h>
// 10 진수를 임의의 진수로 변환하는 함수
void convertToBase(int number, int base, char *result) {
int index = 0;
char digits[] = "0123456789ABCDEF";
int original = number; // 표시를 위해 원래 숫자 저장
// 0 인 경우 특수 케이스 처리
if (number == 0) {
result[index++] = '0';
result[index] = '\0';
return;
}
// 나눗셈과 나머지를 사용하여 변환
while (number > 0) {
int remainder = number % base;
result[index++] = digits[remainder];
number = number / base;
}
// 문자열 뒤집기
result[index] = '\0';
for (int i = 0, j = index - 1; i < j; i++, j--) {
char temp = result[i];
result[i] = result[j];
result[j] = temp;
}
}
// 자세한 변환 정보를 출력하는 함수
void printConversionInfo(int decimal, int base, const char *converted) {
printf("\n--- 숫자 변환 세부 정보 ---\n");
printf("원래 숫자 (10 진수): %d\n", decimal);
printf("목표 진수: %d\n", base);
printf("변환된 숫자: %s\n", converted);
// 추가적인 진수 표현
printf("\n진수 표현:\n");
printf(" 10 진수: %d\n", decimal);
// 2 진수 표현
if (base != 2) {
char binaryResult[33];
convertToBase(decimal, 2, binaryResult);
printf(" 2 진수: %s\n", binaryResult);
}
// 16 진수 표현
if (base != 16) {
char hexResult[9];
convertToBase(decimal, 16, hexResult);
printf(" 16 진수: %s\n", hexResult);
}
}
int main() {
int number, base;
char result[33]; // 최대 32 비트 + null 종결자
// 사용자에게 10 진수 입력을 요청합니다.
printf("변환할 10 진수를 입력하세요: ");
scanf("%d", &number);
// 사용자에게 목표 진수를 입력하도록 요청합니다.
printf("변환할 목표 진수를 입력하세요 (2-16): ");
scanf("%d", &base);
// 진수 입력 유효성 검사
if (base < 2 || base > 16) {
printf("잘못된 진수입니다. 2 에서 16 사이의 진수를 입력하세요.\n");
return 1;
}
// 숫자 변환
convertToBase(number, base, result);
// 자세한 변환 정보 출력
printConversionInfo(number, base, result);
return 0;
}
프로그램을 컴파일하고 실행합니다.
gcc base_converter.c -o base_converter
./base_converter
예시 출력:
변환할 10진수를 입력하세요: 42
변환할 목표 진수를 입력하세요 (2-16): 16
--- 숫자 변환 세부 정보 ---
원래 숫자 (10진수): 42
목표 진수: 16
변환된 숫자: 2A
진수 표현:
10진수: 42
2진수: 101010
16진수: 2A
코드 설명:
printConversionInfo() 함수를 추가했습니다.이 실험에서는 C 프로그래밍에서 숫자와 변환 대상 진수를 읽는 방법을 배웠습니다. 사용자가 10 진수를 입력하고 변환할 진수를 지정할 수 있는 간단한 프로그램을 만들었습니다. 또한, 나눗셈과 나머지를 사용하여 10 진수를 다른 진수로 변환하는 핵심 알고리즘을 구현했습니다. 마지막으로 원하는 진수로 변환된 숫자를 출력하는 방법을 배웠습니다.
이 실험에서 얻은 주요 학습 내용은 사용자 입력을 읽기 위해 scanf() 함수를 사용하는 방법, 대상 진수가 유효 범위 내에 있는지 확인하기 위해 입력을 검증하는 방법, 그리고 나눗셈과 나머지를 사용하여 기수 변환 논리를 구현하는 방법입니다. 이 프로그램은 C 프로그래밍에서 이러한 개념의 실제 적용 사례를 보여줍니다.