Ex05Ans
From Prog0
演習第5回
Contents |
解答例
A問題
A-1 インクリメント・デクリメント
ファイル名: ex05a1.txt
最初の"3"は、前置インクリメントによって出力よりも前にiに1が足されるため、3が出力される。出力後のiの値は3である。 2番目の"3"は、後置インクリメントによって出力の後にiに1が足されるため、3が出力される。出力後のiの値は4になる。 3番目の"3"は、前置デクリメントによって出力よりも前にiから1が引かれるため、3が出力される。出力後のiの値は3である。 最後の"3"は、後置デクリメントによって出力の後にiから1が引かれるため、3が出力される。出力後のiの値は2である。
A-2 コラッツの問題
ファイル名: ex05a2.c
#include <stdio.h>
int main()
{
int n;
printf("0でない自然数nを入力して下さい ");
scanf("%d", &n);
while(n != 1) {
if (n%2 == 0) {
n = n / 2;
} else {
n = n * 3 + 1;
}
printf("n = %d\n", n);
}
printf("終了\n");
return 0;
}
A-3 九九の表示
ファイル名: ex05a3.c
#include <stdio.h>
int main() {
int s, x, y;
x = 1;
while(x < 10) {
y = 1;
while(y < 10) {
s = x*y;
printf("%3d", s);
y++;
}
printf("\n");
x++;
}
return 0;
}
B問題
B-1 試験結果の集計
ファイル名: ex05b1.c
#include <stdio.h>
int main() {
int student = 0; /* 受験者数 */
int pass = 0, fail = 0; /* pass:合格者数、fail:不合格者数 */
int score, total_score = 0; /* score:得点、total_score:得点の合計 */
double average;
while(1) {
printf("得点を入力して下さい: ");
scanf("%d", &score);
if (score < 0) break;
student++;
total_score += score;
if (score >= 50 ) pass++;
else fail++;
}
average = (double) total_score / student;
printf("受験者数 %d 名,平均点 %f 点\n", student, average);
printf("合格者数 %d 名,不合格者数 %d 名\n", pass, fail);
return 0;
}
B-2 温度計の目盛り
ファイル名: ex05b2.c
#include <stdio.h>
int main() {
int min, max, deg;
printf("最低温度? ");
scanf("%d", &min);
printf("最高温度? ");
scanf("%d", &max);
/* 数字を表示 */
deg = min;
while (deg <= max) {
printf("%3d ", deg); // 空白を加えて4文字幅で表示
deg += 10;
}
printf("\n");
/* 線を表示 */
deg = min;
while (deg <= max) {
printf("--+-"); // 数字に合わせて4文字
deg += 10;
}
printf("\n");
return 0;
}
B-3 カレンダーの表示
ファイル名: ex05b3.c
#include <stdio.h>
int main() {
int b, i;
int day;
scanf("%d", &b);
printf(" 月 火 水 木 金 土 日\n");
i = 1;
while(i <= b - 1) {
printf(" ");
i++;
}
day = 1;
while(day <= 31) {
printf("%3d", day);
day++;
if (b == 7) {
printf("\n");
b = 1;
} else {
b++;
}
}
printf("\n");
return 0;
}
Extra問題
E-1 クレジットカードのリボ払い返済
ファイル名: ex05e1.c
#include <stdio.h>
int main()
{
int loan, pay, month=0;
double yrate=15.0, rate; /* yrate:年率(%), rate:1月当たりの金利 */
int total=0;
rate=yrate/12/100; /* 1月当たりの金利(%では無い) */
loan=200000; /* 借入れ額 */
printf("月毎の返済額を入力して下さい : ");
scanf("%d",&pay);
printf("%d円を定額リボ払いで月%d円ずつ返済します。\n",loan,pay);
while(loan>0) {
month++;
loan=loan*(1+rate);
if (loan<pay) pay=loan;
total+=pay;
printf("%2d ヵ月: 金利手数料込残金:%6d円 支払後残金:%6d円 返済総額:%6d円\n",month, loan, loan-pay, total);
loan=loan-pay;
}
printf("返済期間 %2dヵ月 総返済額:%6d円\n",month, total);
return 0;
}
