当日のOHP資料です。
Download : sample-001.c ( SJIS 版 )
/* * 2011/11/11 sample-001.c */ /* * */ #include <stdio.h> #include "s_print.h" #include "s_input.h" /* * データ型(平面上の点)を表す型(Point2D)の定義 */ typedef struct { int x; /* x 座標 */ int y; /* y 座標 */ } Point2D; /* 新しい型 Point2D の定義 */ /* * 入力 (Input) * キーボードから「点」を「座標の形」で入力してもらる */ Point2D input_Point2D() { Point2D result; s_print_string ( "x=" ); /* x 座標の入力 */ result.x = s_input_int(); s_print_string ( "y=" ); /* y 座標の入力 */ result.y = s_input_int(); return result; /* 入力した結果を返す */ } /* * 出力 (Output) * 「点」を、画面に出力する ( 座標の形で.. ) */ void output_Point2D( Point2D pt ) { s_print_string ( "( " ); s_print_int ( pt.x ); s_print_string ( ", " ); s_print_int ( pt.y ); s_print_string ( " )" ); } /* * move_x_Point2D * x 方向の移動: 点 pt を x 軸方向に dx だけ平行移動する関数 */ Point2D move_x_Point2D( Point2D pt, int dx ) { pt.x += dx; /* 点 pt の x 座標だけを dx だけ増やす */ /* pt.x は pt の x の部分 */ /* 「pt.x += dx」は「pt.x = pt.x + dx」 の省略形 ( cf. x++ ⇔ x += 1 ⇔ x = x + 1 ) */ /* pt が (2,4)で dx が 3 だったら この代入文で (2,5) になる */ return pt; /* この計算した (座標) を結果として返す */ /* Point2D result; // 結果の値を入れる変数 result.x = pt.x + dx; // 新しい x 座標は、元の座標+移動距離 result.y = pt.y; // 新しい y 座標は、元と同じ return result; // 新しい座標を結果として返す */ } /* * y 方向の移動 */ Point2D mopte_y_Point2D( Point2D pt, int dy ) { pt.y += dy; return pt; } /* * 90 度回転 */ Point2D rotate_Point2D( Point2D pt ) { Point2D result; /* 90 回転した結果を入れる */ /* (x,y) -> (y,-x) */ result.x = - pt.y; /* 新しい x 座標は、元の y 座標の符号をかえたもの */ result.y = pt.x; /* 新しい y 座標は、元の x 座標 */ return result; /* 結果を返す */ } /* * */ int main ( void ) { Point2D pt; Point2D pt2; int c; s_print_string ( "一つ目の点の座標をいれてください。\n" ); pt = input_Point2D(); output_Point2D( pt ); s_print_string ( "が入力されました。\n" ); s_print_string ( "x 軸方向の移動量をいれてください\n" ); c = s_input_int(); s_print_int ( c ); s_print_string ( "だけ x 軸方向に移動します。\n" ); pt2 = move_x_Point2D ( pt, c ); output_Point2D( pt2 ); s_print_string ( " になりました\n" ); s_print_string ( " 90 度回転した結果は " ); output_Point2D( rotate_Point2D ( pt ) ); s_print_string ( " となります\n" ); return 0; } /* * */
2 3 4
C:\usr\c\> sample-001< sample-001.in 一つ目の点の座標をいれてください。 x=2 y=3 ( 2, 3 )が入力されました。 x 軸方向の移動量をいれてください 4 4だけ x 軸方向に移動します。 ( 6, 3 ) になりました 90 度回転した結果は ( -3, 2 ) となります C:\usr\c\>
Download : sample-002.c ( SJIS 版 )
/* * 2011/11/11 sample-002.c */ /* * */ #include <stdio.h> #include <stdlib.h> #include "s_print.h" #include "s_input.h" /* * 有理数(分数)を表す型(Rational)の定義 */ typedef struct { int bunbo; /* 分母 (自然数 > 0) */ int bunshi; /* 分子 (整数)*/ } Rational; /* 新しい型 Rational の定義 */ int iabs ( int v ) { if ( v < 0 ) { v = -v; } return v; } int gcm ( int m, int n ) { if ( n == 0 ) { return m; } else { return gcm ( n, m % n ); } } Rational normalize_Rational ( Rational r ) { int g; /* 分母、分子の共通因数 */ if ( r.bunbo == 0 ) { /* 有理数としては表現不可 */ s_print_string ( "分母が 0 なので、終了します\n" ); exit ( -1 ); /* プログラムを終了する。その時 error code -11 とする */ } if ( r.bunbo < 0 ) { /* -2/-4 -> 2/4 */ r.bunbo = - r.bunbo; r.bunshi = - r.bunshi; } /* 約分をする */ g = gcm ( r.bunbo, iabs ( r.bunshi ) ); r.bunbo /= g; /* r.bunbo = r.bunbo / g */ r.bunshi /= g; return r; } /* 0 (整数値)は、<1,0> (分母が 1 となる) 形にする /* * 入力 (Input) * キーボードから「点」を「座標の形」で入力してもらる */ Rational input_Rational() { Rational result; s_print_string ( "分子=" ); /* 分子の入力 */ result.bunshi = s_input_int(); s_print_string ( "分母=" ); /* 分母の入力 */ result.bunbo = s_input_int(); return normalize_Rational ( result ); /* 入力した結果を正規化して返す */ } /* * 出力 (Output) * 「有理数」を、画面に出力する ( 分数の形で.. ) */ void output_Rational( Rational r ) { s_print_int ( r.bunshi ); if ( r.bunbo > 1 ) { s_print_string ( " / " ); s_print_int ( r.bunbo ); } } /* * multiply_Rational : 有理数のかけ算 */ Rational multiply_Rational ( Rational a, Rational b ) { Rational result; result.bunshi = a.bunshi * b.bunshi; result.bunbo = a.bunbo * b.bunbo; return normalize_Rational ( result ); /* 約分の問題も解決 */ } /* * */ int main ( void ) { Rational r; Rational s; s_print_string ( "一つ目の有理数をいれてください。\n" ); r = input_Rational(); output_Rational( r ); s_print_string ( "が入力されました。\n" ); s_print_string ( "二つ目の有理数をいれてください。\n" ); s = input_Rational(); output_Rational( r ); s_print_string ( " と " ); output_Rational( s ); s_print_string ( " の積は " ); output_Rational( multiply_Rational ( r, s ) ); s_print_string ( " となります。\n" ); return 0; } /* * */
1 2 2 3
C:\usr\c\> sample-002< sample-002.in 一つ目の有理数をいれてください。 分子=1 分母=2 1 / 2が入力されました。 二つ目の有理数をいれてください。 分子=2 分母=3 1 / 2 と 2 / 3 の積は 1 / 3 となります。 C:\usr\c\>
Download : 20111111-01.c ( SJIS 版 )
/* * 20111111-1-QQQQ.c */ #include <stdio.h> #include "s_print.h" #include "s_input.h" /* * データ型 : Vector2D の定義 */ typedef struct { int x; /* x 成分 */ int y; /* y 成分 */ } Vector2D; /* typedef struct { int length; // 長さ int angle; // 角度 } Vector2D; // 極座標表現 | v | / | / 長さ |/ 角度 ----+--------- */ /* * 入力 (Input) */ Vector2D input_Vector2D() { Vector2D result; s_print_string ( "x=" ); result.x = s_input_int(); /* ** この部分を完成させなさい */ return result; } /* * 出力 (Output) */ void output_Vector2D( Vector2D v ) { s_print_string ( "( " ); s_print_int ( v.x ); s_print_string ( ", " ); /* ** この部分を完成させなさい */ s_print_string ( " )" ); } /* * 定数倍 */ Vector2D scale_Vector2D( int c, Vector2D v ) { v.x *= c; /* v.x = v.x * c の事 */ /* ** この部分を完成させなさい */ return v; } /* * 和 */ Vector2D add_Vector2D( Vector2D v, Vector2D w ) { Vector2D result; result.x = v.x + w.x; /* ** この部分を完成させなさい */ return result; } /* * */ int main ( void ) { Vector2D v; Vector2D w; Vector2D r; int c; s_print_string ( "一つ目のベクトルをいれてください。\n" ); v = input_Vector2D(); output_Vector2D( v ); s_print_string ( "が入力されました。\n" ); s_print_string ( "拡大サイズをいれてください\n" ); c = s_input_int(); s_print_int ( c ); s_print_string ( " 倍します\n" ); r = scale_Vector2D ( c, v ); s_print_string ( "結果は \n" ); output_Vector2D( r ); s_print_string ( " です。\n" ); s_print_string ( "二つ目のベクトルをいれてください。\n" ); w = input_Vector2D(); output_Vector2D( v ); s_print_string ( " と " ); output_Vector2D( w ); s_print_string ( " の和は " ); output_Vector2D( add_Vector2D ( v, w ) ); s_print_string ( " となります\n" ); return 0; } /* * */
3 4 2 -2 9
C:\usr\c\> 01< 01.in 一つ目のベクトルをいれてください。 x=3 y=4 ( 3, 4 )が入力されました。 拡大サイズをいれてください 2 2 倍します 結果は ( 6, 8 ) です。 二つ目のベクトルをいれてください。 x=-2 y=9 ( 3, 4 ) と ( -2, 9 ) の和は ( 1, 13 ) となります C:\usr\c\>