Ex02
From Prog0
演習第2回
Contents |
演習問題
主な内容
- 変数
- printf/scanf
- 演算
以下の問題を解いて期限内に解答を提出してください。
出席確認
演習時間中に出席確認をLMS上の「演習出欠」で行ってください。出席確認用のパスワードは演習時間のどこかのタイミングで提示されます。
A問題
A-1 変数名の規則
ファイル名: ex02a1.txt
以下の変数宣言の例を ex02a1.txt にコピーし、正しいものには括弧内に「o」を、間違っているものには「x」を記入しなさい(マルバツを o(オー)と x(エックス)で代用します)。 なお、間違っているものについてはその具体的な理由を各行の右側に書いた上で、以下のプログラムの中でそれぞれの変数宣言を行った場合、コンパイルの際にどのようなエラーが出力されるか確認すること (エラー内容を丸ごと解答に記入する必要はない)。
- ( )int aizu;
- ( )int aizu-wakamatsu;
- ( )int 00uoa;
- ( )int class.1;
- ( )int Aizu, aizu;
- ( )int __init__;
- ( )int if = 0;
- ( )int x1, x2=0;
- ( )int speed2fast;
- ( )int prog0@uoa;
[確認用プログラム]
#include <stdio.h>
int main()
{
int aizu; /* この行を上の各行で置き換える */
return 0;
}
A-2 値の入出力
ファイル名: ex02a2.c
以下はキーボードから入力した整数値と、それを4倍した結果を表示するプログラムである。下線部を埋めてプログラムを完成させなさい。なお、結果を表示した後は改行されるようにすること。
[プログラム]
#include <stdio.h>
int main()
{
int num;
printf("整数値を入力してください:");
scanf("___",___);
printf("入力された値は___で、これを4倍した結果は___です。___", __, ____);
return 0;
}
[実行例]
% ./a.out
整数値を入力して下さい:3
入力された値は 3 で、これを4倍した結果は 12 です。
% ./a.out
整数値を入力して下さい:15
入力された値は 15 で、これを4倍した結果は 60 です。
%
A-3 変数の値
ファイル名: ex02a3.c
以下はプログラムの一部を抜きだしたものである。変数 a の最終的な値が何になるか考えなさい。予想した結果をコメント部分に 入れるとともに、#include, printf 等必要な命令を補ったプログラム ex02a3.c を作成して a の値を出力させ、予想通りになるか確認しなさい。
int a = 10;
a = a + 1;
a = a + a; /* aの値は( )になるはず */
B問題
B-1 平成/西暦変換
ファイル名: ex02b1.c
キーボードから入力した年(平成)を西暦にして出力するプログラムを作成しなさい。またその年に生まれた人が今年(西暦2026年)何才になるかも表示しなさい。なお、結果を表示した後は改行されるようにすること。ただし入力は 1 (平成元年)から 31 (平成31年)までの整数が入力されるものとして考えてよい(エラー処理は不要)。
[実行例]
% ./a.out
年を平成で入力して下さい [1-31]: 3
平成 3 年は西暦 1991 年です。
平成 3 年に生まれた人は今年 35 才です。
% ./a.out
年を平成で入力して下さい [1-31]: 25
平成 25 年は西暦 2013 年です。
平成 25 年に生まれた人は今年 13 才です。
%
B-2 二つの数の四則演算
ファイル名: ex02b2.c
2つの整数をキーボードから入力し、変数a, bに格納した上で、aとbの和・差・積および商を計算して表示するプログラムを作成しなさい。
なお、差は a-b、商はa/bで求めること。さらに、商は整数の割り算で計算し、余りも表示すること。
[実行例]
% ./a.out 2つ整数を入力してください: 16 5 和 = 21 差 = 11 積 = 80 商 = 3 、余り = 1 %
B-3 プログラムのデバッグ(上級編)
ファイル名: ex02b3.c
以下のプログラムはscanfで入力された3つの数値を変数a, b, cに格納した上で、2つの計算
- a × b
- (2 × a + b) % c
について内部で計算を行うとともに、画面にも計算式と計算結果双方の表示を行うプログラムである。しかし、プログラム中にミス(バグ)があるため、実行しても意図した動作とならず、表示された計算式と内部での計算内容が一致しない。正しく動作するようにプログラムを修正しなさい。ただし、printfの書式(" "で囲まれた部分)には誤りがないと考えてよい。
#include <stdio.h>
int main()
{
int a, b, c, res;
printf("Input a, b, and c: ");
scanf("%d%d%d", &a, &b, &c);
printf("\n");
res = a*b;
printf("Compute a * b\n");
printf("%d * %d = %d\n", a, b, c);
printf("\n");
printf("Compute (2 * a + b) %% c\n");
/* printfで%を表示させたい場合は%%と書く */
printf("(2 * %d + %d) %% %d = %d\n", a, b, c);
res = (2*a+b)%c;
return 0;
}
[実行例](バグ修正後の意図通り動作するもの)
% ./a.out
Input a, b, and c: 2 3 4
Compute a * b
2 * 3 = 6
Compute (2 * a + b) % c
(2 * 2 + 3) % 4 = 3
%
E問題
E-1 等差級数の計算
ファイル名: ex02e1.c
以下のように初項a1、公差d、項数n をキーボードから入力し、等差数列の第 n 番目の項 an と、a1 から an までの和 Sn を計算するプログラムを作成しなさい。
% ./a.out
Enter a1 d n -> 10 3 8
an = 31
Sn = 164
%
課題提出上の注意事項
解答ファイルはmenuコマンドを使って提出してください。以下のようにmenuコマンドを実行し、表示されるメッセージに沿って操作すること。
% ~prog0/bin/menu
menuコマンドは、解答ファイルが ~/Prog0/Ex## のディレクトリに指定されたファイル名で置かれているものとして処理します。正常に提出された場合は ○ が、何らかのエラーが生じた場合は × が表示されます。
解答の提出期間は以下のとおりです。
| 問題 | 提出受付開始 | 提出〆切 |
|---|---|---|
| A問題 | 演習日の6日前の午後9時 | 演習終了時刻 |
| B, Extra問題 | 演習日の6日前の午後9時 | 演習日の6日後の午後9時 |
提出は〆切前であれば何度でもやり直すことができます。再提出すると、前に提出したファイルは新しい内容で上書きされます。
