【C言語】switch文を使って数字を英語の単語形式に変換する方法
問題
C言語を使用して、入力された1桁または2桁の数字を英語の単語形式に変換することはできるのでしょうか?
解決策
switch文(switch case)を活用すれば、2桁の数字を英語の単語形式へ簡単に変換できます。さらに、この手法は2桁に限らず、任意の数値への変換にも応用が可能です。
本記事では、1桁および2桁の数字を英語の単語形式に変換するC言語プログラムを紹介します。
プログラムの処理の流れ
まず、入力された数値が0〜99の範囲内にあるかどうかをif文で判定します。範囲外の数値が入力された場合は「Invalid number」と表示して処理を終了します。
10〜19の数値は「eleven」「twelve」のように特殊な読み方をするため、これらは個別のcaseラベルとして処理します。それ以外の数値(20〜98)については、以下の2段階に分けて変換を行います。
- 十の位: 「no / 10」の計算結果(整数除算による商)をもとに、twenty、thirty、fortyなどの単語を出力します。
- 一の位: 「no % 10」の計算結果(剰余演算による余り)をもとに、one、two、threeなどの単語を出力します。
このように、switch文の中にさらにswitch文を記述する「入れ子構造」を採用することで、桁ごとの変換をシンプルかつ効率的に実現できます。
サンプルコード
#include <stdio.h>
int main(){
int no;
printf("enter any 1 or 2 digit number:");
scanf("%d",&no);
if(no<0 || no>=99) // 入力が1〜2桁の範囲内かどうかを判定
printf("Invalid number");
else{
printf("entered number:");
switch(no){
case 0: printf("zero");
break;
case 10: printf("ten");
break;
case 11: printf("eleven");
break;
case 12: printf("twelve");
break;
case 13: printf("thirteen");
break;
case 14: printf("fourteen");
break;
case 15: printf("fifteen");
break;
case 16: printf("sixteen");
break;
case 17: printf("seventeen");
break;
case 18: printf("eighteen");
break;
case 19: printf("nineteen");
break;
default:
switch(no/10){ // 十の位の単語を出力
case 2: printf("twenty");
break;
case 3: printf("thirty");
break;
case 4: printf("forty");
break;
case 5: printf("fifty");
break;
case 6: printf("sixty");
break;
case 7: printf("seventy");
break;
case 8: printf("eighty");
break;
case 9: printf("ninety");
break;
}
switch(no%10){ // 一の位の単語を出力
case 1: printf("one");
break;
case 2: printf("two");
break;
case 3: printf("three");
break;
case 4: printf("four");
break;
case 5: printf("five");
break;
case 6: printf("six");
break;
case 7: printf("seven");
break;
case 8: printf("eight");
break;
case 9: printf("nine");
break;
}
}
}
return 0;
}
実行結果
enter any 1 or 2 digit number:83 entered number:eightythree enter any 1 or 2 digit number:6 entered number:six enter any 1 or 2 digit number:548 Invalid number
ポイント解説
- 整数除算と剰余演算: 「no / 10」で十の位を、「no % 10」で一の位を取り出すのがこのプログラムの核心部分です。
- break文の役割: 各caseの末尾にbreak文を記述しないと、後続のcaseが連続して実行される「フォールスルー」が発生するため注意が必要です。
- 入力値の範囲チェック: 負の数や99以上の数値は変換対象外となるため、事前にif文で除外しています。
なお、出力例の「eightythree」のように単語がそのまま連結されて表示されます。スペース区切りで表示したい場合は、printfの書式文字列に半角スペースを追加するだけで対応できます。
-
C言語の条件分岐を完全解説!フローチャートとサンプルプログラムで学ぶ意思決定処理
C言語における「意思決定(条件分岐)」とは、条件が真(True)か偽(False)かを判定し、その結果に応じて実行する処理を切り替える仕組みです。プログラムに柔軟な制御を持たせるために欠かせない概念であり、以下のような分岐文があります。単純if文(simple – if statement)if–else文ネストしたif–else文else–ifラダーswitch文本記事では、それぞれの構文・フローチャート・サンプルプログラムと実行結果を順番に解説していきます。1. 単純if文(simple – if statement)「if」キーワードは、論理条件が真である場合に、一連のステートメントを実
-
C言語のswitch文とは?基本構文・アルゴリズム・サンプルコードでわかりやすく解説
switch文は、複数の選択肢の中から1つだけを実行したい場合に使われる条件分岐の制御構造です。switch文は、指定した式の値を整数定数や文字定数のリストと順番に照合していき、一致するcaseが見つかった時点で、そのcaseに紐づくステートメント(文)が実行されます。 switch文の基本構文 switch文の基本的な書き方は以下の通りです。 switch (式){ case 値1 : 文1; break; case 値2 : 文2; break; &nbs