2012年9月19日水曜日

開発環境

『実践プログラミング 第3版』 (Steve Oualline (著)、 望月 康司 (監修) (翻訳)、 谷口 功 (翻訳)、 オライリー・ジャパン、1998年、ISBN978-4900900646) II部(単純なプログラミング)の8章(他の制御文)8.5(プログラミング実習)実習8-7を解いてみる。

実習8-7.

コード(TextWrangler)

#include <stdio.h>
#include <string.h>

int main(){
  char line[100];
  char result[1000];
  int number,h,t,o;
  strcpy(result,"");
  while(11){
    printf("数値を入力(0から100): ");
    fgets(line,sizeof(line),stdin);
    sscanf(line,"%d",&number);
    if(!(number >= 0 && number <= 100)){
      printf("0から100までの数値を入力してください。\n");
      continue;
    }
    h = number / 100;
    t = (number % 100) / 10;
    o = number % 10;
    if(h == 1){
      strcat(result,"one hundred");
    } else if(t == 1){
      switch(o){
        case 0:strcat(result, "ten");break;
        case 1:strcat(result, "eleven");break;
        case 2:strcat(result, "twelve");break;
        case 3:strcat(result, "thirteen");break;
        case 4:strcat(result, "fourteen");break;
        case 5:strcat(result, "fifteen");break;
        case 6:strcat(result, "sixteen");break;
        case 7:strcat(result, "seventeen");break;
        case 8:strcat(result, "eighteen");break;
        case 9:strcat(result, "nineteen");break;
      }
    } else if(t == 0 && o == 0){
      strcat(result, "zero");
    } else {
      switch(t){
        case 2: strcat(result, "twenty");break;
        case 3: strcat(result, "thirty");break;
        case 4: strcat(result, "forty");break;
        case 5: strcat(result, "fifty");break;
        case 6: strcat(result, "sixty");break;
        case 7: strcat(result, "seventy");break;
        case 8: strcat(result, "eighty");break;
        case 9: strcat(result, "ninety");break;
      }
      if(t != 0 && o != 0){
        strcat(result,"-");
      }
      switch(o){
        case 1: strcat(result, "one");break;
        case 2: strcat(result, "two");break;
        case 3: strcat(result, "three");break;
        case 4: strcat(result, "four");break;
        case 5: strcat(result, "five");break;
        case 6: strcat(result, "six");break;
        case 7: strcat(result, "seven");break;
        case 8: strcat(result, "eight");break;
        case 9: strcat(result, "nine");break;
      }
    }
    printf("%s\n",result);
    strcpy(result, "");
  }
  return (0);
}


入出力結果(Terminal)

$ cc -g -o sample sample.c
$ ./sample
数値を入力(0から100): 101
0から100までの数値を入力してください。
数値を入力(0から100): 100
one hundred
数値を入力(0から100): 99
ninety-nine
数値を入力(0から100): 98
ninety-eight
数値を入力(0から100): 50
fifty
数値を入力(0から100): 49
forty-nine
数値を入力(0から100): 21
twenty-one
数値を入力(0から100): 20
twenty
数値を入力(0から100): 19
nineteen
数値を入力(0から100): 18
eighteen
数値を入力(0から100): 11
eleven
数値を入力(0から100): 10
ten
数値を入力(0から100): 9
nine
数値を入力(0から100): 8
eight
数値を入力(0から100): 0
zero
数値を入力(0から100): -1
1から100までの数値を入力してください。
数値を入力(0から100): ^C
$

C言語でもRubyみたいに再帰関数を使いこなせるようになれば、1から100まで以外の数字だったり、コードをもっと奇麗に書けるように合いそう。

0 コメント:

コメントを投稿