問題 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
© Copyright 2024 ExpyDoc