Ex08Ans

From Prog0

Jump to: navigation, search

演習第 8 回 解答

Contents

解答例

A問題

A-1 つるかめむし算問題の再定義

ファイル名: ex08a1.txt

  • 与えられた情報
    • 鶴、亀、てんとう虫があわせて 20
    • 足の合計本数は ashi_total
  • 与えられていないが常識として知っている情報
    • 鶴の足は 2 本
    • 亀の足は 4 本
    • てんとう虫の足は 6 本
    • 足の数、個体数ともに自然数
  • 求めるもの
    • 鶴、亀、てんとう虫はそれぞれ何羽・匹いるか

A-2 つるかめむし算問題のフローチャート

ファイル名: ex08a2.pdf

File:Ex08_turukamemushi.png

B問題

B-1 つるかめむし算プログラム

ファイル名: ex08b1.c

#include <stdio.h>

/* 足の本数をマクロ定義 マクロは第9回に出てくる(それまでは定数でもよい) */
#define TURUASHI 2
#define KAMEASHI 4
#define MUSHIASHI 6

int main()
{
  int turu, kame, mushi;
  int total = 20;
  int ashi;
  int ashi_total;
  int found_flag = 0;

  printf("Input ashi (total): ");
  scanf("%d", &ashi_total); // 足の合計本数を入力
 
  for (turu = 0; turu <= total; turu++)
  {
    for (kame = 0; kame <= total - turu; kame++)
    {
      mushi = total - turu - kame;
      ashi  = turu*TURUASHI + kame*KAMEASHI + mushi*MUSHIASHI;
      if (ashi == ashi_total)
      {
         printf("Turu:%d(%d)\tKame:%d(%d)\tTentoumushi:%d(%d)\n",
          turu, turu*TURUASHI, kame, kame*KAMEASHI, mushi, mushi*MUSHIASHI);
        found_flag++;
      }
    }
  }
  if (found_flag == 0)
    printf("NOT found!\n"); // 解なし

  return 0;
}


B-2 フィボナッチ数列

ファイル名: ex08b2.c

#include <stdio.h>

int main()
{
    int fib[20];
    int i;

    fib[0] = 1;
    fib[1] = 1;

    for (i = 0; i < 18; i++)
        fib[i + 2] = fib[i] + fib[i + 1];
    for (i = 0; i < 20; i++)
        printf("%5d\n", fib[i]);

    return 0;
}

B-3 歴史上の事件が起きた時代の判定

ファイル名: ex08b3.pdf

ファイル名: ex08b3.c

#include <stdio.h> 

int main()
{
  int event[] = {1602, 1395, 987, 1215, 1591, 2000, 645, 1776, 1415, 1333};
  int i;

  for (i=0; i<10; i++)
  {
    if (event[i] >= 1185 && event[i] <= 1333)
      printf("%d年は 鎌倉時代です\n", event[i]);
    else if (event[i]>=1336 && event[i] <= 1573)
      printf("%d年は 室町時代です\n", event[i]);
    else if (event[i]>=1576 && event[i] <= 1600)
      printf("%d年は 安土桃山時代です\n", event[i]);
    else if (event[i]>=1603 && event[i] <= 1868)
      printf("%d年は 江戸時代です\n", event[i]);
    else
      printf("%d年は 4つの時代以外です\n", event[i]);
      /* 4つの時代以外を正しく表示するためには、条件分岐をelseで続けていく必要がある */
  }

 return 0;
}


Personal tools