Ex03Ans
From Prog0
演習第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;
}
