Report4(11/22締め切り)

制御文と配列を用いてオリジナルのJavaアプリケーションによる初級問題(なるべく短い行数で)を作成し、模範解答例を示せ。
併せて、同様な動作を行うC言語のソースコードを示せ。

・問題プログラム

 下のプログラムは、11月のカレンダーを表示させるプログラムである。A~を穴埋めせよ。

public class Rep4_a {
public static void main(String[] args) {
System.out.println("11月のカレンダー");
// 2次元配列の定義
[  A  ]=
{
{" 日"," 月"," 火"," 水"," 木"," 金"," 土"},
{"  "," 1"," 2"," 3"," 4"," 5"," 6",},
{" 7"," 8"," 9","10","11","12","13"},
{"14","15","16","17","18","19","20"},
{"21","22","23","24","25","26","27"},
{"28","29","30"},

};
// i = 0 から始めて i < 6 である間は繰り返し
for (  B ) {
System.out.println(i + "週目");
// j = 0 から初めて j < November[i].length である間は繰り返し
for ( C ) {
System.out.print(November[i][j] + "; ");
}
System.out.println("");
}
}
}

 

・解答

[A]=String[][] November

(B)=int i = 0; i < 6 ; i++

(C)=int j = 0; j < November[i].length; j++

 

・実行結果

11月のカレンダー
0週目
 日;  月;  火;  水;  木;  金;  土;
1週目
  ;  1;  2;  3;  4;  5;  6;
2週目
 7;  8;  9; 10; 11; 12; 13;
3週目
14; 15; 16; 17; 18; 19; 20;
4週目
21; 22; 23; 24; 25; 26; 27;
5週目
28; 29; 30;

 

@配列について

a.一次元配列というのは、共通の名前を使用してアクセスすることが可能な、同じの型を持つ一連の変数のことである。
 配列内の個々の変数は配列要素と呼ばれる。

↓一次元配列の宣言

type varName[];

typeにはJavaの有効なデータ型を指定し、varNameには配列の名前を指定する。 

 

〜考察〜

1.System.out.println("11月のカレンダー");
 で文字列を表記する。

2.String[][] November =
  で、2次元配列の定義をおこなう。   

 ・String[][] November でも String November[][]でも良い。

 
 ・下は実際に数字と曜日を格納している様子である。

  {" 日"," 月"," 火"," 水"," 木"," 金"," 土"},
  {"  "," 1"," 2"," 3"," 4"," 5"," 6",},
  {" 7"," 8"," 9","10","11","12","13"},
  {"14","15","16","17","18","19","20"},
  {"21","22","23","24","25","26","27"},
  {"28","29","30"},

 3.最初のfor文はi = 0 から始めて i < 6 である間は繰り返すことを表している。

 4.System.out.println(i + "週目");で出力。

 5.次のfor文はj = 0 から初めて j < November[i].length である間は繰り返すことを表している。
  for (int j = 0; j < November[i].length; j++) {

・c言語でのプログラム

#include<stdio.h>
#include<string.h>
int main() {
int i=0;
int j=0;

printf("11月のカレンダー\n");
/* 2次元配列の定義*/

char *November[6][7];
November[0][0] = "日";
November[0][1] = "月";
November[0][2] = "火";
November[0][3] = "水";
November[0][4] = "木";
November[0][5] = "金";
November[0][6] = "土";

/* i = 0 から始めて i < 6 である間は繰り返し*/
for (i = 0; i < 6; i++) {
printf("%d 週目\n",i);

/* j = 0 から初めて j < searches[i].length である間は繰り返し*/
for (j = 0; j < 7; j++){

if(i==0){
printf("%s",November[i][j]);
}
int day = (i-1)*7+j;
if(day >= 1 && day <= 30){
printf("%4d;",day);
} else {
printf(" ");
}
}
printf("\n");
}
}

〜感想と反省〜

 問題は簡単につくったつもりなのに、c言語に変換するのがとても手間取った。友人の多大なる力を借り、AM6:00にようやく仕上がりました。疲れた...。テストがあるので頑張ります!

 

〜参考文献〜

独習Java 第2版  〜ジョゼフ・オニール〜

C実践プログラミング 第3版