문제
switch-case 문을 사용하지 않고, C 언어에서 입력받은 숫자를 영어 단어 형태로 출력하려면 어떻게 해야 할까요?
해결 방법
이 프로그램에서는 두 자리 숫자를 단어로 변환하여 출력하기 위해 elseif 문으로 여러 조건을 차례대로 검사합니다. 각 조건은 다음과 같습니다.
if(no<0 || no>99) — 입력한 숫자가 두 자리 숫자가 아니면 오류 메시지를 출력합니다.
else if(no==0) — 입력값이 0이면 "zero"를 출력합니다.
else if(no>=10 && no<=19) — 10부터 19 사이의 숫자는 규칙적이지 않은 특수한 영어 표현(ten, eleven, twelve 등)을 사용하므로 별도로 처리합니다.
else if(no>=20 && no<=90) — 20 이상의 두 자리 숫자는 십의 자리 단어와 일의 자리 단어를 조합하여 출력합니다.
단어 배열 구조
숫자를 단어로 변환하기 위해 세 개의 문자열 포인터 배열을 사용합니다.
firstno[] — 0과 10~19 사이의 숫자에 해당하는 단어(zero, ten, eleven, ..., nineteen)를 저장합니다.
secondno[] — 십의 자리 단어(twenty, thirty, forty, ..., ninety)를 저장합니다.
thirdno[] — 일의 자리 단어(one, two, three, ..., nine)를 저장합니다.
프로그램 코드
#include<stdio.h>
#include<string.h>
int main(){
int no;
char *firstno[]={"zero","ten","eleven","twelve","thirteen", "fourteen","fifteen","sixteen","seventeen", "eighteen","nineteen"};
char *secondno[]={"twenty","thirty","forty","fifty","sixty", "seventy","eighty","ninty"};
char *thirdno[]={"one","two","three","four","five","six","seven","eight","nine"};
printf("enter a number:");
scanf("%d",&no);
if(no<0 || no>99)
printf("enter number is not a two digit number\n");
else if(no==0)
printf("the enter no is:%s\n",firstno[no]);
else if(no>=10 && no<=19)
printf("the enter no is:%s\n",firstno[no-10+1]);
else if(no>=20 && no<=90)
if(no%10 == 0)
printf("the enter no is:%s\n",secondno[no/10 - 2]);
else
printf("the enter no is:%s %s\n",secondno[no/10-2],thirdno[no%10-1]);
return 0;
}코드 동작 원리
10~19 사이의 숫자는
firstno[no-10+1]인덱스 계산을 통해 해당 단어를 찾아 출력합니다.20 이상에서 일의 자리가 0인 숫자(20, 30, 40 등)는
secondno[no/10 - 2]로 십의 자리 단어만 출력합니다.그 외의 두 자리 숫자는
secondno[no/10-2]와thirdno[no%10-1]을 조합하여 출력합니다. 예를 들어 79는 "seventy"와 "nine"이 결합되어 "seventy nine"이 됩니다.
실행 결과
enter a number:79 the enter no is: seventy nine enter a number:234 enter number is not a two digit number
마무리
이 프로그램은 switch-case 없이 elseif 문의 조건 분기만으로 숫자를 영어 단어로 변환하는 방법을 보여줍니다. 배열 인덱스 계산 논리를 이해하면 세 자리 이상의 숫자로 확장하는 것도 가능하므로, C 언어의 조건문과 배열 활용 연습에 매우 유용한 예제입니다.