Ex03Ans

From Prog0

Jump to: navigation, search

演習第3回

Contents

解答例

A問題

A-1 変数の値

ファイル名: ex03a1.txt

iの最終的な値は 1,jの最終的な値は 3 である。
整数型への型変換は四捨五入で切り上げられることはなく、すべて切り捨てられるため。

ファイル名: ex03a1.c

#include <stdio.h>
int main()
{
  int i, j;
  double x, y;

  x = 1.2;
  y = 3.5;
  i = x;
  j = y;

  printf("i = %d\n", i);
  printf("j = %d\n", j);

  return 0;	
}

A-2 printfの書式

ファイル名: ex03a2.c

#include <stdio.h>

int main()
{
  int i = 12;
  double x = 34.5;

  printf("単位数は%04dです\n", i);
  printf("単位数は%-4dです\n", i);
  printf("単位数は%+4dです\n", i);
  printf("単位数は%4dです\n", i);
  printf("点数は%6.2f点です\n", x);
  printf("点数は%.3E点です\n", x); // %9.3EでもOK
  printf("点数は%e点です\n", x); // %.6e, %12.6eでもOK

  return 0;
}

A-3 型変換

ファイル名: ex03a3.txt

変数 c1, c2, c3 の値はそれぞれ、30.0, 1.0, 1.5 になる。

c1 の右辺では、まず b と a の掛け算を行うので 6*4 = 24。
その値に a を加えると 30 が得られる。
30 を double 型の変数 c1 に代入するので、c1 の値は 30.0 になる。

c2 の右辺は整数の割り算なので結果も整数になる。
そのため、a/b の結果は 1 になる。
1 を double 型の変数 c2 に代入するので、c2 の値は 1.0 になる。

c3 の右辺では、a と b を double 型に型変換してから割り算を行っているので実数で割り算が行われる。
そのため、(double)a / (double)b の結果は 1.5 になり、c3 の値も 1.5 になる。

ファイル名: ex03a3.c

#include <stdio.h>

int main()
{
  int a = 6;
  int b = 4;
  double c1, c2, c3;

  c1 = a + b * a;
  c2 = a / b;
  c3 = (double)a / (double)b;

  printf("c1 = %f  c2 = %f  c3 = %f\n", c1, c2, c3); // 他の表示方法でもOK

  return 0;
}

B問題

B-1 三角形の面積

ファイル名: ex03b1.c

#include <stdio.h>

int main()
{
  double teihen, takasa, menseki;

  printf("三角形の底辺の長さと高さをcmで入力してください:");
  scanf("%lf%lf", &teihen, &takasa);
  menseki = teihen * takasa / 2.0;
  printf("三角形の面積は %f 平方cmです\n", menseki);

  return 0;
}

B-2 キャスト

ファイル名: ex03b2.c

#include <stdio.h>

int main()
{
  double d, e;

  printf("正の実数を1つ入力してください:");
  scanf("%lf", &d);
  e = (int)(d * 100) / 100.0; // intへのキャストで小数点以下が切り捨てられる
  printf("%f\n", e);

  return 0;
}

B-3 数値の計算

ファイル名: ex03b3.c

#include <stdio.h>

int main()
{
  int price, points, tax, pay;

  printf("商品代金(税抜き)を入力してください:");
  scanf("%d", &price);
  tax = price * 0.08;
  pay = price + tax;
  printf("消費税は %d 円、お支払い額は %d 円です\n", tax, pay);
  points = pay * 0.1;
  printf("%d ポイントつきました!\n", points);

  return 0;
}

Extra問題

E-1 16進数

ファイル名: ex03e1.c

#include <stdio.h>

int main()
{
  int n;

  printf("10進数を1つ入力してください:");
  scanf("%d", &n);
  printf("%d は16進数で %x です\n", n, n);

  return 0;
}

E-2 体重の平均値と偏差

ファイル名: ex03e2.c

#include <stdio.h>

int main()
{
  double a, b, c, d, e;
  double average;
    
  printf("5人分の体重を空白で分けて入力してください\n");
  scanf("%lf%lf%lf%lf%lf", &a, &b, &c, &d, &e);
    
  average = (a + b + c + d + e)/5;
  printf("5人の体重の平均値: %5.1f [kg]\n", average);
  printf("1人目の体重: %5.1f [kg]、平均からの偏差: %+5.1f [kg]\n", a, a - average);
  printf("2人目の体重: %5.1f [kg]、平均からの偏差: %+5.1f [kg]\n", b, b - average);
  printf("3人目の体重: %5.1f [kg]、平均からの偏差: %+5.1f [kg]\n", c, c - average);
  printf("4人目の体重: %5.1f [kg]、平均からの偏差: %+5.1f [kg]\n", d, d - average);
  printf("5人目の体重: %5.1f [kg]、平均からの偏差: %+5.1f [kg]\n", e, e - average);

  return 0;
}
Personal tools