当日のOHP資料です。
Download : sample-001.c ( SJIS 版 )
/* * 2012/06/15 sample-001.c */ #include <stdio.h> #include "s_print.h" #include "s_input.h" /* 入力のために必要 */ /* * main */ int main(void) { s_print_string ( "整数をキーボードから入力して、改行キーを押してください : " ); s_print_int ( s_input_int() ); /* */ s_print_newline(); s_print_string ( "文字をキーボードから入力して、改行キーを押してください : " ); s_print_char ( s_input_char() ); /* */ s_print_newline(); return 0; } /* * */
123 c
C:\usr\c>sample-001< sample-001.in 整数をキーボードから入力して、改行キーを押してください : 123 123 文字をキーボードから入力して、改行キーを押してください : c c C:\usr\c>
Download : sample-002.c ( SJIS 版 )
/* * 2012/06/15 sample-002.c */ #include <stdio.h> #include "s_print.h" #include "s_input.h" /* 入力のために必要 */ /* * input_add */ int input_add ( int n ) { s_print_string ( "整数をキーボードから加える数を入力して、改行キーを押してください : " ); return n + s_input_int(); } /* * main */ int main(void) { s_print_string ( "一つ目の整数をキーボードから入力して、改行キーを押してください : " ); s_print_int ( input_add ( s_input_int() ) ); s_print_newline(); return 0; } /* * */
123 392
C:\usr\c>sample-002< sample-002.in 一つ目の整数をキーボードから入力して、改行キーを押してください : 123 整数をキーボードから加える数を入力して、改行キーを押してください : 392 515 C:\usr\c>
Download : sample-003.c ( SJIS 版 )
/* * 2012/06/15 sample-003.c */ #include <stdio.h> #include <stdlib.h> /* rand を使うために必要 */ #include "s_print.h" /* * main */ int main(void) { s_print_int ( rand() ); /* rand には引数が要らない */ s_print_newline(); s_print_int ( rand() ); /* 呼出す毎に異なる値になる */ s_print_newline(); s_print_int ( rand() ); s_print_newline(); s_print_int ( rand() ); s_print_newline(); return 0; } /* * */
C:\usr\c>sample-003 1804289383 846930886 1681692777 1714636915 C:\usr\c>
Download : sample-004.c ( SJIS 版 )
/* * 2012/06/15 sample-004.c */ #include <stdio.h> #include <stdlib.h> /* rand を使うために必要 */ #include "s_print.h" /* * saikoro */ int saikoro(void) { return rand() % 6 + 1; /* 6 で割った余りは 0 〜 5, これに 1 を加えれば 1 〜 6 になる */ } /* * main */ int main(void) { s_print_int ( saikoro() ); /* saikoro には引数が要らない */ s_print_newline(); s_print_int ( saikoro() ); /* 呼出す毎に異なる値になる */ s_print_newline(); s_print_int ( saikoro() ); s_print_newline(); s_print_int ( saikoro() ); s_print_newline(); return 0; } /* * */
C:\usr\c>sample-004 2 5 4 2 C:\usr\c>
Download : sample-005.c ( SJIS 版 )
/* * 2012/06/15 sample-005.c */ #include <stdio.h> #include "s_print.h" #include "s_input.h" /* 入力のために必要 */ /* * min_max_game_check */ extern void min_max_game ( int question, int count ); /* * min_max_game_check */ void min_max_game_check ( int question, int count, int answer ) { if ( question == answer ) { s_print_string ( "正解です。" ); s_print_newline(); s_print_int ( count ); s_print_string ( "回で発見できました。" ); } else if ( question < answer ) { s_print_string ( "大きすぎます" ); s_print_newline(); min_max_game ( question, count + 1 ); } else { s_print_string ( "小さすぎます" ); s_print_newline(); min_max_game ( question, count + 1 ); } } /* * min_max_game */ void min_max_game ( int question, int count ) { s_print_int ( count ); s_print_string ( "回目の予想です。" ); s_print_newline(); s_print_string ( "予想する数を入力してください :" ); min_max_game_check ( question, count, s_input_int() ); } /* * main */ int main( void ) { s_print_string ( "1 〜 1000 の数を予想してください\n" ); min_max_game ( rand() % 1000 + 1, 1 ); return 0; } /* * */
100 500 400 300 350 370 380 385 384
C:\usr\c>sample-005< sample-005.in 1 〜 1000 の数を予想してください 1回目の予想です。 予想する数を入力してください :100 小さすぎます 2回目の予想です。 予想する数を入力してください :500 大きすぎます 3回目の予想です。 予想する数を入力してください :400 大きすぎます 4回目の予想です。 予想する数を入力してください :300 小さすぎます 5回目の予想です。 予想する数を入力してください :350 小さすぎます 6回目の予想です。 予想する数を入力してください :370 小さすぎます 7回目の予想です。 予想する数を入力してください :380 小さすぎます 8回目の予想です。 予想する数を入力してください :385 大きすぎます 9回目の予想です。 予想する数を入力してください :384 正解です。 9回で発見できました。C:\usr\c>
-->
Download : 20120622-01.c ( SJIS 版 )
/* * DATE-DIR-QQQQ.c * * 余りを計算するプログラム */ #include <stdio.h> #include "s_print.h" /* * 余りの定義 * n, m が自然数の時に n mod m ( n を m で割った余り ) とは何か ( m > 0 ) * * n ( m > n の時 ) * n mod m { * (n-m) mod m ( その他の時 ) */ void my_remainder_sub ( int n, int m, int mm, int nn ) { /* ^ ^ 変化*/ /* ^^ 最初の m を記憶して、後から利用できるようにしている */ /* ^^ 割り始め n を覚えておく */ if ( m == 0 ) { /* m が 0 : 引き算が終った */ /* ** この部分を完成させなさい */ } else if ( n == 0 ) { /* n が 0 : m の方が大きかった */ s_print_int ( nn ); /* 余りを出力 */ } else { /* ** この部分を完成させなさい */ } } /* * my_remainder : print ( n mod m ) */ void my_remainder ( int n, int m ) { /* ** この部分を完成させなさい */ } /* * main */ int main() { printf ( "10 mod 4 = " ); my_remainder ( 10, 4 ); printf ( "\n" ); printf ( "10 mod 3 = " ); my_remainder ( 10, 3 ); printf ( "\n" ); printf ( "10 mod 2 = " ); my_remainder ( 10, 2 ); printf ( "\n" ); return 0; }
C:\usr\c\> 20120622-01 10 mod 4 = 2 10 mod 3 = 1 10 mod 2 = 0 C:\usr\c\>
Download : 20120622-02.c ( SJIS 版 )
/* * DATE-DIR-QQQQ.c * * 文字列の長さを計算する my_string_length */ #include <stdio.h> #include "s_print.h" /* * */ #define EOS '\0' /* End Of String */ int my_string_length ( char *str ) { if ( *str == EOS ) { /* "" は 長さ 0 */ /* ** この部分を完成させなさい */ } else { /* 残りの長さ + 1 */ /* ** この部分を完成させなさい */ } } /* * */ int main ( void ) { s_print_int ( my_string_length ( "abc" ) ); /* 3 と表示されるはず */ s_print_newline(); return 0; } /* * */
C:\usr\c\> 20120622-02 3 C:\usr\c\>
Download : 20120622-03.c ( SJIS 版 )
/* * DATE-DIR-QQQQ.c * * cos のグラフ */ #include <stdio.h> #include <math.h> /* 数学関数を利用する場合はこれを追加する */ #include "s_print.h" #include "s_input.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_cos_curve( double top, double end, double step ) { if ( top >= end ) { /* 何もする必要はない */ } else { /* ** この部分を完成させなさい */ } } /* * */ #define PI 3.141592 int main ( void ) { print_cos_curve( 0, 2 * PI, 0.1 ); /* PI は 円周率 */ return 0; } /* * */
C:\usr\c\> 20120622-03 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * C:\usr\c\>
Download : 20120622-04.c ( SJIS 版 )
/* * DATE-DIR-QQQQ.c * * 正の整数値をキーボードから入力し、素数かどうかを判定した結果を表示する * 0 以下の値が入った場合は、終了する */ #include <stdio.h> #include "s_print.h" #include "s_input.h" /* * */ int min_factor ( int number, int factor ) { if ( number % factor == 0 ) { /* number は factor で割り切れる */ return factor; /* それを返す */ } else { /* factor を一つ大きくして、試す */ /* ** この部分を完成させなさい */ } } void prime_check ( int number, int factor ) { if ( factor == number ) { /* 最大の約数が自分と同じ */ s_print_int ( number ); /* ** この部分を完成させなさい */ } else { s_print_int ( number ); s_print_string ( " は、 " ); s_print_int ( factor ); /* ** この部分を完成させなさい */ } } void prime_check_loop ( int number ) { if ( number <= 0 ) { /* 0 より小かった */ s_print_string ( "0 以下の数 " ); s_print_int ( number ); s_print_string ( " が入力されたので終了します。\n" ); } else { if ( number == 1 ) { /* ** この部分を完成させなさい */ } else { prime_check ( number, min_factor ( number, 2 ) ); } /* 再帰 */ s_print_string ( "整数値を入力してください(0 以下で終了) : " ); prime_check_loop ( s_input_int() ); } } /* * */ int main ( void ) { s_print_string ( "整数値を入力してください(0 以下で終了) : " ); prime_check_loop ( s_input_int() ); return 0; } /* * */
4 1 7 -1
C:\usr\c\> 20120622-04 整数値を入力してください(0 以下で終了) : 4 は、 2 で割り切れるので、合成数でした。 整数値を入力してください(0 以下で終了) : 1 は、素数でありません。 整数値を入力してください(0 以下で終了) : 7 は、素数でした。 整数値を入力してください(0 以下で終了) : 0 以下の数 -1 が入力されたので終了します。 C:\usr\c\>