Presentation is loading. Please wait.

Presentation is loading. Please wait.

オブジェクト指向言語・ オブジェクト指向言語演習 中間試験回答例. Jan. 12, 2005 情報処理技術基礎演習 II 2 オブジェクト指向言語 中間試験解説 1  (1) 円柱の体積(円柱の体積 = 底面の円の面積 x 高さ) を求めるプログラムを作成しなさい。ただし、出力結果は、入 力した底面の円の半径.

Similar presentations


Presentation on theme: "オブジェクト指向言語・ オブジェクト指向言語演習 中間試験回答例. Jan. 12, 2005 情報処理技術基礎演習 II 2 オブジェクト指向言語 中間試験解説 1  (1) 円柱の体積(円柱の体積 = 底面の円の面積 x 高さ) を求めるプログラムを作成しなさい。ただし、出力結果は、入 力した底面の円の半径."— Presentation transcript:

1 オブジェクト指向言語・ オブジェクト指向言語演習 中間試験回答例

2 Jan. 12, 2005 情報処理技術基礎演習 II 2 オブジェクト指向言語 中間試験解説 1  (1) 円柱の体積(円柱の体積 = 底面の円の面積 x 高さ) を求めるプログラムを作成しなさい。ただし、出力結果は、入 力した底面の円の半径 ( Radius ) に対して、高さ 2.0, 4.0, 6.0, 8.0, 10.0 のときの体積を、以下に示す実行結果と同じ 形式(空白や小数点以下の桁数など)で表示するようにするこ と。また、円周率は 3.14 として計算しなさい。(ただし、青 字の部分は入力文字列を表す。)  $./oom-1 Input Radius (float): 3.1 2.0 - 60.35 4.0 - 120.70 6.0 - 181.05 8.0 - 241.40 10.0 - 301.75

3 Jan. 12, 2005 情報処理技術基礎演習 II 3 オブジェクト指向言語 中間試験解説 1  半径を入力する変数を radius, 円の面積を計算した結果を代入 する変数を circle として実数型で宣言する。  決められた回数の繰り返しなので、 for 文を使う。 2,4,6,8,10 は 1*2, 2*2,3*2,4*2,5*2 と同じ。 #include int main( void ){ float radius, circle; int i; printf("Input Radius (float) :"); scanf("%f",&radius); circle = radius * radius * 3.14; for (i = 1; i <= 5; i++){ printf("%.1f - %.2f\n",(float)i*2., circle*(float)i*2.); } return 0; }

4 Jan. 12, 2005 情報処理技術基礎演習 II 4 オブジェクト指向言語 中間試験解説 1  printf の中で使われる % と変換文字の間に許されるもの マイナス符号  変換された文字を左づめで表示 フィールドの最小幅を指定する数字  上記マイナス符号が無ければ、変換された文字を右づめで、最小 幅を保ちつつ表示。ただし、最小であるので範囲を超える場合は そのまま表示する。 ピリオド  フィールドの幅を示す数字と桁数を指定する数字の区切り 例  %-20s20 文字幅の文字列を左づめで出力  %15.3f15 文字幅の実数を小数点以下3桁  この15文字幅を省略して自動の文字幅小数点以下 3 桁とす ると、  %.3f 自動文字幅、小数点以下 3 桁 printf("%.1f - %.2f\n",(float)i*2., circle*(float)i*2.);

5 Jan. 12, 2005 情報処理技術基礎演習 II 5 オブジェクト指向言語 中間試験解説 2  (2) 整数型の引数1と引数2が与えられたとき、大きい方を 引数1に、小さい方を引数2に入れて戻る関数 MaxMin を作 成しなさい。なお、 main 関数としては以下を使用し ( 変更不 可 ) 、プログラムは main 関数も含めて動作するものを提出す ること。  題意から、関数 MaxMin は 2 つの引数をとることがわかる。ま た、与えられた main 関数のプロトタイプ宣言から、それらは ポインタであることもわかる。  また、戻り値が無いので関数は void 型となる。 void MaxMin(int *, int *);  main 関数から呼び出すときにポインタを渡すため、 MaxMin( &in1, &in2 ); としている。

