当日のOHP資料です。
Download : sample-001.c ( SJIS 版 )
/* * 2012/06/29 sample-001.c */ #include <stdio.h> #include "s_print.h" /* 出力のために必要 */ /* * main */ int main(void) { s_print_double ( 2.3 ); /* 浮動小数点数の表示 */ s_print_newline(); /* 改行 */ return 0; } /* * */
C:\usr\c>sample-001 2.300000 C:\usr\c>
Download : sample-002.c ( SJIS 版 )
/* * 2012/06/29 sample-002.c */ #include <stdio.h> #include "s_print.h" /* * 浮動小数点数の引数宣言 */ double wa ( double a, double b ) { /* 浮動小数点数の引数の型は double */ s_print_double ( a ); s_print_string ( " と " ); s_print_double ( b ); s_print_string ( " の和は " ); s_print_double ( a + b ); /* 浮動小数点の和の計算 */ s_print_string ( " です。" ); s_print_newline(); /* 改行 */ return a + b; /* 計算結果を値として返す */ } /* * main */ int main(void) { wa ( 2.3, 4.5 ); /* 関数の値は無視してもよいし.. */ s_print_double ( 1.0 + wa ( -9.8, 2.1 ) * 10000.0 ); /* 式の中で利用する事もでみる */ s_print_string ( "は、返ってきた値を 10000 倍して 1 を加えた結果\n" ); return 0; } /* * */
C:\usr\c>sample-002 2.300000 と 4.500000 の和は 6.800000 です。 -9.800000 と 2.100000 の和は -7.700000 です。 -76999.000000は、返ってきた値を 10000 倍して 1 を加えた結果 C:\usr\c>
Download : sample-003.c ( SJIS 版 )
/* * 2012/06/29 sample-003.c */ #include <stdio.h> #include "s_print.h" #include "s_input.h" /* 入力のために必要 */ /* * 2 倍を表示 */ void doubleDouble ( double number ) { s_print_double ( number ); s_print_string ( "の 2 倍は " ); s_print_double ( 2.0 * number ); /* 数値を二倍して出力 */ s_print_string ( " です。" ); s_print_newline(); } /* * main */ int main(void) { s_print_string ( "実数値を入力してください : " ); doubleDouble ( s_input_double() ); /* キーボードから実数値を入力 */ return 0; } /* * */
123.456
C:\usr\c>sample-003< sample-003.in 実数値を入力してください : 123.456000 123.456000の 2 倍は 246.912000 です。 C:\usr\c>
Download : sample-004.c ( SJIS 版 )
/* * 2012/06/29 sample-004.c */ #include <stdio.h> #include <float.h> /* DBL_MIN, DBL_MAX */ #include "s_print.h" /* * main */ int main(void) { s_print_string ( "DBL_MIN=" ); s_print_doublee ( DBL_MIN ); s_print_string ( ", DBL_MAX=" ); s_print_doublee ( DBL_MAX ); s_print_newline(); return 0; } /* * */
C:\usr\c>sample-004 DBL_MIN=2.225074e-308, DBL_MAX=1.797693e+308 C:\usr\c>
Download : sample-005.c ( SJIS 版 )
/* * 2012/06/29 sample-005.c */ #include <stdio.h> #include "s_print.h" /* * error_check */ void error_check ( double a, double b ) { s_print_double ( a ); s_print_string ( " と " ); s_print_double ( b ); s_print_string ( " は、" ); if ( a == b ) { /* 二つの浮動小数点数を比較するのは危険 */ s_print_string ( "等しいです\n" ); } else { s_print_string ( "等しくないです\n" ); } } /* * main */ int main(void) { error_check ( 1.0, 1.0 ); error_check ( 1.0-0.7, 0.3 ); error_check ( 1.001,1.002 ); error_check ( 1.000000000001,1.000000000002 ); return 0; } /* * */
C:\usr\c>sample-005 1.000000 と 1.000000 は、等しいです 0.300000 と 0.300000 は、等しくないです 1.001000 と 1.002000 は、等しくないです 1.000000 と 1.000000 は、等しくないです C:\usr\c>
Download : sample-006.c ( SJIS 版 )
/* * 2012/06/29 sample-006.c */ #include <stdio.h> #include "s_print.h" /* * error_check_long */ void error_check_long ( double a, double b ) { s_print_doublel ( a ); /* 長い形式の出力 */ s_print_string ( " と " ); s_print_doublel ( b ); /* 長い形式の出力 */ s_print_string ( " は、" ); if ( a == b ) { /* 二つの浮動小数点数を比較するのは危険 */ s_print_string ( "等しいです\n" ); } else { s_print_string ( "等しくないです\n" ); } } /* * main */ int main(void) { error_check_long ( 1.0, 1.0 ); error_check_long ( 1.0-0.7, 0.3 ); error_check_long ( 1.001,1.002 ); error_check_long ( 1.000000000001,1.000000000002 ); return 0; } /* * */
C:\usr\c>sample-006 1.00000000000000000000 と 1.00000000000000000000 は、等しいです 0.30000000000000004441 と 0.29999999999999998890 は、等しくないです 1.00099999999999988987 と 1.00200000000000000178 は、等しくないです 1.00000000000100008890 と 1.00000000000199995576 は、等しくないです C:\usr\c>
Download : sample-007.c ( SJIS 版 )
/* * 2012/06/29 sample-007.c */ #include <stdio.h> #include <math.h> /* fabs に必要 */ #include "s_print.h" /* * error_check_with_epsilon */ #define EPSILON (0.00000001) /* 最小誤差を(自分で)决める */ void error_check_with_epsilon ( double a, double b ) { s_print_double ( a ); /* 長い形式の出力 */ s_print_string ( " と " ); s_print_double ( b ); /* 長い形式の出力 */ s_print_string ( " は、" ); if ( fabs ( a - b ) < EPSILON ) { /* 差の絶対値を最小誤差と比較 */ s_print_string ( "等しいです\n" ); } else { s_print_string ( "等しくないです\n" ); } } /* * main */ int main(void) { error_check_with_epsilon ( 1.0, 1.0 ); error_check_with_epsilon ( 1.0-0.7, 0.3 ); error_check_with_epsilon ( 1.001,1.002 ); error_check_with_epsilon ( 1.000000000001,1.000000000002 ); /* 1.000000000001 と 1.000000000002 の差は EPSILON より小さい */ return 0; } /* * */
C:\usr\c>sample-007 1.000000 と 1.000000 は、等しいです 0.300000 と 0.300000 は、等しいです 1.001000 と 1.002000 は、等しくないです 1.000000 と 1.000000 は、等しいです C:\usr\c>
Download : sample-008.c ( SJIS 版 )
/* * 2012/06/29 sample-008.c */ #include <stdio.h> #include "s_print.h" /* * fact */ double fact ( int n ) { if ( n > 0 ) { return fact ( n - 1 ) * n; } else { return 1.0; } } /* * sum_1_n ( n ) = 1/1! + 1/2! + .. + 1/n! */ double sum_1_n ( int n ) { if ( n >= 0 ) { return sum_1_n ( n - 1 ) + 1.0 / fact( n ); } else { return 0.0; } } /* * sum_n_1 ( n ) = 1/n! + 1/(n-1)! + .. + 1/1! */ double sum_n_1_sub ( int n, double sum ) { if ( n >= 0 ) { return sum_n_1_sub ( n - 1, sum + 1.0 / fact( n ) ); } else { return sum; } } double sum_n_1 ( int n ) { return sum_n_1_sub ( n, 0.0 ); } /* * main */ int main(void) { s_print_string ( "1 to 1000 = " ); s_print_doublel ( sum_1_n ( 1000 ) ); s_print_newline(); s_print_string ( "1000 to 1 = " ); s_print_doublel ( sum_n_1 ( 1000 ) ); s_print_newline(); return 0; } /* * */
C:\usr\c>sample-008 1 to 1000 = 2.71828182845904553488 1000 to 1 = 2.71828182845904509080 C:\usr\c>
Download : sample-009.c ( SJIS 版 )
/* * 2012/06/29 sample-009.c */ #include <stdio.h> #include <math.h> /* exp に必要 */ #include "s_print.h" /* * main */ int main(void) { s_print_string ( "exp(" ); s_print_double ( 1.0 ); s_print_string ( ")=" ); s_print_doublel ( exp(1.0) ); s_print_newline(); return 0; } /* * */
C:\usr\c>sample-009 exp(1.000000)= 2.71828182845904509080 C:\usr\c>
Download : sample-010.c ( SJIS 版 )
/* * 2012/06/29 sample-010.c */ #include <stdio.h> #include <math.h> /* sin, M_PI に必要 */ #include "s_print.h" /* * main */ int main(void) { s_print_string ( "sin(" ); s_print_double ( M_PI/4.0 ); /* M_PI は円周率 */ s_print_string ( ")=" ); s_print_double ( sin( M_PI/4.0 ) ); s_print_newline(); s_print_string ( "sin^2(" ); s_print_double ( M_PI/4.0 ); s_print_string ( ")=" ); s_print_double ( sin( M_PI/4.0 ) * sin( M_PI/4.0 ) ); s_print_newline(); return 0; } /* * */
C:\usr\c>sample-010 sin(0.785398)=0.707107 sin^2(0.785398)=0.500000 C:\usr\c>
Download : sample-011.c ( SJIS 版 )
/* * 2012/06/29 sample-011.c */ #include <stdio.h> #include <math.h> /* 数学関数を利用する場合はこれを追加する */ #include "s_print.h" /* * */ void plot_dot_sub ( double pos, double value ) { if ( pos >= value ) { /* 印刷位置まだきた */ s_print_char ( '*' ); /* 「点」を出力 */ s_print_newline (); /* この行は終り */ } else { s_print_char ( ' ' ); /* 空白を出力 */ plot_dot_sub ( pos + 1.0, value ); /* 続きを計算 */ } } /* * 0 〜 79 で、 -1.0 〜 1.0 を表現するには、 * x | -1.0 〜 1.0 | x * --+-------------+--------------- * y | 0 〜 79 | ( x + 1 ) * 40 */ #define WIDTH 80.0 /* 一行の中のカラム数を定義 */ void plot_dot ( double value ) { plot_dot_sub ( 0.0, ( value + 1.0 ) * WIDTH/2.0 ); } /* * */ void print_sin_curve( double top, double end, double step ) { if ( top >= end ) { /* 何もする必要はない */ } else { plot_dot ( sin ( top ) ); /* sin は正弦関数 */ print_sin_curve ( top + step, end, step ); /* 次のステップを実行 */ } } /* * */ int main ( void ) { print_sin_curve( 0, 2 * M_PI, 0.1 ); return 0; } /* * */
C:\usr\c>sample-011 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * C:\usr\c>
Download : sample-012.c ( SJIS 版 )
/* * 2012/06/29 sample-012.c */ #include <stdio.h> #include "s_print.h" #include "s_input.h" /* * 二分法による平方根の計算 * */ #define EPSILON (0.00000001) /* 最小誤差を(自分で)决める */ double mysqrt_sub ( double min, double max, double mid, double number ) { if ( max - min < EPSILON ) { /* * 十分に精度が得られたので、その結果を値とする */ return mid; } else if ( mid * mid - number < 0.0 ) { /* * 答は mid と max の間にある */ return mysqrt_sub ( mid, max, (mid+max)/2.0, number ); } else { /* * 答は min と mid の間にある */ return mysqrt_sub ( min, mid, (min+mid)/2.0, number ); } } double mysqrt ( double number ) { if ( number > 1.0 ) { /* * n > 1.0 なら * 0.0 < mysqrt(n) < n */ return mysqrt_sub ( 0.0, number, number/2.0, number ); } else { /* * n < 1.0 なら * 0.0 < mysqrt(n) < 1.0 */ return mysqrt_sub ( 0.0, 1.0, 0.5, number ); } } /* * */ void print_result ( double number ) { s_print_double ( number ); s_print_string ( " の平方根は " ); s_print_double ( mysqrt ( number ) ); s_print_string ( " です。\n" ); } /* * */ int main ( void ) { s_print_string ( "数値を入力してください : " ); print_result ( s_input_double() ); return 0; } /* * */
2.0
C:\usr\c>sample-012< sample-012.in 数値を入力してください : 2.000000 2.000000 の平方根は 1.414214 です。 C:\usr\c>
Download : sample-013.c ( SJIS 版 )
/* * 2012/06/29 sample-013.c */ #include <stdio.h> #include "s_print.h" /* * */ void has_arg ( int n ) { s_print_string ( "変数 n の値は " ); s_print_int ( n ); s_print_string ( " です\n" ); } /* * */ int main ( void ) { has_arg ( 10 ); has_arg ( 30 ); return 0; } /* * */
C:\usr\c>sample-013 変数 n の値は 10 です 変数 n の値は 30 です C:\usr\c>
Download : sample-014.c ( SJIS 版 )
/* * 2012/06/29 sample-014.c */ #include <stdio.h> #include "s_print.h" /* * */ int main ( void ) { s_print_string ( "変数 n の値は " ); s_print_int ( 10 ); s_print_string ( " です\n" ); s_print_string ( "変数 n の値は " ); s_print_int ( 30 ); s_print_string ( " です\n" ); return 0; } /* * */
C:\usr\c>sample-014 変数 n の値は 10 です 変数 n の値は 30 です C:\usr\c>
Download : sample-015.c ( SJIS 版 )
/* * 2012/06/29 sample-015.c */ #include <stdio.h> #include "s_print.h" /* * */ int main ( void ) { int n; /* 変数 n の宣言 */ n = 10; /* 代入文 */ s_print_string ( "変数 n の値は " ); s_print_int ( n ); s_print_string ( " です\n" ); n = 30; s_print_string ( "変数 n の値は " ); s_print_int ( n ); s_print_string ( " です\n" ); return 0; } /* * */
C:\usr\c>sample-015 変数 n の値は 10 です 変数 n の値は 30 です C:\usr\c>
Download : sample-016.c ( SJIS 版 )
/* * 2012/06/29 sample-016.c */ #include <stdio.h> #include "s_print.h" /* * */ int assign ( int n ) { /* n の値を参照 */ s_print_string ( "n = " ); s_print_int ( n ); s_print_newline(); n = 100; /* n に 100 を代入 */ s_print_string ( "n = " ); s_print_int ( n ); s_print_newline(); n = 1 + 2 + 3; /* n に 1 + 2 + 3 を代入 */ s_print_string ( "n = " ); s_print_int ( n ); s_print_newline(); } /* * */ int main ( void ) { /* * assign ( 5 ) */ s_print_string ( "assgin ( 5 )\n" ); assign ( 5 ); /* * */ s_print_newline(); /* * assign ( 5 ) */ s_print_string ( "assgin ( 10 )\n" ); assign ( 10 ); return 0; } /* * */
C:\usr\c>sample-016 assgin ( 5 ) n = 5 n = 100 n = 6 assgin ( 10 ) n = 10 n = 100 n = 6 C:\usr\c>
Download : sample-017.c ( SJIS 版 )
/* * 2012/06/29 sample-017.c */ #include <stdio.h> #include "s_print.h" /* * なにやら複雑な計算をしたとする.. ( 二乗の計算しかしていないが.. ) */ int any_complex_calculus ( int n ) { s_print_string ( "Function Called !!\n" ); return n * n; } /* * */ int assign_and_refer ( int n, int m ) { /* n の値を参照 */ s_print_string ( "n = " ); s_print_int ( n ); s_print_newline(); n = any_complex_calculus ( m ); s_print_string ( "any_complex_calculus ( " ); s_print_int ( m ); s_print_string ( " ) = " ); s_print_int ( n ); s_print_newline(); s_print_string ( "any_complex_calculus ( " ); s_print_int ( m ); s_print_string ( " ) = " ); s_print_int ( n ); s_print_newline(); } /* * */ int function_call_again ( int n, int m ) { /* n の値を参照 */ s_print_string ( "n = " ); s_print_int ( n ); s_print_newline(); s_print_string ( "any_complex_calculus ( " ); s_print_int ( m ); s_print_string ( " ) = " ); s_print_int ( any_complex_calculus ( m ) ); s_print_newline(); s_print_string ( "any_complex_calculus ( " ); s_print_int ( m ); s_print_string ( " ) = " ); s_print_int ( any_complex_calculus ( m ) ); s_print_newline(); } /* * */ int main ( void ) { /* * assign_and_refer ( 10, 5 ); */ s_print_string ( "assign_and_refer ( 10, 5 )\n" ); assign_and_refer ( 10, 5 ); /* * */ s_print_newline(); /* * function_call_again ( 10, 5 ); */ s_print_string ( "function_call_again ( 10, 5 )\n" ); function_call_again ( 10, 5 ); /* * */ return 0; } /* * */
C:\usr\c>sample-017 assign_and_refer ( 10, 5 ) n = 10 Function Called !! any_complex_calculus ( 5 ) = 25 any_complex_calculus ( 5 ) = 25 function_call_again ( 10, 5 ) n = 10 any_complex_calculus ( 5 ) = Function Called !! 25 any_complex_calculus ( 5 ) = Function Called !! 25 C:\usr\c>
Download : sample-018.c ( SJIS 版 )
/* * 2012/06/29 sample-018.c */ #include <stdio.h> #include "s_print.h" /* * */ void modify_with_self ( int n ) { /* n の値を参照 */ s_print_string ( "n = " ); s_print_int ( n ); s_print_newline(); n = n * 2; /* 自分の値を利用して次の自分の値を求める事ができる */ s_print_string ( "n = " ); s_print_int ( n ); s_print_newline(); n = n - 10; /* 自分の値を利用して次の自分の値を求める事ができる */ s_print_string ( "n = " ); s_print_int ( n ); s_print_newline(); } /* * */ int main ( void ) { /* * modify_with_self ( 5 ) */ s_print_string ( "modify_with_self ( 5 )\n" ); modify_with_self ( 5 ); /* * */ s_print_newline(); /* * modify_with_self ( -8 ) */ s_print_string ( "modify_with_self ( -8 )\n" ); modify_with_self ( -8 ); /* * */ return 0; } /* * */
C:\usr\c>sample-018 modify_with_self ( 5 ) n = 5 n = 10 n = 0 modify_with_self ( -8 ) n = -8 n = -16 n = -26 C:\usr\c>
Download : sample-019.c ( SJIS 版 )
/* * 2012/06/29 sample-019.c */ #include <stdio.h> #include "s_print.h" /* * */ int assign_variable ( int n ) { /* n の値を参照 */ s_print_string ( "n = " ); s_print_int ( n ); s_print_newline(); n = n - 1; /* 代入 */ s_print_string ( "n = " ); s_print_int ( n ); s_print_newline(); n = n - 1; /* 代入 */ s_print_string ( "n = " ); s_print_int ( n ); s_print_newline(); n = n - 1; /* 代入 */ s_print_string ( "n = " ); s_print_int ( n ); s_print_newline(); n = n - 1; /* 代入 */ s_print_string ( "n = " ); s_print_int ( n ); s_print_newline(); n = n - 1; /* 代入 */ s_print_string ( "n = " ); s_print_int ( n ); s_print_newline(); } /* * */ void function_argument ( int n ) { /* n の値を参照 */ s_print_string ( "n = " ); s_print_int ( n ); s_print_newline(); if ( n > 0 ) { function_argument ( n - 1 ); } } /* * */ int main ( void ) { /* * assign_variable */ s_print_string ( "assign_variable ( 5 )\n" ); assign_variable ( 5 ); /* * */ s_print_newline(); /* * function_argument ( 5 ); */ s_print_string ( "function_argument ( 5 )\n" ); function_argument ( 5 ); /* * */ return 0; } /* * */
C:\usr\c>sample-019 assign_variable ( 5 ) n = 5 n = 4 n = 3 n = 2 n = 1 n = 0 function_argument ( 5 ) n = 5 n = 4 n = 3 n = 2 n = 1 n = 0 C:\usr\c>
Download : sample-020.c ( SJIS 版 )
/* * 2012/06/29 sample-020.c */ #include <stdio.h> #include "s_print.h" /* * swap * * 値の交換 : 失敗 */ int swap ( int n, int m ) { s_print_string ( "n = " ); s_print_int ( n ); s_print_string ( ", m = " ); s_print_int ( m ); s_print_newline(); s_print_string ( "swap\n" ); n = m; /* この時点で n の値は失われる.. */ m = n; /* 思った通りにはならない .. */ s_print_string ( "n = " ); s_print_int ( n ); s_print_string ( ", m = " ); s_print_int ( m ); s_print_newline(); } /* * */ int main ( void ) { /* * swap ( 10, 15 ) */ swap ( 10, 15 ); return 0; } /* * */
C:\usr\c>sample-020 n = 10, m = 15 swap n = 15, m = 15 C:\usr\c>
Download : sample-021.c ( SJIS 版 )
/* * 2012/06/29 sample-021.c */ #include <stdio.h> #include "s_print.h" /* * swap * * 値の交換 : 成功 */ int swap ( int n, int m, int w ) { s_print_string ( "n = " ); s_print_int ( n ); s_print_string ( ", m = " ); s_print_int ( m ); s_print_string ( ", w = " ); s_print_int ( w ); s_print_newline(); s_print_string ( "swap\n" ); w = n; /* この時点で w の値は失われるし.. */ n = m; /* n の値も消えてしまうが.. */ m = w; /* w にのこっているので、m,n の交換は可能.. */ s_print_string ( "n = " ); s_print_int ( n ); s_print_string ( ", m = " ); s_print_int ( m ); s_print_string ( ", w = " ); s_print_int ( w ); s_print_newline(); } /* * */ int main ( void ) { /* * swap ( 10, 15, 0 ) */ swap ( 10, 15, 0 ); return 0; } /* * */
C:\usr\c>sample-021 n = 10, m = 15, w = 0 swap n = 15, m = 10, w = 10 C:\usr\c>
Download : sample-022.c ( SJIS 版 )
/* * 2012/06/29 sample-022.c */ #include <stdio.h> #include "s_print.h" /* * */ void function_argument ( int n ) { /* n の値を参照 */ s_print_string ( "(pre) n = " ); s_print_int ( n ); s_print_newline(); if ( n > 0 ) { function_argument ( n - 1 ); } s_print_string ( "(pos) n = " ); s_print_int ( n ); s_print_newline(); } /* * */ int main ( void ) { /* * function_argument ( 5 ); */ s_print_string ( "function_argument ( 5 )\n" ); function_argument ( 5 ); /* * */ return 0; } /* * */
C:\usr\c>sample-022 function_argument ( 5 ) (pre) n = 5 (pre) n = 4 (pre) n = 3 (pre) n = 2 (pre) n = 1 (pre) n = 0 (pos) n = 0 (pos) n = 1 (pos) n = 2 (pos) n = 3 (pos) n = 4 (pos) n = 5 C:\usr\c>
Download : sample-023.c ( SJIS 版 )
/* * 2012/06/29 sample-023.c */ #include <stdio.h> #include "s_print.h" /* * */ int assign_variable ( int n ) { /* n の値を参照 */ s_print_string ( "n = " ); s_print_int ( n ); s_print_string ( ", &n = " ); s_print_hex ( &n ); s_print_newline(); n = n - 1; /* 代入 */ s_print_string ( "n = " ); s_print_int ( n ); s_print_string ( ", &n = " ); s_print_hex ( &n ); s_print_newline(); n = n - 1; /* 代入 */ s_print_string ( "n = " ); s_print_int ( n ); s_print_string ( ", &n = " ); s_print_hex ( &n ); s_print_newline(); n = n - 1; /* 代入 */ s_print_string ( "n = " ); s_print_int ( n ); s_print_string ( ", &n = " ); s_print_hex ( &n ); s_print_newline(); n = n - 1; /* 代入 */ s_print_string ( "n = " ); s_print_int ( n ); s_print_string ( ", &n = " ); s_print_hex ( &n ); s_print_newline(); n = n - 1; /* 代入 */ s_print_string ( "n = " ); s_print_int ( n ); s_print_string ( ", &n = " ); s_print_hex ( &n ); s_print_newline(); } /* * */ void function_argument ( int n ) { /* n の値を参照 */ s_print_string ( "n = " ); s_print_int ( n ); s_print_string ( ", &n = " ); s_print_hex ( &n ); s_print_newline(); if ( n > 0 ) { function_argument ( n - 1 ); } } /* * */ int main ( void ) { /* * assign_variable */ s_print_string ( "assign_variable ( 5 )\n" ); assign_variable ( 5 ); /* * */ s_print_newline(); /* * function_argument ( 5 ); */ s_print_string ( "function_argument ( 5 )\n" ); function_argument ( 5 ); /* * */ return 0; } /* * */
C:\usr\c>sample-023 assign_variable ( 5 ) n = 5, &n = bf97b160 n = 4, &n = bf97b160 n = 3, &n = bf97b160 n = 2, &n = bf97b160 n = 1, &n = bf97b160 n = 0, &n = bf97b160 function_argument ( 5 ) n = 5, &n = bf97b160 n = 4, &n = bf97b140 n = 3, &n = bf97b120 n = 2, &n = bf97b100 n = 1, &n = bf97b0e0 n = 0, &n = bf97b0c0 C:\usr\c>
Download : sample-024.c ( SJIS 版 )
/* * 2012/06/29 sample-024.c */ #include <stdio.h> #include "s_print.h" /* * */ void function_argument ( int n ) { /* n の値を参照 */ s_print_string ( "(pre) n = " ); s_print_int ( n ); s_print_string ( ", &n = " ); s_print_hex ( &n ); s_print_newline(); if ( n > 0 ) { function_argument ( n - 1 ); } s_print_string ( "(post) n = " ); s_print_int ( n ); s_print_string ( ", &n = " ); s_print_hex ( &n ); s_print_newline(); } /* * */ int main ( void ) { /* * function_argument ( 5 ); */ s_print_string ( "function_argument ( 5 )\n" ); function_argument ( 5 ); /* * */ return 0; } /* * */
C:\usr\c>sample-024 function_argument ( 5 ) (pre) n = 5, &n = bfd11a90 (pre) n = 4, &n = bfd11a70 (pre) n = 3, &n = bfd11a50 (pre) n = 2, &n = bfd11a30 (pre) n = 1, &n = bfd11a10 (pre) n = 0, &n = bfd119f0 (post) n = 0, &n = bfd119f0 (post) n = 1, &n = bfd11a10 (post) n = 2, &n = bfd11a30 (post) n = 3, &n = bfd11a50 (post) n = 4, &n = bfd11a70 (post) n = 5, &n = bfd11a90 C:\usr\c>
Download : sample-025.c ( SJIS 版 )
/* * 2012/06/29 sample-025.c */ #include <stdio.h> #include "s_print.h" /* * swap_sub * * 引数上で値の交換 */ void swap_sub ( int n, int m ) { s_print_string ( "swap_sub " ); s_print_string ( "n = " ); s_print_int ( n ); s_print_string ( ", m = " ); s_print_int ( m ); s_print_newline(); } /* * swap * * 値の交換 */ int swap ( int n, int m ) { s_print_string ( "swap " ); s_print_string ( "n = " ); s_print_int ( n ); s_print_string ( ", m = " ); s_print_int ( m ); s_print_newline(); swap_sub ( m, n ); /* 引数の上では交換可能 */ } /* * */ int main ( void ) { /* * swap ( 10, 15 ) */ swap ( 10, 15 ); return 0; } /* * */
C:\usr\c>sample-025 swap n = 10, m = 15 swap_sub n = 15, m = 10 C:\usr\c>
Download : sample-026.c ( SJIS 版 )
/* * 2012/06/29 sample-026.c */ #include <stdio.h> #include "s_print.h" /* * swap * * 値の交換 : 局所変数の利用 */ int swap ( int n, int m ) { int w; /* 局所変数 w の宣言 (w には何がはいっているか解らない..) */ s_print_string ( "n = " ); s_print_int ( n ); s_print_string ( ", m = " ); s_print_int ( m ); s_print_newline(); s_print_string ( "swap\n" ); w = n; /* この時点で w の値が初めて意味を持つ */ n = m; /* n の値も消えてしまうが.. w にコピーがある */ m = w; /* w にのこっているので、m,n の交換は可能.. */ s_print_string ( "n = " ); s_print_int ( n ); s_print_string ( ", m = " ); s_print_int ( m ); s_print_newline(); } /* * */ int main ( void ) { /* * swap ( 10, 15 ) */ swap ( 10, 15 ); return 0; } /* * */
C:\usr\c>sample-026 n = 10, m = 15 swap n = 15, m = 10 C:\usr\c>
Download : sample-027.c ( SJIS 版 )
/* * 2012/06/29 sample-027.c */ #include <stdio.h> #include "s_print.h" /* * */ int main ( void ) { int w; /* 変数を宣言するだけでは値が定まならない */ s_print_string ( "w = " ); s_print_int ( w ); /* どんな値になるかは神のみ知るぞ.. */ s_print_newline(); return 0; } /* * */
C:\usr\c>sample-027 w = 1075765236 C:\usr\c>
Download : sample-028.c ( SJIS 版 )
/* * 2012/06/29 sample-028.c */ #include <stdio.h> #include "s_print.h" /* * */ int main ( void ) { int w = 15; /* 初期代入をする */ s_print_string ( "w = " ); s_print_int ( w ); /* 15 である事が保証される */ s_print_newline(); return 0; } /* * */
C:\usr\c>sample-028 w = 15 C:\usr\c>
Download : sample-029.c ( SJIS 版 )
/* * 2012/06/29 sample-029.c */ #include <stdio.h> #include "s_print.h" #include "s_input.h" /* * */ int main ( int argc, char *argv[] ) { int m; /* 変数 m の宣言 */ int n; /* 変数 n の宣言 */ int wa; /* 変数 wa の宣言 */ /* * m,n の値の入力 */ s_print_string ( "imput m = " ); m = s_input_int(); s_print_string ( "imput n = " ); n = s_input_int(); /* * wa の計算 */ wa = m + n; /* * wa の結果出力 */ s_print_int ( m ); s_print_string ( " と " ); s_print_int ( n ); s_print_string ( " の和は " ); s_print_int ( wa ); s_print_string ( " です。\n" ); return 0; } /* * */
12 5
C:\usr\c>sample-029< sample-029.in imput m = 12 imput n = 5 12 と 5 の和は 17 です。 C:\usr\c>
Download : sample-030.c ( SJIS 版 )
/* * 2012/06/29 sample-030.c */ #include <stdio.h> #include "s_print.h" #include "s_input.h" /* * */ int prompt ( char *var_name ) { s_print_string ( "imput " ); s_print_string ( var_name ); s_print_string ( " = " ); return s_input_int(); } /* * */ void print_result ( int m, int n, char *calc, int result ) { s_print_int ( m ); s_print_string ( " と " ); s_print_int ( n ); s_print_string ( " の" ); s_print_string ( calc ); s_print_string ( "は " ); s_print_int ( result ); s_print_string ( " です。\n" ); } /* * */ void four_calc_sub ( int m, int n ) { print_result ( m, n, "和", m + n ); print_result ( m, n, "差", m - n ); print_result ( m, n, "積", m * n ); print_result ( m, n, "商", m / n ); print_result ( m, n, "余り", m % n ); } /* * */ void four_calc ( int m ) { four_calc_sub ( m, prompt ( "n" ) ); } /* * */ int main ( int argc, char *argv[] ) { four_calc ( prompt ( "m" ) ); return 0; } /* * */
12 5
C:\usr\c>sample-030< sample-030.in imput m = 12 imput n = 5 12 と 5 の和は 17 です。 12 と 5 の差は 7 です。 12 と 5 の積は 60 です。 12 と 5 の商は 2 です。 12 と 5 の余りは 2 です。 C:\usr\c>
Download : sample-031.c ( SJIS 版 )
/* * 2012/06/29 sample-031.c */ #include <stdio.h> #include "s_print.h" /* * swap * * 値の交換 : 他の変数を利用しなくても済む方法 */ int swap ( int n, int m ) { s_print_string ( "n = " ); s_print_int ( n ); s_print_string ( ", m = " ); s_print_int ( m ); s_print_newline(); s_print_string ( "swap\n" ); n = n + m; m = n - m; n = n - m; s_print_string ( "n = " ); s_print_int ( n ); s_print_string ( ", m = " ); s_print_int ( m ); s_print_newline(); } /* * */ int main ( void ) { /* * swap ( 10, 15 ) */ swap ( 10, 15 ); return 0; } /* * */
C:\usr\c>sample-031 n = 10, m = 15 swap n = 15, m = 10 C:\usr\c>
Download : 20120629-01.c ( SJIS 版 )
/* * 20120629-01-QQQQ.c * * 二つの実数を入力して、その四則を計算する */ #include <stdio.h> #include "s_print.h" #include "s_input.h" /* * print_result */ void print_result ( double a, double b, double r, char *message ) { s_print_double ( a ); /* ** この部分を完成させなさい */ s_print_string ( message ); s_print_string ( "は " ); s_print_double ( r ); s_print_string ( " です。" ); s_print_newline(); } /* * wa */ void wa ( double a, double b ) { print_result ( a, b, a + b, "和" ); } /* * sa */ void sa ( double a, double b ) { /* ** この部分を完成させなさい */ } /* ** この部分を完成させなさい */ /* * shisoku */ void shisoku ( double one, double two ) { /* ** この部分を完成させなさい */ sa ( one, two ); /* 差 */ seki ( one, two ); /* 積 */ sho ( one, two ); /* 商 */ } /* * input2 */ void input2 ( double one ) { /* 変数 one には一つ目の数値 */ s_print_string ( "二つ目の実数を入力してください : " ); shisoku ( one, s_input_double() ); /* 二つ目の数値を入力して shisoku を呼ぶ */ } /* * main */ int main() { s_print_string ( "一つ目の実数を入力してください : " ); input2 ( s_input_double() ); /* 一つ目の数値を入力して input2 を呼ぶ */ return 0; } /* * */
123.456 922.031
C:\usr\c\20120629>20120629-01 一つ目の実数を入力してください : 123.456000 二つ目の実数を入力してください : 922.031000 123.456000 と 922.031000 の和は 1045.487000 です。 123.456000 と 922.031000 の差は -798.575000 です。 123.456000 と 922.031000 の積は 113830.259136 です。 123.456000 と 922.031000 の商は 0.133896 です。 C:\usr\c\20120629>
Download : 20120629-02.c ( SJIS 版 )
/* * 20120629-01-QQQQ.c * * 方程式 cos(x) = x の根を二分法を用いて求める */ #include <stdio.h> #include <math.h> #include "s_print.h" #include "s_input.h" /* * 二分法による、方程式「cos(x) = x」の根の計算 */ #define EPSILON (0.00000001) /* 最小誤差を(自分で)决める */ double cosx_x_sub ( double min, double max, double mid ) { if ( max - min < EPSILON ) { /* * 十分に精度が得られたので、その結果を値とする */ /* ** この部分を完成させなさい */ } else if ( cos(mid) - mid > 0.0 ) { /* * 答は mid と max の間にある */ /* ** この部分を完成させなさい */ } else { /* * 答は min と mid の間にある */ return cosx_x_sub ( min, mid, (min+mid)/2.0 ); } } double cosx_x ( void ) { /* * COS(x) = x の解は 0 と π/2 の間にある */ return cosx_x_sub ( 0, M_PI/2.0, M_PI/4.0 ); } /* * */ int main ( void ) { s_print_string ( "COS(x) = x の方程式の解は " ); s_print_double ( cosx_x() ); s_print_string ( "です\n" ); s_print_string ( "確かに " ); s_print_double ( cosx_x() ); s_print_string ( " = " ); s_print_double ( cos(cosx_x()) ); s_print_string ( " です\n" ); return 0; } /* * */
123.456 922.031
C:\usr\c\20120629>20120629-02 COS(x) = x の方程式の解は 0.739085です 確かに 0.739085 = 0.739085 です C:\usr\c\20120629>