ソフトウェア基礎演習課題 文法理解度確認範囲 問題 1 データ型 ( 変数, データ型 ) 問題 2 制御構造 (switch 文 ) 問題 3 制御構造 (while 文 ) 問題 4 制御構造と配列 ( 総和 ) 問題 5 制御構造と配列 ( 総和, 平均 ) 問題 6 データ型と各種演算子 ( 文字列, 検索 ) 問題 7 クラスの定義 ( メソッドの定義, コンストラクタの定義, キャスト ) 問題 8 クラスの定義 ( メソッドの定義, コンストラクタの定義 ) 問題 9 クラスの定義 ( メソッドの定義, コンストラクタの定義, コンストラクタのオーバロード ) 問題 10 クラス継承 ( メソッドのオーバライド ) 問題 11 クラス継承 ( メソッドの継承, メソッドのオーバライド ) 問題 12 インターフェイス ( インターフェイスの実装, インターフェイスの継承 ) 1
次の問題 1~10 のプログラムを完成させよ. 問題 1 変数 a が 3 以上でかつ 7 以下の場合 true と表示し そうでない場合は false と表示するプログラムをの中を埋めて作成せよ ( クラス名 :Prog061004_01) import java.io.*; public class Prog061004_01 { public static void main(string[] args) throws IOException { BufferedReader buf = new BufferedReader(new InputStreamReader(System.in)); int a; boolean b; a = Integer.parseInt(buf.readLine()); b = ; System.out.println(b); 問題 2 四則演算子 (+ - * /) に従って実数の演算を行うプログラムを switch 文を用いて作成せよ ( クラス名 :Prog061004_02) ここで 演算に用いる 2 つの変数 a,b を double 型 演算子に用いる変数 op を文字型で宣言する このプログラムの処理手順を次に示す 1 変数 a,b に値を入力する 2 変数 op に演算子を入力する 3 演算子に従って演算を行う 4 演算結果を出力する 実数値 文字の取得例を次に示す BufferedReader buf = new BufferedReader(new InputStreamReader(System.in)); double a = Double.parseDouble(buf.readLine()); // 実数値を標準入力より取得 double b = Double.parseDouble(buf.readLine()); // 実数値を標準入力より取得 char op = buf.readline().charat(0); // 文字を標準入力より取得 問題 3 1 から順に整数を足していき (1+2+3+...+n) その和が 100 を超えない最大の n を求めるプログラムをの中を埋めて作成せよ ( クラス名 :Prog061004_03) import java.io.*; public class Prog061004_03 { public static void main(string[] args) throws IOException { int n = 1; int sum = 0; while( ){ // 今までの和と n を足し 100 以下ならループ // 現在の和に n を足す //n を一つ増やす System.out.println(n -1); // 一つ前の n を出力 2
問題 4 整数型の配列に格納されたデータの総和を求めるプログラムを for ループを用いて作成せよ ( クラス名 : Prog061004_04) このプログラムの処理手順を次に示す 1 配列の格納するデータの個数 n (n>0) を入力する 2n の大きさで配列を確保する 3 配列に n 個分のデータを格納する 4 配列の総和を求める 5 総和を出力する 問題 5 整数型の 2 つの配列に学籍番号と得点を入力し, 得点の平均点と得点が平均点以上の学生の学籍番号を出力するプログラムを作成せよ ( クラス名 :Prog061004_05) このプログラムの処理手順を次に示す このプログラムの処理手順を次に示す 1 学生の人数 n (n>0) を入力する 2n の大きさで整数型の 2 つの配列を 2 つ確保する 3 配列に n 人分の学籍番号と得点を入力する 4 得点の平均点を求める 5 得点の平均点を出力する 6 得点が平均得点以上の学生の学籍番号を出力する 問題 6 文字列の中から任意の文字を検索し, 検出した文字列中の文字の場所を出力するプログラムを作成せよ ( ク ラス名 :Prog061004_06) このプログラムの処理手順を次に示す 1 文字列を入力する 2 検索文字を入力する 3 文字を検出したら, その場所を出力する 43の処理を文字列の最後まで続ける 5 検出されなかった場合は," 検索文字なし " と出力する ここで 文字列 s 中の i 番目の文字と文字 ch が等しいか否かの判定は次のように行う for (int i = 0; i < s.length(); i++){ // 入力文字列のカウント if(ch == s.charat(i)) { 実行例 文字列 = asdfghffdfgghf 検索文字 = g 検出場所 :5 11 12 3
問題 7 税率と商品の定価を入力し, 税額を計算して出力するプログラムをス名 :Prog061004_07) の中を埋めて作成せよ ( クラ import java.io.*; class Calculate { private int tax; // コンストラクタの宣言 Calculate ( ) { this.tax = tax; // 税額計算 int calculatetax ( ) { return((int)((p * tax/100.0)+0.5)); public class Prog061004_07{ public static void main(string[ ] args) throws IOException { BufferedReader buf = new BufferedReader(new InputStreamReader(System.in)); // 税率を標準入力より取得 System.out.print(" 税率 :"); int tax = Integer.parseInt(buf.readLine()); // オブジェクトの生成 コンストラクタの実行 Calculate goods = ; // 定価を標準入力より取得 System.out.print(" 定価 :"); int price = Integer.parseInt(buf.readLine()); // 税額計算の実行 表示 System.out.println(" 税額は " + +" 円 "); 実行結果 税率 :5 定価 :10 税額は 1 円 問題 8 家族の情報を設定して, 内容を表示するプログラムをス名 :Prog061004_08) の中を埋めてプログラムを作成せよ ( クラ class MyFamily { private String name; private int age; // コンストラクタの宣言 MyFamily (String name, int age) { ; ; // 家族の情報を表示するメソッド void display() { System.out.println( ); public class Prog061004_08{ public static void main (String[] args){ // オブジェクトの生成 コンストラクタの実行 MyFamily father = new MyFamily("hiroshi",50); MyFamily mother = new MyFamily("midori",45); 4
MyFamily brother = new MyFamily("taro",20); // 家族の情報の表示 実行結果 Name: hiroshi,age: 50 Name: midori,age: 45 Name: taro,age: 20 問題 9 三角形の3 辺を指定して, 面積を計算し, 結果を表示するプログラムをの中を埋めて作成せよ ( クラス名 :Prog061004_09) なお, 三角形の3 辺が指定されない場合は, 初期値として各辺の長さとして2が設定されるものとする. class Triangle{ private double a, b, c; // コンストラクタの宣言 public Triangle { this.a = this.b = this.c =2; public Triangle { this.a = a; this.b = b; this.c = c; // 面積の計算 結果の返却 public double getarea(){ double s; double area; s = ( a + b + c ) / 2.0; area = Math.sqrt( s * (s-a) * (s-b) * (s-c) ); return ; // 3 辺の返却 public String getside(){ return ; public class Prog061004_09{ public static void main(string args[]){ Triangle T1, T2; // オブジェクトの生成 コンストラクタの実行 T1 = new Triangle(); T2 = new Triangle( 3,4,5 ); // 面積計算の実行 表示 System.out.println("3 辺 "+ +" の三角形の面積 :"+ ); System.out.println("3 辺 "+ +" の三角形の面積 :"+ ); 実行結果 3 辺 2.0 2.0 2.0 の三角形の面積 :1.7320508075688772 3 辺 3.0 4.0 5.0 の三角形の面積 :6.0 5
問題 10 次の Java プログラムの説明及びプログラムを読み, の中を埋めてプログラムを完成させよ ( クラス名 :Prog061004_10) [ プログラムの説明 ] チケットの種別と枚数を入力して購入価格を出力するプログラムである チケットの種別は a 又は b であり それぞれの価格は 1000 円 2000 円である また 各チケットの枚数の制限は 10 枚である チケットの購入価格はメソッド getticket で計算し 枚数を入力して価格を出力する また 枚数が不足している場合には-1 を出力する 実行例を次に示す チケット種別 = a チケット枚数 = 10 購入価格 =10000 [ プログラム ] import java.io.*; class Ticket{ int numberofa = 10; int numberofb = 10; int valueofa = 1000; int valueofb = 2000; public int getticket(int n){ return 0; class ATicket extends 1-a { public int 1-b (int n){ if(numberofa-n >= 0) { numberofa = 1-c ; return 1-d ; else { return -1; class BTicket extends 1-e { public int 1-f (int n){ if(numberofb-n >= 0) { numberofb = 1-g ; return 1-h ; else { return -1; public class Prog061004_10{ public static void main(string[] args) throws IOException { BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); System.out.print(" チケット種別 = "); char c = in.readline().charat(0); // チケット種別を入力 System.out.print(" チケット枚数 = "); int n = Integer.parseInt(in.readLine()); // チケット枚数を入力 Ticket t = new Ticket(); switch( 1-i ){ case 'a': t = new ATicket(); case 'b': t = new BTicket(); default: 6
System.out.println(" チケット種別が間違っています "); int v = t.getticket(n); // 購入価格の計算 if(v >= 0) { System.out.println(" 購入価格 ="+v); else { System.out.println(" 在庫枚数が不足しています "); 問題 11 次の Java プログラムの説明及びプログラムを読み, を埋めてプログラムを完成させよ ( クラス名 :Prog061004_11) [ プログラムの説明 ] 購入する PC のスペックを入力して購入価格を出力するプログラムである スペックの種別は標準仕様,a 又は b であり 入力するスペックの種別が未入力の場合に標準仕様となる 標準仕様,a 仕様,b 仕様の内容を次に示す 標準仕様 : メモリ =256MB ( 価格 : 3000 円 ) CPU=2GHz ( 価格 :15000 円 ) ディスク =160GB ( 価格 : 9000 円 ) a 仕様 : メモリ =512MB ( 価格 : 6000 円 ) CPU=2GHz ( 価格 :15000 円 ) ディスク =320GB ( 価格 :15000 円 ) b 仕様 : メモリ =512MB ( 価格 : 6000 円 ) CPU=4GHz ( 価格 :30000 円 ) ディスク =320GB ( 価格 :15000 円 ) 実行例を次に示す PC スペック種別 = b PC 価格 =51000 [ プログラム ] import java.io.*; class PC{ private int SpecOfMemory; private int SpecOfCPU; private int SpecOfDisk; //Mega byte //Giga Hz //Giga byte public PC() { // 標準仕様の設定 setspecofmemory(256); //Mega byte setspecofcpu(2); //Giga Hz setspecofdisk(160); //Giga byte // メモリ仕様の設定 public void setspecofmemory(int m){ // メモリ仕様の設定 SpecOfMemory = m; public void setspecofcpu(int c){ // CPU 仕様の設定 SpecOfCPU = c; public void setspecofdisk(int d){ // ディスク仕様の設定 SpecOfDisk = d; public int getvalueofmemory(int n){ // メモリ価格の取得 int v = 0; 7
switch(n){ 2-a default: System.out.println("Memoryの値が間違っています "); return v; public int getvalueofcpu(int n){ // CPU 価格の取得 int v = 0; switch(n){ 2-b default: System.out.println("CPUの値が間違っています "); return v; public int getvalueofdisk(int n){ // ディスク価格の取得 int v = 0; switch(n){ 2-c default: return v; System.out.println("Disk の値が間違っています "); public int computevalue(){ return // a 仕様の設定 class PC_1 extends 2-e { public PC_1() { 2-f 2-d //Mega byte //Giga byte // b 仕様の設定 class PC_2 extends 2-g { public PC_2(){ setspecofcpu(4); //Giga Hz 8
public class Prog061004_11{ public static void main(string[] args) throws IOException { BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); System.out.print("PCスペック種別 = "); String s = in.readline(); char c = 'd'; //PC 標準仕様の設定 if(s.length()!=0){ c = s.charat(0); //PCスペック種別を標準入力より取得 PC p = new 2-h ; switch(c){ case 'a': p = new 2-i ; case 'b': p = new 2-j ; default: int v = p.computevalue(); System.out.println("PC 価格 ="+v); 問題 12 次の Java プログラムの説明及びプログラムを読み, を埋めてプログラムを完成させよ ( クラス名 :Prog061004_12) [ プログラムの説明 ] 図形の面積を計算し, その結果を出力するプログラムである 図形は, 三角形, 長方形及び正方形のいずれかであり, 図形オブジェクトは, 次のような属性をもつ 三角形 : 三辺の長さ長方形 : 縦と横の長さ正方形 : 一辺の長さ このプログラムは, 次の一つのインタフェースと四つのクラスで構成される (1)Figure 図形のインタフェースであり, 面積を計算してその結果を返す抽象メソッド getarea を宣言している (2)Triangle 三角形のクラスであり, データを文字列で返すメソッド tostring と三角形の面積を計算してその結果を返すメソッド getarea を実装している (3)Rectangle 長方形のクラスであり, データを文字列で返すメソッド tostring と長方形の面積を計算してその結果を返すメソッド getarea を実装している (4)Square 正方形のクラスであり, データを文字列で返すメソッド tostring を実装している (5)Prog061004_15 メソッド main をもつクラスであり, 次の処理を行う 1 三角形, 長方形及び正方形のデータを生成し, 配列 figures に設定する 2 面積を求めて, 結果を出力する 9
プログラムの実行結果を次に示す 実行結果 Triangle : sides = 2.0, 3.0, 3.0 : area = 2.8284271247461903 Rectangle : width = 5.0, height = 8.0 : area = 40.0 Square : width = 5.0 : area = 25.0 interface Figure { public double getarea(); class Triangle implements { double length1; double length2; double length3; public Triangle(double length1, double length2, double length3) { this.length1 = length1; this.length2 = length2; this.length3 = length3; public String tostring() { return " n Triangle : sides = " + length1 + ", " + length2 + ", " + length3 + " : " ; public double getarea() { double lengthw = (length1 + length2 + length3) / 2.0; double trarea = Math.sqrt(lengthw * (lengthw - length1) * (lengthw - length2) * (lengthw - length3)); return ; class Rectangle implements { double length1; double length2; public Rectangle(double length1, double length2) { this.length1 = length1; this.length2 = length2; public String tostring() { return " n Rectangle : width = " + length1 + ", height = " + length2 + " : " ; public double getarea() { return ; class Square extends { public Square(double length1) { super(length1, length1); public String tostring() { return " n Square : width = " + length1 + " : "; public class Prog061004_12{ public static void main(string args[]) { Triangle t1 = new Triangle(2, 3, 3); Rectangle r1 = new Rectangle(5, 8); Square s1 = new Square(5); figures = {t1, r1, s1; for (int i = 0; i < figures.length; i++) { System.out.println( + " area = ); 10