Ex03
From Prog0
演習第3回
Contents |
演習問題
主な内容
- その他の整数型
- 浮動小数点型
- 型変換(キャスト)
- printf/scanfの書式
今回より、一人ひとりの授業理解度を確認することを目的として、口頭試問形式による採点を行います。 採点対象の問題が解けたら手を挙げ、教員またはTA/SAを呼んでください。口頭で解答の内容を説明してもらいます。正しく説明できた場合は点数を付け、説明が不十分な場合はやり直してもらいます(間違えても減点はしません)。今回の口頭採点の対象は A-3 の1問のみです。その他の問題については、これまでと同様にmenuコマンドを使ってファイルを提出してください。なお、採点の都合上、口頭採点の対象となる問題のファイルもmenuコマンドで提出してください。
出席確認
演習時間中に出席確認をLMS上の「演習出欠」で行ってください。出席確認用のパスワードは演習時間のどこかのタイミングで提示されます。
A問題
A-1 平均点
ファイル名: ex03a1.txt
以下に示すのは、5人分の点数の平均を出力するプログラムである。しかし、本来「5.4」と出力されるべきところが、このプログラムでは「5.0」と表示されてしまう。この原因となっているプログラム上の問題点と、正しい計算結果を得るための修正方法について、ex03a1.txt に記述しなさい。
(ヒント:ハンドアウト Lec 03-10、Lec 03-11 を参照)
#include <stdio.h>
int main()
{
double x;
x = (5 + 7 + 3 + 8 + 4)/5;
printf("%.1f\n", x);
return 0;
}
A-2 変数の値
ファイル名: ex03a2.txt, ex03a2.c
以下は、プログラムの一部を抜き出したものである。
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;
- まず、変数 k,l,z,mの最終的な値を予想し、printfを用いて表示させた結果を ex03a2.txt に記述しなさい。この際、int型の変数は整数として、double型の変数は小数点以下も含めて表示させるものとする(小数点以下の表示桁数は任意で良い)。なお、予想が間違っていても、採点には影響しない。
- 次に、#include や printf など必要な命令を補って、変数 k,l,z,m の最終的な値を表示するプログラムを ex03a2.c として作成しなさい。プログラムをコンパイル・実行したうえで、実行結果をもとに各変数k,l,z,mの値がそのようになった理由を ex03a2.txt に追記しなさい。
A-3 (口頭試問)printfの書式
ファイル名: ex03a3.c
以下は、整数値の単位数と実数値の点数を、さまざまな書式で出力するプログラムである。実行例と同じ出力が得られるように、printfの下線部に適切な書式指定子を記入し、プログラムを完成させなさい。ただし、%g および %G は使用しないこと。なお、この問題では桁数も実行結果に合わせること(表示される空白の数にも注意すること)。
#include <stdio.h>
int main()
{
int i = 25;
double x = 63.75;
printf("単位数は%__です\n", i);
printf("単位数は%__です\n", i);
printf("単位数は%__です\n", i);
printf("単位数は%__です\n", i);
printf("点数は%__点です\n", x);
printf("点数は%__点です\n", x);
printf("点数は%__点です\n", x);
printf("点数は%__点です\n", x);
return 0;
}
[実行例]
% ./a.out
単位数は 25です
単位数は0025です
単位数は25 です
単位数は +25です
点数は63.750点です
点数は6.38E+01点です
点数は 63.750点です
点数は6.37500e+01点です
%
B問題
B-1 キャスト
ファイル名: ex03b1.c
以下の実行例のように、入力された正の実数の小数点以下第4位を切り捨てて表示するプログラムを作成しなさい。ただし、切り捨ての処理はキャストを用いて1行で記述すること。
[実行例]
% ./a.out
正の実数を1つ入力してください:1.23675
1.236000
%
B-2 台形の面積の計算
ファイル名: ex03b2.c
以下の実行例のように台形の上辺と下辺の長さと高さをキーボードから読み込み、 台形の面積を求めるプログラムを作成しなさい。ただし、scanfは1回のみ使用するようにし、計算した面積は小数点2桁までを表示させるようにすること。
% ./a.out
台形の上辺と下辺の長さと高さをcmで入力してください: 5 10 5
台形の面積は 37.50 平方cmです。
%
B-3 食事の会計
ファイル名: ex03b3.c
あるレストランでは、メニューの価格を税抜きで表示しており、食事代の会計時に、メニュー価格に10%の消費税と15%のサービス料を加えた金額を支払う必要がある。一方、メニュー価格とサービス料を加えた金額に対して1.5%分のポイントがポイントカードに付与される。この店で食事を行う際のメニュー価格を入力すると、サービス料、総支払額、および付与されるポイントを実行例のように表示するプログラムを作成しなさい。なお、消費税、サービス料、およびポイントの計算において、1円及び1ポイント未満の端数は切り捨てとすること。
[実行例]
% ./a.out
メニュー価格(税抜き、サービス料抜き)を入力してください:1250
サービス料は187円、お支払い総額は1562円です。
21ポイントがつきました!
%
Extra問題
E-1 重み付き合計と平均
ファイル名: ex03e1.c
国語、数学、英語、理科、社会の成績とそれに対する重みを入力すると5教科の重み付き合計点と重み付き平均点を出力するプログラムを作りなさい。
科目ごとに重みというパラメータを導入し、実際の成績に重みを乗じることで総合成績を評価する際に科目ごとの重要度に差をつけることができる。 この時、重みを乗じた成績の合計点を重み付き合計点、また成績の重み付き合計点を重みの和で割った点数を重み付き平均点と呼ぶ。
例:科目が国語と数学の2科目の時、重み付き合計点と重み付き平均点は以下のように求めることができる。
- 重み付き合計点 = 国語の点数 * 国語の重み + 数学の点数 * 数学の重み
- 重み付き平均点 = 重み付き合計点 / ( 国語の重み + 数学の重み )
なお、5教科の成績と重み、重み付き合計点は整数、重み付き平均点は実数としなさい。 よって、重み付き平均点を求めるときにキャストを用いなさい。
[実行例](浮動小数点演算では、丸め誤差の分だけ実行例と一致しない場合もあります。)
%./a.out国語の点数と重みを入力してください :74 1数学の点数と重みを入力してください :83 2英語の点数と重みを入力してください :77 2理科の点数と重みを入力してください :63 2社会の点数と重みを入力してください :50 15教科の重み付き合計点は570点で、重み付き平均点は71.250000点です。 %
E-2 16進数
ファイル名: ex03e2.c
以下の実行例のように、入力した整数を16進数で表示するプログラムを作成しなさい。
[実行例]
% ./a.out
10進数を1つ入力してください:255
255 は16進数で ff です
%
課題提出上の注意事項
解答ファイルはmenuコマンドを使って提出してください。以下のようにmenuコマンドを実行し、表示されるメッセージに沿って操作すること。
% ~prog0/bin/menu
menuコマンドは、解答ファイルが ~/Prog0/Ex## のディレクトリに指定されたファイル名で置かれているものとして処理します。正常に提出された場合は ○ が、何らかのエラーが生じた場合は × が表示されます。
解答の提出期間は以下のとおりです。
| 問題 | 提出受付開始 | 提出〆切 |
|---|---|---|
| A問題 | 演習日の6日前の午後9時 | 演習終了時刻 |
| B, Extra問題 | 演習日の6日前の午後9時 | 演習日の6日後の午後9時 |
提出は〆切前であれば何度でもやり直すことができます。再提出すると、前に提出したファイルは新しい内容で上書きされます。
