1 / 11

オブジェクト指向言語・ オブジェクト指向言語演習

オブジェクト指向言語・ オブジェクト指向言語演習. 中間試験回答例. オブジェクト指向言語 中間試験解説 1. (1) 円柱の体積(円柱の体積 = 底面の円の面積 x 高さ)を求めるプログラムを作成しなさい。ただし、出力結果は、入力した底面の円の半径 ( Radius ) に対して、高さ 2.0, 4.0, 6.0, 8.0, 10.0 のときの体積を、以下に示す実行結果と同じ形式(空白や小数点以下の桁数など)で表示するようにすること。また、円周率は 3.14 として計算しなさい。(ただし、青字の部分は入力文字列を表す。)

jorryn
Download Presentation

オブジェクト指向言語・ オブジェクト指向言語演習

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

  3. オブジェクト指向言語 中間試験解説1 #include <stdio.h> 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; } • 半径を入力する変数をradius,円の面積を計算した結果を代入する変数をcircleとして実数型で宣言する。 • 決められた回数の繰り返しなので、for文を使う。 • 2,4,6,8,10 は 1*2, 2*2 ,3*2 ,4*2 ,5*2 と同じ。 情報処理技術基礎演習II

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

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

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

  9. オブジェクト指向言語 中間試験解説3 • コマンドラインの引数の数は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); } 情報処理技術基礎演習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; } 情報処理技術基礎演習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; } 情報処理技術基礎演習II

More Related