6 Jan. 12, 2005 情報処理技術基礎演習 II 6 オブジェクト指向言語 中間試験解説 2  仮引数として x, y を用意する。受け渡しはポインタなので、 そのよう記述する。  *x はxの指し示すポインタの内容である。  *x < *y ならば入れ替え、そうでなければそのまま。  仮の変数を tmp としてそこに入れて交換する。 void MaxMin(int *x, int *y){ int tmp; if ( *x < *y ) { tmp = *x; *x = *y; *y = tmp; } return ; }

7 Jan. 12, 2005 情報処理技術基礎演習 II 7 オブジェクト指向言語 中間試験解説 3 (3) 引数の1番目で示されるファイルを開き、母音 ( aiueo ) の数 を数えるプログラムを作成しなさい。ただし、1行の母音の数を数 える関数 str_cout_v を作成し、それを利用しなさい。結果は以下 に示すとおりである。(ただし、青字の部分は 入力文字列を表 す。)  課題で str_count_n を作成した。このときは、文字が ’ 0 ’ 以上かつ ’ 9 ’ 以下のときに文字数を数えるにしていた。 if (*str >=‘0’ && *str <= ‘9’) { cnt++; }  今回は、 aiueo のどれか (a または i または u または e または o) であるの で、 if (*str == ‘a’ || *str == ‘i’ || *str == ‘u’ || *str == ‘e’ || *str == ‘o’ || *str == ‘A’ || *str == ‘I’ || *str == ‘U’ || *str == ‘E’ || *str == ‘O’ ) { cnt++; }

8 Jan. 12, 2005 情報処理技術基礎演習 II 8 #include #define MAXLINE 1024 int str_count_v(char *); int main( int argc, char *argv[] ) { char line[MAXLINE], ch; int i, cnt=0; FILE *fp; オブジェクト指向言語 中間試験解説 3  ヘッダファイルの読み込み。  今回使用する関数 str_cnt_v のプロトタイプ宣言 引数が文字列であることがわかる。  コマンドラインからデータを取得するため、 main の引数に argc と argv を用いる。  1 行を読み込むための文字配列として line を用意する。大きさは MAXLINE とする。  ファイルを使用するため、ファイル型のポインタ fp を宣言する

9 Jan. 12, 2005 情報処理技術基礎演習 II 9  コマンドラインの引数の数は argc に入っているので、これが 1 以下の場合はエラーを返す。  fopen を利用して 1 番目の引数のファイルをオープンし、これ のポインタをfpに代入する。  fopen に失敗した場合は NULL が帰ってくるのでそのエラー処 理を行う。 if (argc <= 1) { printf("Error in arguments\n"); exit (EXIT_FAILURE); } if ((fp = fopen(argv[1],"r")) == NULL) { printf("Error: open file %s\n",argv[1]); exit (EXIT_FAILURE); } オブジェクト指向言語 中間試験解説 3

10 Jan. 12, 2005 情報処理技術基礎演習 II 10 オブジェクト指向言語 中間試験解説 3  fgets を利用して 1 行を文字配列 line に読み込む。  fgets が NULL を返したらファイルの終端に達したことになる ので、それで while のループを抜ける。 while ( fgets(line, MAXLINE, fp)){ cnt += str_count_v(line); } printf("The number of vocal in file %s is %d.\n“, argv[1], cnt); return 0; }

11 Jan. 12, 2005 情報処理技術基礎演習 II 11 オブジェクト指向言語 中間試験解説 3  cnt は最初 0 で初期化しておく。  文字列の最後まで str を増やしながら while 文で進める。  条件が成立したときに cnt を 1 増やす。  戻り値は cnt となる。 int str_count_v(char *str){ int cnt = 0; while (*str != '\0'){ if(*str == 'a' || *str == 'i' || *str == 'u' || *str == ‘e’ || *str == ‘o‘ || *str == ’A’ || *str == ‘I’ || *str == ‘U’ || *str == ‘E’ || *str == 'O') cnt++; str++; } return cnt; }


Download ppt "オブジェクト指向言語・ オブジェクト指向言語演習 中間試験回答例. Jan. 12, 2005 情報処理技術基礎演習 II 2 オブジェクト指向言語 中間試験解説 1  (1) 円柱の体積(円柱の体積 = 底面の円の面積 x 高さ) を求めるプログラムを作成しなさい。ただし、出力結果は、入 力した底面の円の半径."

Similar presentations


Ads by Google