7週目 課題

問題 1 素数判定
入力した正の整数値が素数であるかどうかを判定するプログラム。Ctrl-D が入
力されるまで判定を繰り返す。
% ./a.out
自然数を入力:35
35 は素数ではない。
自然数を入力:9
9 は素数ではない。
自然数を入力:17
17 は素数である。
自然数を入力:-9
入力エラーです。
自然数を入力:Ctrl-D
プログラムを終了します。
%
この色はプログラムによる出力
1
問題 2 素因数分解
自然数を入力し、素因数に分解するプログラムを作れ。
エラー処理も行うこと。
% ./a.out
自然数を入力:24
24 = 2*2*2*3
% ./a.out
自然数を入力:144
144 = 2*2*2*2*3*3
% ./a.out
自然数を入力:-9
入力エラー
%
この色はプログラムによる出力
2
問題 3 最大公約数
ユークリッドの互除法を用いて、入力した 2 つの自然数の最大公約数を求めるプロ
グラムを作れ。
% ./a.out
自然数を2つ入力:54 144
144 と 54 の最大公約数は 18 です。
%
この色はプログラムによる出力
3
問題 4 完全数
完全数とは、約数(自分自身は除く)の和が自身と等しい自然数である。
例)6 の約数は 1, 2, 3 であり、1 + 2 + 3 == 6 であるので、6 は完全数。
6, 28, 496, 8128 は完全数である。
可能な限りたくさんの完全数を探すプログラムを作れ。
% ./a.out
見つけた!6
見つけた!28
見つけた!496
見つけた!8128
...
%
ヒント:a が完全数かどうかを判定する部分を作成。
これを a に関するループで囲めば良い。
プログラム実行結果の表示
4
約数の和を求める
約数の和を求めるには、1から始めて、順に割っていき、割り切れた数の合計を
求めればよい。
int goukei = 0;
int i, n;
n=280;
// たとえば、280の約数の和を求める
for(i=1; i < n; i++){
if( n%i == 0)
goukei += i
}
printf(“%dの約数の和は%d \n", n,goukei);
5
問題 5 借金の返済
年率rでx円を借りる。返済は毎年y円返していくことにする。一年後から完済するまで、
毎年の返済額、残額、返済額の合計を表示するプログラムを作れ。
利息は複利で計算するものとする。
% ./a.out
借用金額を入力:1000000
利率を入力(%):3.0
毎年の返済額を入力:100000
借用金額 1000000円、毎年の返済額 100000, 利率 3.00%
1年目, 返済金 100000円, 残金 930000円, 返済額 100000円
2年目, 返済金 100000円, 残金 857900円, 返済額 200000円
............
12年目, 返済金 100000円, 残金 6558円, 返済額 1200000円
13年目, 返済金 6755円, 返済金の総額 1206755円
%
プログラム実行結果の表示
一年後の借金の総額は
x(1+r/100)
である、これからyを引
いた金額が残金である。
二年目以降も、残金に
(1+r/100)
を掛けた金額が借金の
総額で、これからyを引
いた金額が残額である。
借金の総額がy以下で
あれば、返済が完了す
る。y円を返済して終了
するl。
6
繰り返しの考え方
1)x,y,rを入力する
2)x=x*(1+r/100);1年度後の借金額
3)もしy>=xならx円を返済して終了
4)x=x−y;
返済後の借金の残額 この範囲を繰り返す
5)x=x*(1+r/100);1年度の借金額
6)もしy>=xならx円を返済して終了
7)x=x−y;
。。。。。。。
これを続ける
繰り返すのは、2)〜4)の間。しかしこれでは、繰り返しの終了判定が
3)で、繰り返しの途中になる。(break文を使えば、途中での終了も可能)
あ) whileでの繰り返しの終了判定は、繰り返しの最初におこなう。
い) do〜whileでは繰り返しの最後に行う。
あ)の場合は、3)から5)を繰り返す。
い)の場合は、4)から6)を繰り返す。
7
あ)の場合
い)の場合
x,y,rを入力する
x=x*(1+r/100);1年度後の借金額
while (y < x) {
x=x−y;
返済後の借金の残額
y円を返済して、返済後の借金額はx円
x=x*(1+r/100);1年度の借金額
}
if (x > 0)
x円を返済
x,y,rを入力する
x=x*(1+r/100);1年度後の借金額
if (y < x) {
do {
x=x−y;
返済後の借金の残額
y円を返済して、返済後の借金
額はx円
x=x*(1+r/100);1年度の借金額
} while (y < x);
}
if (x > 0)
8