Ex03Ans

From Prog0

Jump to: navigation, search

演習第3回

Contents

解答例

A問題

A-1 変数の値

ファイル名: ex03a1.txt

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

ファイル名: ex03a1.c

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

  x = 1.1;
  y = 2.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("単位数は%4dです\n", i);
  printf("単位数は%04dです\n", i);
  printf("単位数は%-4dです\n", i);
  printf("単位数は%+4dです\n", i);
  printf("点数は%.2f点です\n", x); // %5.2fでもOK
  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

平均点の計算において、割り算が整数同士で行われているため、小数点以下が切り捨てられてしまっている。
正しい結果を得るには、整数定数を浮動小数点定数に置き換えるか、キャストを用いて少なくとも一方を浮動小数点型に変換すればよい。
(例:/5 を /5.0 に変更する、あるいは x = (double)(5 + 7 + 3 + 8 + 9)/5 とするなど)

B問題

B-1 キャスト

ファイル名: ex03b1.c

#include <stdio.h>

int main()
{
  double x;

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

  return 0;
}

B-2 三角形の面積

ファイル名: ex03b2.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-3 消費税とポイント

ファイル名: ex03b3.c

#include <stdio.h>

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

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

  return 0;
}

Extra問題

E-1 平均値と偏差

ファイル名: ex03e1.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;
}

E-2 16進数

ファイル名: ex03e2.c

#include <stdio.h>

int main()
{
  int n;

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

  return 0;
}
Personal tools