Report4
JavaアプリケーションとC言語のオリジナル問題作成と解答例
・課題……
制御文と配列を用いてオリジナルのJavaアプリケーションによる初級問題(なるべく短い行数で)を作成し、
模範解答例を示せ。
併せて、同様な動作を行うC言語のソースコードを示せ。
問題:キーボードから入力された数の、約数を出力するプログラムを作成せよ。
@ 解答プログラム
/* * 作成日: 2004/11/20 */ /** public class Test { public static void main(String[] args) { |
@ 実行結果
数字を入力 => 8 数字を入力 => 20 数字を入力 => 100 数字を入力 => 60000 数字を入力 => 10000000000 |
考察
import java.io.*; /*入出力に関するものを提供する。import文*/
x = readNum(); /*readNum()によって読み込まれる数字xを宣言*/
System.out.print( x + "={" ); /*「xの値と"={"」を表示する*/
for( int y=1; y<=x; y++ ){ /*for文により、yの値が1からxの値になるまで、y++を繰り返す。*/
if( x%y == 0 ) { /*今回の問題である約数を判別するには、割った余りの値が0になればいい*/
System.out.print( y + "," ); /*「yの値と","」を表示する*/
if,else if |
switch |
if(条件式1){ 文1(複数可) }else if(条件式2){ 文2(複数可) }else{ 文3(複数可) } |
switch(定数式){ case 値: 文1;break; case 値: 文2;break; default: 文 } |
else ifはいくつでも記載することができ、 elseは省略可能です。 falseであれば次のelse ifの式を実行し、 式の結果がtrueであればそのelse ifブロック内の文を実行する。 if、else ifのブロックのいずれかの文が実行されるとif文全体の処理は終了します。 | witch文の動作としてはまずswitchに 書かれている(式)を判別し合致するcase値の文を実行します。 もしすべてのcase値に合致しない場合は defaultに 記載されている文の実行を行います。 breakはcase文の後に置き、 そのcase文 の実行後、switch文全体の処理から抜け出すために使用します。 |
for |
while |
for(初期化式;ループ条件式;後処理の式){ |
while(ループ条件式){ 文 } |
まず繰り返し処理を行う前に初期化を実行し、 その後条件を判断しtrueであれば文を実行します。 条件にはブール型(true、false)の値を返す式があります。 条件を判断しtrueであれば文の実行を行い、 条件がtrueである限り繰り返し処理を行います。 |
まず初めに式の値を判別します。式はブール型(true、false) の値を返すものでないといけません。式の値が trueの場合、 文を実行します。文を実行した後、再び式の判別を行い、 値が trueである限り繰り返しを実行します。 |
キーボードから数字を入力するメソッド
public static int readNum() {
//戻り値の型がvoidのメソッドからは値を返せないのでintにしてあります。
byte b[] = new byte[100]; //byte(整数)型の配列変数bを宣言。
try { //例外の対象となるコードブロックの構成。
System.in.read(b);
/*ユーザーがキーボードで入力した文字を読み込む。
ここでは配列bに入力した文字を入れていっている。*/
return Integer.parseInt((new String(b)).trim());
/*return文 --- 返り値を計算して返す。
new String(b) --- 指定した配列bが初期値である新規のStringを作成する。
trim() --- Stringから先頭、末尾にある空白を削除する。
Integer.parseInt() --- 文字列として表された整数をその値の整数に変換。*/
}catch(Exception e) {
/*特定の種類の例外を処理する文のブロック。
このブロックにはException型またはそのサブクラスの型のオブジェクトを
処理する文が含まれている。このブロックの文は名前eを使って例外オブジェクトを
参照できる。*/
#include <stdio.h>
int main(void) { while(a == 'y' || a == 'Y'){ putchar(x); |
感想
こういう課題は苦手で、何を作ればいいかわからず、結局、約数を出力する問題にした。
入力した文字を読み取るというのは Java では初めてだったので、中々苦労した。あと、約数の式も、
プログラム独特の物なので、これもまた苦労しました。
というか、問題で、こういうプログラムを作れなどの問題がでてきたら、作れない自信がありますw。
参考文献
・独習Java第2版
ジョセフ・オニール 著