Download : sample-001.c ( SJIS 版 )
/* * DATE sample-001.c */ #include <stdio.h> #include "s_turtle.h" /* 亀プログラムの場合に必要 */ /* * 亀プログラム */ /* * void move_ten(void) * * 現在向いている方向に 10 歩、足跡を残しながら進む */ void move_ten(void) { /* 「一歩進む」事を、10 回行う.. */ s_turtle_move(); s_turtle_move(); s_turtle_move(); s_turtle_move(); s_turtle_move(); s_turtle_move(); s_turtle_move(); s_turtle_move(); s_turtle_move(); s_turtle_move(); } /* * main */ int main ( void ) { /* * 最初は真中 (0,0) で上を向いている */ /* * 二十歩前に足跡を残しながら進む * 矩形の左辺を下から上に引く (0,0) -> (0,20) */ move_ten(); move_ten(); /* * 時計回りに 45 度を二回、すなわち 90 度向きを変える * 矩形の左上隅で右に向きを変える */ s_turtle_turn(); s_turtle_turn(); /* * 矩形の上辺を左から右に引く (0,20) -> (20,20) */ move_ten(); move_ten(); /* * 矩形の右上隅で下に向きを変える */ s_turtle_turn(); s_turtle_turn(); /* * 矩形の右辺を上から下に引く (20,20) -> (0,20) */ move_ten(); move_ten(); /* * 矩形の右下隅で左に向きを変える */ s_turtle_turn(); s_turtle_turn(); /* * 矩形の下辺を右から左に引く (0,20) -> (0,0) */ move_ten(); move_ten(); /* * 元の左下隅 (0,0) に戻った */ return 0; }
C:\usr\c>sample-001 C:\usr\c>
Download : sample-002.c ( SJIS 版 )
/* * DATE sample-002.c */ #include <stdio.h> #include "s_turtle.h" /* 亀プログラムの場合に必要 */ /* * 亀プログラム */ /* * void jump_ten(void) * * 現在向いている方向に 10 歩、足跡を残こさずに跳ねる */ void jump_ten(void) { /* 「一歩跳ねる」事を、10 回行う.. */ s_turtle_jump(); s_turtle_jump(); s_turtle_jump(); s_turtle_jump(); s_turtle_jump(); s_turtle_jump(); s_turtle_jump(); s_turtle_jump(); s_turtle_jump(); s_turtle_jump(); } /* * void move_ten(void) * * 現在向いている方向に 10 歩、足跡を残しながら進む */ void move_ten(void) { /* 「一歩進む」事を、10 回行う.. */ s_turtle_move(); s_turtle_move(); s_turtle_move(); s_turtle_move(); s_turtle_move(); s_turtle_move(); s_turtle_move(); s_turtle_move(); s_turtle_move(); s_turtle_move(); } /* * void turn_90(void) * * 現在向いている方向から時計回りに 90 度向きを * 進行方向の「右」に向きを変える */ void turn_90(void) { /* 「45 度向きを変える」事を、2 回行う.. */ s_turtle_turn(); s_turtle_turn(); } /* * void turn_270(void) * * 現在向いている方向から時計回りに 270 度向きを * 進行方向の「左」に向きを変える */ void turn_270(void) { /* 「90 度向きを変える」事を、3 回行う.. */ turn_90(); turn_90(); turn_90(); } /* * void move_and_turn(void) * * 現在向いている方向から 20 歩進んで右を向く * 四角形の一辺を書く */ void move_and_turn(void) { /* 20 歩進む */ move_ten(); move_ten(); /* 向きを変える */ turn_90(); } /* * void draw_sqare( void ); * * 一辺が 20 の長さの四角形を書く */ void draw_sqare( void ) { /* 「長さ 20 の辺を書いて右を向く」という事を 4 回繰り返す */ move_and_turn(); move_and_turn(); move_and_turn(); move_and_turn(); } /* * int main ( void ) */ int main ( void ) { /* * 最初は真中 (0,0) で上を向いている */ draw_sqare(); /* まず四角を書く */ turn_270(); /* 270 度回転 */ jump_ten(); /* 10 歩跳ねる */ draw_sqare(); /* また四角 */ turn_270(); jump_ten(); draw_sqare(); turn_270(); jump_ten(); draw_sqare(); return 0; }
C:\usr\c>sample-002 C:\usr\c>
Download : sample-003.c ( SJIS 版 )
/* * DATE sample-003.c */ #include <stdio.h> /* * 「金糸雀(かなりや)」 * (c) 西條八十作詞・成田為三作曲 * http://www.mahoroba.ne.jp/~gonbe007/hog/shouka/kanariya.html */ /* * 関数を使わずに愚直に命令を並べた * プログラミングの基本はこれ (実行したい内容をその順に並べる) */ /* * int main ( void ) */ int main ( void ) { printf ( "唄を忘れた 金糸雀(かなりや)は\n" ); printf ( "後の山に 棄てましょか\n" ); printf ( "いえ いえ それはなりませぬ\n" ); printf ( "\n" ); printf ( "唄を忘れた 金糸雀(かなりや)は\n" ); printf ( "背戸の小薮に 埋けましょか\n" ); printf ( "いえ いえ それはなりませぬ\n" ); printf ( "\n" ); printf ( "唄を忘れた 金糸雀(かなりや)は\n" ); printf ( "柳の鞭で ぶちましょか\n" ); printf ( "いえ いえ それはかわいそう\n" ); printf ( "\n" ); printf ( "唄を忘れた 金糸雀(かなりや)は\n" ); printf ( "象牙の船に 銀の櫂\n" ); printf ( "月夜の海に 浮べれば\n" ); printf ( "忘れた唄を おもいだす\n" ); return 0; }
C:\usr\c>sample-003 唄を忘れた 金糸雀(かなりや)は 後の山に 棄てましょか いえ いえ それはなりませぬ 唄を忘れた 金糸雀(かなりや)は 背戸の小薮に 埋けましょか いえ いえ それはなりませぬ 唄を忘れた 金糸雀(かなりや)は 柳の鞭で ぶちましょか いえ いえ それはかわいそう 唄を忘れた 金糸雀(かなりや)は 象牙の船に 銀の櫂 月夜の海に 浮べれば 忘れた唄を おもいだす C:\usr\c>
Download : sample-004.c ( SJIS 版 )
/* * DATE sample-004.c */ #include <stdio.h> /* * 「金糸雀(かなりや)」 * (c) 西條八十作詞・成田為三作曲 * http://www.mahoroba.ne.jp/~gonbe007/hog/shouka/kanariya.html */ /* * 共通する部分に名前を付け重複を減らす * 引数を利用しなくてもできる形 */ /* * void uta(void) * 「唄を忘れた 金糸雀(かなりや)は」を出力する */ void uta(void) { printf ( "唄を忘れた 金糸雀(かなりや)は\n" ); } /* * void ieie(void) * 「いえ いえ それはなりませぬ」を出力する */ void ieie(void) { printf ( "いえ いえ それはなりませぬ\n" ); } /* * void kyoku_1(void) * 「歌詞 1 」を出力する */ void kyoku_1(void) { uta(); printf ( "後の山に 棄てましょか\n" ); ieie(); } /* * void kyoku_2(void) * 「歌詞 2 」を出力する */ void kyoku_2(void) { uta(); printf ( "背戸の小薮に 埋けましょか\n" ); ieie(); } /* * void kyoku_3(void) * 「歌詞 3 」を出力する */ void kyoku_3(void) { uta(); printf ( "柳の鞭で ぶちましょか\n" ); ieie(); } /* * void kyoku_4(void) * 「歌詞 4 」を出力する */ void kyoku_4(void) { uta(); printf ( "象牙の船に 銀の櫂\n" ); printf ( "月夜の海に 浮べれば\n" ); printf ( "忘れた唄を おもいだす\n" ); } /* * int main ( void ) * 四つの歌詞を、間に空行を入れて出力する */ int main ( void ) { kyoku_1(); /* 一曲目 */ printf ( "\n" ); /* 空行 */ kyoku_2(); /* ニ曲目 */ printf ( "\n" ); /* 空行 */ kyoku_3(); /* 三曲目 */ printf ( "\n" ); /* 空行 */ kyoku_4(); /* 四曲目 */ return 0; }
C:\usr\c>sample-004 唄を忘れた 金糸雀(かなりや)は 後の山に 棄てましょか いえ いえ それはなりませぬ 唄を忘れた 金糸雀(かなりや)は 背戸の小薮に 埋けましょか いえ いえ それはなりませぬ 唄を忘れた 金糸雀(かなりや)は 柳の鞭で ぶちましょか いえ いえ それはなりませぬ 唄を忘れた 金糸雀(かなりや)は 象牙の船に 銀の櫂 月夜の海に 浮べれば 忘れた唄を おもいだす C:\usr\c>
Download : sample-005.c ( SJIS 版 )
/* * DATE sample-005.c */ #include <stdio.h> /* * 「金糸雀(かなりや)」 * (c) 西條八十作詞・成田為三作曲 * http://www.mahoroba.ne.jp/~gonbe007/hog/shouka/kanariya.html */ /* * 1 〜 3 を引数付き関数でおきかえる */ /* * void uta(void) * 「唄を忘れた 金糸雀(かなりや)は」を出力する */ void uta(void) { printf ( "唄を忘れた 金糸雀(かなりや)は\n" ); } /* * void ieie(void) * 「いえ いえ それはなりませぬ」を出力する */ void ieie(void) { printf ( "いえ いえ それはなりませぬ\n" ); } /* * void kyoku_123 ( char *center ) * char *center ; 曲 1 〜 3 で異る部分 * 曲 1 〜 3 で異る部分を引数にする事により、歌詞全体を出力する */ void kyoku_123 ( char *center ) { uta(); printf ( center ); /* kyoku 1 〜 3 で異る部分を変数 (center) にした */ ieie(); } /* * void kyoku_1(void) * 「歌詞 1 」を出力する * kyoku_123 を利用して、歌詞 1 固有の部分だけを指定する */ void kyoku_1(void) { kyoku_123 ( "後の山に 棄てましょか\n" ); } /* * void kyoku_2(void) * kyoku_123 を利用して、歌詞 2 を出力 */ void kyoku_2(void) { kyoku_123 ( "背戸の小薮に 埋けましょか\n" ); } /* * void kyoku_3(void) * kyoku_123 を利用して、歌詞 3 を出力 */ void kyoku_3(void) { kyoku_123 ( "柳の鞭で ぶちましょか\n" ); } /* * void kyoku_4(void) * 「歌詞 4 」を出力する * 形が 1 〜 3 と異るので、kyoku_123 は使えない */ void kyoku_4(void) { uta(); printf ( "象牙の船に 銀の櫂\n" ); printf ( "月夜の海に 浮べれば\n" ); printf ( "忘れた唄を おもいだす\n" ); } /* * int main ( void ) * 四つの歌詞を、間に空行を入れて出力する */ int main ( void ) { kyoku_1(); /* 一曲目 */ printf ( "\n" ); /* 空行 */ kyoku_2(); /* ニ曲目 */ printf ( "\n" ); /* 空行 */ kyoku_3(); /* 三曲目 */ printf ( "\n" ); /* 空行 */ kyoku_4(); /* 四曲目 */ return 0; }
C:\usr\c>sample-005 唄を忘れた 金糸雀(かなりや)は 後の山に 棄てましょか いえ いえ それはなりませぬ 唄を忘れた 金糸雀(かなりや)は 背戸の小薮に 埋けましょか いえ いえ それはなりませぬ 唄を忘れた 金糸雀(かなりや)は 柳の鞭で ぶちましょか いえ いえ それはなりませぬ 唄を忘れた 金糸雀(かなりや)は 象牙の船に 銀の櫂 月夜の海に 浮べれば 忘れた唄を おもいだす C:\usr\c>
Download : sample-006.c ( SJIS 版 )
/* * DATE sample-006.c */ #include <stdio.h> #include <string.h> /* strcmp を利用する場合は必要 */ /* * 「金糸雀(かなりや)」 * (c) 西條八十作詞・成田為三作曲 * http://www.mahoroba.ne.jp/~gonbe007/hog/shouka/kanariya.html */ /* * 4 の場合もまとめられないだろうか ? */ /* * void uta(void) * 「唄を忘れた 金糸雀(かなりや)は」を出力する */ void uta(void) { printf ( "唄を忘れた 金糸雀(かなりや)は\n" ); } /* * void ieie(void) * 「いえ いえ それはなりませぬ」を出力する */ void ieie(void) { printf ( "いえ いえ それはなりませぬ\n" ); } /* * void kyoku_1234 ( char *center ) * char *center ; 曲 1 〜 4 で最初に異る部分 * 曲 1 〜 3 は異る部分を、定型で、出力する事により * 曲 4 は、if と strcmp を利用して、区別し、特別扱いする事により * それぞれ、歌詞全体を出力する */ void kyoku_1234 ( char *center ) { /* 1 〜 4 共通部分 */ uta(); printf ( center ); /* 1 〜 3 と 4 では異る部分 */ /* strcmp で、比較し、その結果を if で区別する */ if ( !strcmp ( center, "象牙の船に 銀の櫂\n" ) ) { /* 4 の場合だった */ printf ( "月夜の海に 浮べれば\n" ); printf ( "忘れた唄を おもいだす\n" ); } else { /* それ以外.. */ /* 1 〜 3 の場合だった */ ieie(); } } /* * void kyoku_1(void) * kyoku_1234 を利用して、歌詞 1 を出力 */ void kyoku_1(void) { kyoku_1234 ( "後の山に 棄てましょか\n" ); } /* * void kyoku_2(void) * kyoku_1234 を利用して、歌詞 2 を出力 */ void kyoku_2(void) { kyoku_1234 ( "背戸の小薮に 埋けましょか\n" ); } /* * void kyoku_3(void) * kyoku_1234 を利用して、歌詞 3 を出力 */ void kyoku_3(void) { kyoku_1234 ( "柳の鞭で ぶちましょか\n" ); } /* * void kyoku_4(void) * kyoku_1234 を利用して、歌詞 4 を出力 */ void kyoku_4(void) { kyoku_1234 ( "象牙の船に 銀の櫂\n" ); } /* * int main ( void ) * 四つの歌詞を、間に空行を入れて出力する */ int main ( void ) { kyoku_1(); /* 一曲目 */ printf ( "\n" ); /* 空行 */ kyoku_2(); /* ニ曲目 */ printf ( "\n" ); /* 空行 */ kyoku_3(); /* 三曲目 */ printf ( "\n" ); /* 空行 */ kyoku_4(); /* 四曲目 */ return 0; }
C:\usr\c>sample-006 唄を忘れた 金糸雀(かなりや)は 後の山に 棄てましょか いえ いえ それはなりませぬ 唄を忘れた 金糸雀(かなりや)は 背戸の小薮に 埋けましょか いえ いえ それはなりませぬ 唄を忘れた 金糸雀(かなりや)は 柳の鞭で ぶちましょか いえ いえ それはなりませぬ 唄を忘れた 金糸雀(かなりや)は 象牙の船に 銀の櫂 月夜の海に 浮べれば 忘れた唄を おもいだす C:\usr\c>
Download : sample-007.c ( SJIS 版 )
/* * DATE sample-007.c */ #include <stdio.h> #include <string.h> /* * 木霊 */ /* * 引数を利用して振舞をかえる関数の例 */ /* * void echo ( char *message ) * char *message 与えらえたメッセージ、これをそのまま言い返す(木霊) * message が空の場合は、「言い返せない」と文句を言う */ void echo ( char *message ) { /* message の内容によって振舞を変える */ /* 「""」は「空文字列」を表す */ if ( !strcmp ( message, "" ) ) { /* もし、メッセージが空っぽならば.. */ printf ( "何か言わないと、言い返せないじゃないか.." ); } else { /* そうじゃなければ、そのまま答える */ printf ( message ); } } /* * void chat ( char *message ) * char *message 木霊に呼び掛けるメッセージ * こちらからの呼び掛けと、木霊の返答を表示する */ void chat ( char *message ) { printf ( "呼掛け : " ); printf ( message ); printf ( "\n" ); /* 呼掛けの言葉 */ printf ( "木霊 : " ); echo ( message ); printf ( "\n" ); /* 木霊の応答 */ } /* * main */ int main ( void ) { chat ( "ヤッホー" ); chat ( "オーイ" ); chat ( "" ); chat ( "生意気なやつだ" ); return 0; }
C:\usr\c>sample-007 呼掛け : ヤッホー 木霊 : ヤッホー 呼掛け : オーイ 木霊 : オーイ 呼掛け : 木霊 : 何か言わないと、言い返せないじゃないか.. 呼掛け : 生意気なやつだ 木霊 : 生意気なやつだ C:\usr\c>
Download : sample-008.c ( SJIS 版 )
/* * DATE sample-008.c */ #include <stdio.h> #include <string.h> /* * 文字列に 1 を加えると.. ? * 文字の長さが短くなる (頭の部分がなくなる..) */ /* * main */ int main ( void ) { printf ( "abcde\n" ); /* 当然 「abcde」が表示される.. */ printf ( "abcde\n" + 1 ); /* 文字列に 1 を加えるってどうゆうこと.. ? */ printf ( "abcde\n" + 2 ); printf ( "abcde\n" + 1 + 1 ); /* ("abcde\n" + 1) + 1 => "bcde\n" + 1 => \ "cde\n" */ return 0; }
C:\usr\c>sample-008 abcde bcde cde cde C:\usr\c>
Download : sample-009.c ( SJIS 版 )
/* * DATE sample-009.c */ #include <stdio.h> #include <string.h> /* * void recursive ( char *string ) * char *string 指定した文字列からなる三角形を作る * 実行例 * recursive( "abc\n" ); * -> * abc "abc\n" * bc "bc\n" * c "c\n" * "\n" * 再帰呼出しを利用 */ void recursive ( char *string ) { if ( !strcmp ( string, "" ) ) { /* もし空文字列 ( "" ) ならば */ printf ( "" ); /* これで御仕舞い */ } else { /* そうでなければ、 */ printf ( string ); recursive ( string + 1 ); /* 再帰呼び出しする */ /* +1 を忘れると悲惨な事に.. */ } } /* * main */ int main ( void ) { recursive ( "abcdefg\n" ); recursive ( "xyz\n" ); return 0; }
C:\usr\c>sample-009 abcdefg bcdefg cdefg defg efg fg g xyz yz z C:\usr\c>
Download : sample-010.c ( SJIS 版 )
/* * DATE sample-010.c */ #include <stdio.h> #include <string.h> /* * 再帰呼出しを利用して、"Hello, World\n" を沢山出力する */ /* * void rec_hello ( char *count ) * char *count 文字列を指定し、その長さで、繰り返えし回数の指数を指定 * 与えられた文字列の長さを n とすると 2^n 回だけ出力する */ void rec_hello ( char *count ) { if ( !strcmp ( count, "" ) ) { /* カラッポなら.. */ printf ( "Hello, World\n" ); /* 一つだけ表示してみる */ } else { /* そうでなければ.. */ rec_hello ( count + 1 ); /* 二倍にして再帰よびだし */ rec_hello ( count + 1 ); } } /* * main */ int main ( void ) { rec_hello ( "****" ); /* 2^4 = 16 回出力 */ /* 2^10 = 1024 だから、 "**********" を与えれば... */ return 0; }
C:\usr\c>sample-010 Hello, World Hello, World Hello, World Hello, World Hello, World Hello, World Hello, World Hello, World Hello, World Hello, World Hello, World Hello, World Hello, World Hello, World Hello, World Hello, World C:\usr\c>
Download : sample-011.c ( SJIS 版 )
/* * DATE sample-011.c */ #include <stdio.h> #include <string.h> /* * フィボナッチ数の計算 */ /* * void fib ( char *n ) * char *n n の長さで何番目の項かを表す * n 番目のフィボナッチ数だけ '*' を表示する */ void fib ( char *n ) { if ( !strcmp ( n, "" ) ) { /* カラッポ(0)なら.. */ printf ( "*" ); /* 一つだけ : fib(0) = 1 だから */ } else if ( !strcmp ( n, "*" ) ) { /* 一つ(1)なら */ printf ( "*" ); /* 一つだけ : fib(1) = 1 だから */ } else { /* そうでなければ.. */ fib ( n + 1 ); /* fib ( n - 1 ) と */ fib ( n + 2 ); /* fib ( n - 2 ) だけだす */ } } /* * main */ int main ( void ) { printf ( "fib 3 : " ); fib ( "***" ); printf ( "\n" ); printf ( "fib 5 : " ); fib ( "*****" ); printf ( "\n" ); return 0; }
C:\usr\c>sample-011 fib 3 : *** fib 5 : ******** C:\usr\c>
Download : sample-012.c ( SJIS 版 )
/* * DATE sample-012.c */ #include <stdio.h> #include <string.h> /* strcmp に必要 */ #include "s_turtle.h" /* 亀プログラムの場合に必要 */ /* * 亀プログラムと再帰呼出し */ /* * void jump_n( char *n ) * char *n 足跡の長さを表す * 指定された長さだけ現在向いている方向に足跡を残こさず跳ねる */ void jump_n( char *n ) { if ( !strcmp ( n, "" ) ) { /* n が空文字列 ("") なら何もしない */ } else { s_turtle_jump(); /* とりあえず、一歩跳ねる */ jump_n ( n + 1 ); /* 文字列を短くして、再帰呼出し */ } } /* * void move_n( char *n ) * * char *n 足跡の長さを表す * 指定された長さだけ現在向いている方向に足跡を残こして歩く */ void move_n(char *n) { if ( !strcmp ( n, "" ) ) { /* n が空文字列 ("") なら何もしない */ } else { s_turtle_move(); /* とりあえず、一歩歩く */ move_n ( n + 1 ); /* 文字列を短くして、再帰呼出し */ } } /* * void turn_n(char *n) * * 現在向いている方向から時計回りに n * 45 度向きを変える */ void turn_n(char *n) { if ( !strcmp ( n, "" ) ) { /* n が空文字列 ("") なら何もしない */ } else { s_turtle_turn(); /* とりあえず、45 度向きをかえる */ turn_n ( n + 1 ); /* 文字列を短くして、再帰呼出し */ } } /* * void turn_90(void) * * 現在向いている方向から時計回りに 90 度向きを * 進行方向の「右」に向きを変える */ void turn_90(void) { turn_n ( "**" ); } /* * void turn_270(void) * * 現在向いている方向から時計回りに 270 度向きを * 進行方向の「左」に向きを変える */ void turn_270(void) { turn_n ( "******" ); } /* * void move_n_and_turn(char *n) * * 現在向いている方向から 20 歩進んで右を向く * 四角形の一辺を書く */ void move_n_and_turn( char *n ) { move_n ( n ); /* 向きを変える */ turn_90(); } /* * void draw_n_sqare( char *n ); * * 一辺が n の長さの四角形を書く */ void draw_n_sqare( char *n ) { /* 「長さ 20 の辺を書いて右を向く」という事を 4 回繰り返す */ move_n_and_turn(n); move_n_and_turn(n); move_n_and_turn(n); move_n_and_turn(n); } /* * int main ( void ) */ int main ( void ) { /* * 最初は真中 (0,0) で上を向いている */ draw_n_sqare( "********************" ); /* まず四角を書く */ turn_270(); /* 270 度回転 */ jump_n( "**********" ); /* 10 歩跳ねる */ draw_n_sqare( "********************" ); /* また四角 */ turn_270(); jump_n( "**********" ); draw_n_sqare( "********************" ); turn_270(); jump_n( "**********" ); draw_n_sqare( "********************" ); return 0; }
C:\usr\c>sample-012 C:\usr\c>
/* * <<目的>> * 画面に 「Hello, World」とメッセージを出力する * 更に、それを 3 行 */ #include <stdio.h> int main() { printf ( "Hello, World\n" ); printf ( "Hello, World\n" ); printf ( "Hello, World\n" ); return 0; }
/* * <<目的>> * 画面に 「Hello, World」とメッセージを出力する * 更に、それを 3 行 */ #include <stdio.h> void hello() { // printf ( "Hello, World\n" ); printf ( "こんにちは、みなさん\n" ); } int main() { hello(); hello(); hello(); return 0; }
/* * <<目的>> * 画面に 「Hello, World」とメッセージを出力する * 更に、それを 3 行 */ #include <stdio.h> int main() { printf ( "Hello, 鈴木くん\n" ); printf ( "Hello, 佐藤さん\n" ); printf ( "Hello, 山田くん\n" ); return 0; }
/* * <<目的>> * 画面に 「Hello, World」とメッセージを出力する * 更に、それを 3 行 */ #include <stdio.h> void hdareka( char * dareka ) { printf ( "こんにちは " ); printf ( dareka ); // 共通でない部分を変数 (dareka) にしてしまう } void hsuzuki() { hdareka ( "鈴木くん\n" ); } void hsato() { hdareka ( "佐藤さん\n" ); } void hyamada() { hdareka ( "山田くん\n" ); } int main() { hsuzuki(); hsato(); hyamada(); return 0; }
/* * DATE sample-003.c */ #include <stdio.h> /* * 「金糸雀(かなりや)」 * (c) 西條八十作詞・成田為三作曲 * http://www.mahoroba.ne.jp/~gonbe007/hog/shouka/kanariya.html */ /* * 関数を使わずに愚直に命令を並べた * プログラミングの基本はこれ (実行したい内容をその順に並べる) */ /* * int main ( void ) */ void uta() { printf ( "唄を忘れた 金糸雀(かなりや)は\n" ); } void ieie() { printf ( "いえ いえ それはなりませぬ\n" ); } void ban(char * kashi) { // kashi という一つの引数を持つ引数つき関数 uta(); printf ( kashi ); // 違う部分は「変数」 ieie(); // kashi は「変数」の名前 } void ichiban() { // ichiban が kashi と同じためには // kanshi が "後の山に 棄てましょか\n" となっていれば ban( "後の山に 棄てましょか\n" ); /* ban の変数(引数 : kashi) に 「"後の山に 棄てましょか\n"」 を当て嵌めると、ichiban と同じになる */ } void niban() { ban( "背戸の小薮に 埋けましょか\n" ); /* ban( "背戸の小薮に 埋けましょか\n" ); と ban( kashi ) が比較されて kashi に "背戸の小薮に 埋けましょか\n" が入る ban( kashi ) は uta(); printf ( kashi ); // 違う部分は「変数」 ieie(); // kashi は「変数」の名前 なので、 uta(); printf ( "背戸の小薮に 埋けましょか\n" ); ieie(); // kashi は「変数」の名前 と同じことなので、niban と同じになっている */ } void sanban() { ban ( "柳の鞭で ぶちましょか\n" ); } void yoban() { uta(); printf ( "象牙の船に 銀の櫂\n" ); printf ( "月夜の海に 浮べれば\n" ); printf ( "忘れた唄を おもいだす\n" ); } int main ( void ) { ichiban(); printf ( "\n" ); niban(); printf ( "\n" ); sanban(); printf ( "\n" ); yoban(); return 0; }
/* * DATE sample-003.c */ #include <stdio.h> /* * 「金糸雀(かなりや)」 * (c) 西條八十作詞・成田為三作曲 * http://www.mahoroba.ne.jp/~gonbe007/hog/shouka/kanariya.html */ /* * 関数を使わずに愚直に命令を並べた * プログラミングの基本はこれ (実行したい内容をその順に並べる) */ /* * int main ( void ) */ void uta() { printf ( "唄を忘れた 金糸雀(かなりや)は\n" ); } void ieie() { printf ( "いえ いえ それはなりませぬ\n" ); } void ban(char * kashi) { uta(); printf ( kashi ); /* A, B のどちか一方だけを指示したい if ( A を実行する条件 ) { A } else { B } */ /* 「strcmp ( kashi, "象牙の船に 銀の櫂\n" )」 kashi には、"象牙の船に 銀の櫂\n" がはいってい いないという条件を表す */ if ( strcmp ( kashi, "象牙の船に 銀の櫂\n" ) ) { // 1,2,3 の時 -> 4 でない -> kashi が \ "象牙の船に 銀の櫂\n" でない場合 // 1: kashi <- "後の山に 棄てましょか\n" // 2: kashi <- "背戸の小薮に 埋けましょか\n" // 3: kashi <- "柳の鞭で ぶちましょか\n" ); ieie(); // kashi は「変数」の名前 } else { // 4 の時 // 4: kashi <- "象牙の船に 銀の櫂\n" printf ( "月夜の海に 浮べれば\n" ); printf ( "忘れた唄を おもいだす\n" ); } } void ichiban() { ban( "後の山に 棄てましょか\n" ); } void niban() { ban( "背戸の小薮に 埋けましょか\n" ); } void sanban() { ban ( "柳の鞭で ぶちましょか\n" ); } void yoban() { ban( "象牙の船に 銀の櫂\n" ); } int main ( void ) { ichiban(); printf ( "\n" ); niban(); printf ( "\n" ); sanban(); printf ( "\n" ); yoban(); return 0; }
#include <stdio.h> /* henji という引数 ( message ) つきの関数を考える message が "おはよう" なら "こんばんわ" message が "Good Morning" なら "Good Night" と出力 <<ポイント>> 引数に与えられた文字列によって 出力が異なる */ void henji( char *message ) { if ( !strcmp ( message, "おはよう" ) ) { // message が "おはよう" の時 printf ( "こんばんわ\n" ); } else { // message が "おはよう" じゃなかったので.. // message が "Good Morning" の時だとおもってしまった printf ( "Good Night\n" ); } } int main() { henji ( "おはよう" ); henji ( "Good Morning" ); henji ( "ニーハオ" ); return 0; }
#include <stdio.h> /* henji という引数 ( message ) つきの関数を考える message が "おはよう" なら "こんばんわ" message が "Good Morning" なら "Good Night" と出力 <<ポイント>> 引数に与えられた文字列によって 出力が異なる */ void henji( char *message ) { if ( !strcmp ( message, "おはよう" ) ) { // message が "おはよう" の時 printf ( "こんばんわ\n" ); } else if ( !strcmp ( message, "Good Morning" ) ) { // message が "Good Morning" の時 printf ( "Good Night\n" ); } else if ( !strcmp ( message, "こんばんわ" ) ) { printf ( "おはよう\n" ); } else if ( !strcmp ( message, "Good Night" ) ) { printf ( "Good Morning\n" ); } else { // いずれの条件も成立しなかった.. printf ( "???\n" ); } } int main() { henji ( "おはよう" ); henji ( "Good Morning" ); henji ( "ニーハオ" ); return 0; }
void ban(char * kashi) { uta(); printf ( kashi ); if ( strcmp ( kashi, "象牙の船に 銀の櫂\n" ) ) { // 1, ieie(); // kashi \ は「変数」の名前 } else { // 4 の時 printf ( "月夜の海に 浮べれば\n" ); printf ( "忘れた唄を おもいだす\n" ); } } /* if ( !strcmp ( X, Y ) ) { // X と Y が等しい時 } else { // そうでない ( X と Y が異なる ) 時 } if ( strcmp ( X, Y ) ) { // X と Y が異なる時 } else { // そうでない ( X と Y が等しい ) 時 } */ void iu ( char *messag ) { printf ( "「" ); printf ( meessage ); printf ( "」" ); printf ( "っていうと" ); printf ( "「" ); if ( !strcmp ( message, "もう遊ばないない" ) ) { printf ( "遊ばない" ); // 「もう遊ばないない」の時 } else { printf ( meessage ); //鸚鵡がえし } printf ( "」" ); printf ( "っていう\n" ); } iu ( "あそぼ" ); iu ( "馬鹿" ); iu ( "もう遊ばない" );
課題プログラム内の「/*名前:ここ*/」の部分を書き換え「/*この部分を完成させなさい*/」の部分にプログラムを追加して、プログラムを完成させます。
Download : 20140502-02.c ( SJIS 版 )
/* * 20140502-02-QQQQ.c * 引数付き関数で、if 文で条件判断をするプログラムを作成しなさい */ #include <stdio.h> #include <strings.h> /* * こだまでしょうか * (c) 金子みすゞ * http://www.ad-c.or.jp/campaign/self_area/03/index.html */ void kakko ( char *message ) { printf ( "「" ); printf ( message ); printf ( "」" ); } void iu ( char *message ) { kakko ( message ); printf ( "っていうと" ); /* ** この部分を完成させなさい */ } /* * main */ int main ( void ) { iu ( "遊ぼう" ); iu ( "馬鹿" ); iu ( "もう遊ばない" ); printf ( "そうして、あとでさみしくなって、\n" ); iu ( "ごめんね" ); printf ( "こだまでしょうか、いいえ、誰でも。\n" ); return 0; }
C:\usr\c\> 20140502-02-QQQQ 「遊ぼう」っていうと「遊ぼう」っていう。 「馬鹿」っていうと「馬鹿」っていう。 「もう遊ばない」っていうと「遊ばない」っていう。 そうして、あとでさみしくなって、 「ごめんね」っていうと「ごめんね」っていう。 こだまでしょうか、いいえ、誰でも。 C:\usr\c\>
なお、表示する歌詞は、他の楽曲でもかまいません。
Download : 20140502-03.c ( SJIS 版 )
/* * 20140502-03-QQQQ.c * 底辺の長さが指定した文字列の二倍の長さ - 1 の横向のピラミッドを作成するプログラムを作成する */ #include <stdio.h> #include <strings.h> /* */ void down ( char *edge ) { if ( !strcmp ( edge, "" ) ) { /* なにもする必要はない */ } else { printf ( edge ); printf ( "\n" ); down ( edge + 1 ); } } void up ( char *edge ) { if ( !strcmp ( edge, "" ) ) { /* なにもする必要はない */ } else { up ( edge + 1 ); /* ** この部分を完成させなさい */ } } void pyramid ( char *edge ) { up ( edge + 1 ); printf ( edge ); printf ( "\n" ); /* ** この部分を完成させなさい */ } /* * main */ int main ( void ) { pyramid ( "*****" ); printf ( "\n" ); pyramid ( "**********" ); return 0; }
C:\usr\c\> 20140502-03-QQQQ * ** *** **** ***** **** *** ** * * ** *** **** ***** ****** ******* ******** ********* ********** ********* ******** ******* ****** ***** **** *** ** * C:\usr\c\>