Ex08Ans

From Prog0

Jump to: navigation, search

演習第 8 回 解答

Contents

解答例

A問題

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

ファイル名: ex08a1.txt

  • 与えられた情報
    • 鶴、亀、てんとう虫あわせて20匹(羽)
    • 足の合計本数は ashi_total
  • 与えられていないが常識として知っている事
    • 鶴の脚は2本
    • 亀の足は4本
    • てんとう虫は昆虫なので、脚は6本
    • 個体数は自然数(0以上、解釈によっては1以上の整数)
  • 求めるもの
    • 条件を満たす鶴、亀、てんとう虫それぞれの数の組み合わせ全て(複数の可能性あり。また、一つも無い可能性もあり)

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 平均・分散

配列を用いて,データ入力,平均の計算,分散の計算を,複数の for ループを使ってプログラミングすることも考えられるが,(分散) = (二乗の平均) - (平均の二乗) を使えば,配列を使わず,しかも,1つのループで書ける.


ファイル名: ex08b2.pdf

File:X_Ex08B_P03.png

ファイル名: ex08b2.c

#include <stdio.h>

#define N 10   /* データの個数をマクロで定義.マクロは第9回に出てくる(それまでは定数でもよい)*/

int main ()
{
  int i;
  int data;
  int sum, square_sum;
  double ave, var;

  sum = square_sum = 0;

  printf ("%d個のデータを入力してください: ", N);
  for (i=0; i<N; i++)
    {
      scanf ("%d", &data);
      sum += data;
      square_sum += data*data;
    }

  ave = (double) sum / N;
  var = (double) square_sum / N - ave*ave;

  printf ("平均: %f\n", ave);
  printf ("分散: %f\n", var);

  return 0;
}


Personal tools