Ex03Ans

From Prog0

Jump to: navigation, search

演習第3回

Contents

解答例

A問題

A-1 平均点

ファイル名: ex03a1.txt

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

A-2 変数の値

ファイル名: ex03a2.txt

kの最終的な値は0 ,lの最終的な値は 7, zの最終的な値は2.000000, mの最終的な値は2である。
x-yの値は-0.9であるが、kが整数型であるため、切り捨てられて0となる。
j+yの値は7.5であるが、lが整数型であるため、切り捨てられて7となる。
j/iの値は2であるが、zが浮動小数型であるため、表示は2.000000となる。
(double)j/iの値はキャストにより、2.5となるがmが整数型であるため切り捨てられて2となる。

ファイル名: ex03a2.c

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

  i = 2;
  j = 5;
  x = 1.6;
  y = 2.5;

  k = x-y;
  l = j+y;
  z = j/i;
  m = (double)j/i;

  printf("k = %d\n", k);
  printf("l = %d\n", l);
  printf("z = %f\n", z);
  printf("m = %d\n", m);

  return 0;
}

A-3 printfの書式

ファイル名: ex03a3.c

#include <stdio.h>

int main()
{
  int i = 25;
  double x = 63.75;

  printf("単位数は%4dです\n", i);
  printf("単位数は%04dです\n", i);
  printf("単位数は%-4dです\n", i);
  printf("単位数は%+5dです\n", i);
  printf("点数は%.3f点です\n", x); // %6.3fでもOK
  printf("点数は%.2E点です\n", x); // %8.2EでもOK
  printf("点数は%7.3f点です\n", x);
  printf("点数は%.5e点です\n", x); // %11.5eでもOK

  return 0;
}

B問題

B-1 キャスト

ファイル名: ex03b1.c

#include <stdio.h>

int main()
{
  double x;

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

  return 0;
}

B-2 台形の面積の計算

ファイル名: ex03b2.c

#include <stdio.h>

int main()
{
  double jouhen, kahen, takasa, menseki;
  printf("台形の上辺と下辺の長さと高さをcmで入力してください:");
  scanf("%lf%lf%lf", &jouhen,&kahen,&takasa);
  menseki = (jouhen+kahen)*takasa / 2.0;
  printf("台形の面積は %.2f 平方cmです。\n", menseki);
  return 0;
}

B-3 食事の会計

ファイル名: ex03b3.c

#include <stdio.h>

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

 printf("メニュー価格(税抜き、サービス料抜き)を入力してください:");
 scanf("%d", &price);
 tax = price * 0.1;
 service = price*0.15;
 pay = price + tax + service;
 printf("サービス料は%d円、お支払い総額は%d円です\n", service, pay);
 points = (price+service)*0.015;
 printf("%dポイントがつきました!\n", points);

 return 0;
 
}

Extra問題

E-1 重み付き合計と平均

ファイル名: ex03e1.c

#include <stdio.h>

int main()
{
    int  koku, suu, ei, ri, sha;
    int  w_koku, w_suu, w_ei, w_ri, w_sha;
    int  goukei;
    double  heikin; 

    printf("国語の点数と重みを入力してください : ");
    scanf("%d%d", &koku, &w_koku);
    printf("数学の点数と重みを入力してください : ");
    scanf("%d%d", &suu, &w_suu);
    printf("英語の点数と重みを入力してください : ");
    scanf("%d%d", &ei, &w_ei);
    printf("理科の点数と重みを入力してください : ");
    scanf("%d%d", &ri, &w_ri);
    printf("社会の点数と重みを入力してください : ");
    scanf("%d%d", &sha, &w_sha); 

    goukei = koku*w_koku + ei*w_ei + suu*w_suu + ri*w_ri + sha*w_sha;
    
    /* 下の行のキャストをはずすと、 heikin は小数点以下が切り捨てられた値になる。 */
    heikin = (double)(goukei) / (double)(w_koku+w_suu+w_ei+w_ri+w_sha); 

    printf("5教科の重み付き合計点は%d点で、重み付き平均点は%f点です。\n", goukei, heikin);
    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