プログラミングreport#2

名前 : 上原和樹
番号 : 065709D
所属 : 情報工学科1年次

課題

Report#2:JavaアプリケーションとC言語のオリジナル問題作成と解答例{〜 11/20(Mon)}

問題のソース

/*
Program   : Quest.java
Author    : Kazuki Uehara
StudentID : 065709D
Date      : 2006/11/18(SAT)
Comment   : 配列と制御分を用いた問題文
*/


public class Quest {
    public static void main(String args[]) {
        int dt[] = { 2, 5, 8, 10, -3, 7, 15, -8};
        int i;

        for (i=0; i<7; i++) {
            System.out.print(dt[i]);
            switch (dt[i]) {
            case 5:
                System.out.print("-----5です\n");
                break;
            case 10:
                System.out.print("-----10です\n");
                break;
            case 15:
                System.out.print("-----15です\n");
                break;
            default:
                System.out.print("\n");
            }
            if (dt[i]<0) break;
        }
    }
}
    

問題

  1. 実効結果において表示される数字は何であるか?また、その理由を述べ よ。
  2. このプログラムは何回ループして抜けるか?
  3. このプログラムをwhileを使って書き換えよ

問題の解答

  1. 表示される数字は、2, 5, 8, 10, -3である。
    理由・・・プログラム内にあるif (dt[i]<0) breakによって負の数が出てきた らループを抜けるようになっているので-3以降の7, 15, -8は表示されない。
  2. ループは4回する。
  3. public class Quest2 {
        public static void main(String[] args) {
            int dt[]={ 2, 5, 8, 10, -3, 7, 15, -8};
            int i=0;
    
            while (i<7){                //iが7より小さいときwhileを繰り返す
                System.out.print(dt[i]);
                switch (dt[i]) {
                case 5:
                    System.out.print("-----5です\n");
                    break;
                case 10:
                    System.out.print("-----10です\n");
                    break;
                case 15:
                    System.out.print("-----15です\n");
                    break;
                default:
                    System.out.print("\n");
                }
                if (dt[i]<0) break;
                i=i+1;              //iに1を足してiに代入
            }
        }
    }
      

実行結果

[kazuki-uehara-no-ibook-g4:~/java] j06009% java Quest
2
5-----5です
8
10-----10です
-3
  

C言語で同様の動作をするプログラム

/*
Program : quest.c
*/

#include 

int main(){
  int dt[] = { 2, 5, 8, 10, -3, 7, 15, -8};
  int i;

  for (i=0; i<7; i++){
    printf("%d",dt[i]);
    switch (dt[i]) {
    case 5:
      printf("-----5です\n");
      break;
    case 10:
      printf("-----10です\n");
      break;
    case 15:
      printf("-----15です\n");
      break;
    default:
      printf("\n");
    }
    if (dt[i]<0) break;
 }
  return(0);
}
  

C言語での実行結果

[kazuki-uehara-no-ibook-g4:~/java] j06009% ./a.out
2
5-----5です
8
10-----10です
-3
  

問題プログラムソースの解説および考察

ソースの簡単な解説
  • public class QuestでQuestという新しい名前のclassを宣言。
  • public static void main(String args[])でmainという名前のメソッドを 宣言。
  • int dt[]で整数型の1次元配列の宣言
  • int iは整数型でiを使うと宣言
  • for (i=0; i<7; i++)でiが0から6になるまでi=i+1を繰り返す。(計7回 のループになる。
  • System.out.print(dt[i])で配列dt[]の中身を出力する。
  • switch (dt[i])では一致する条件をdt[i]からとる。
  • case 5~break;ではdt[i]の中身が5の時printの出力をしてswitchから抜け る。ほかの条件についても同様のことがいえる。
  • if (dt[i]<0) breakではdt[i]が負の数になった時にforのループから抜け る。


public static void main(String args[])について
main()という名前のメソッドを宣言していて、mainメソッドがargsという1つ の引数を受け取る。
argsはStringというオブジェクトの配列である。staticは、 このメソッドがQuestクラスのインスタンスではなく、Questそのものに関連づ けられていることを示す。voidはこのメソッドに戻り値がないことを示す。


forステートメントについて
forループは、単一のステートメントを指定の回数だけ繰り返し実行するため に使う。
単一のステートメントを繰り返し実行する際の一般形式は
for ( initialization; test; increment);
の形をとる。
initialization・・・1回しか実効されずこの後にループが始まる。
test・・・ループ制御変数と目標値を比較する。testが真の間ループを繰り返す。
increment・・・ループの最後に実行される。用途としてはループ制御変数を一 定量ずつ増やしたり減らしたりなど。


switchステートメントについて
switchは複数選択型ステートメントで、このステートメントでは、プログラム 内の複数の選択肢の中から1つを選択することができる。
式はchar型、byte型、short型、int型のうちで、どれかの定数リストに対して順 にテストされ、一致するものが見つかると実行される。
switchの一般形式は
  switch (expression) {
  case constant1:
  statement sequence
  break;
  case constant2:
  statement sequence
  break;
  ・
  ・ 
  ・
  default:
  statement sequence
  break;
  }
  
の形をとる。


ifステートメントについて
ifは選択ステートメントの1つであり、真または偽と評価される条件テストの 結果によって制御される。すなわち、このステートメントは条件の結果に基づ いて判断を行うものである。
最も簡単な一般形式は
if (expr) statement;
の形で示される。


選択ステートメントであるifとswitchの違い
switchステートメントは等しいかどうかのテストしか行わない。これに対して、 ifはどのような条件のタイプでも使える。
また、switchはchara型、byte型、short型、int型のいずれかでしか動作しない。 さらに、switch内に、同一の値を持つ2つのcase定数があってはいけない。
ifは選択肢が2つの時には適しているが、2つ以上の選択肢が必要な場合は面倒 な作業が必要になる。


whileステートメントについて
whileループは式の値が真である限り、その対象の評価を繰り返すという動作 を行う。式が偽になると、動作は停止する。
式の値はループの最初にチェックされ、最初の式が偽であった場合ループは実 行されない。
whileの構文は
while (expression) statement;
である。

感想

どんな問題を作ろうか考えるのに時間がかかった・・・。実際問題自体は何で もなかったが、最初から自分でプログラミングしながらやってちゃんとしたプ ログラムが作れたので嬉しかった。
また、久しぶりにC言語をやったのでほとんど覚えていなくて困った。
あと、スタイルシートはなんとか谷口先生のを参考にしてやったから何とかなっ たけど、あまり理解できてないのでもっとスタイルシートを勉強しないと行け ないと思った。

参考文献

独習Java 第3版 ジョセフ・オニール著 トップスタジオ訳