Download : sample-001.c ( SJIS 版 )
/* * 2014/05/09 sample-001.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-001 abcde bcde cde cde C:\usr\c>
Download : sample-002.c ( SJIS 版 )
/* * 2014/05/09 sample-002.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-002 abcdefg bcdefg cdefg defg efg fg g xyz yz z C:\usr\c>
Download : sample-003.c ( SJIS 版 )
/* * 2014/05/09 sample-003.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-003 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-004.c ( SJIS 版 )
/* * 2014/05/09 sample-004.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-004 fib 3 : *** fib 5 : ******** C:\usr\c>
Download : sample-005.c ( SJIS 版 )
/* * DATE sample-005.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_180 ( void ) * * 現在向いている方向から時計回りに 180 度向きを * 進行方向の「後ろ」に向きを変える */ void turn_180(void) { turn_n ( "****" ); } /* * void turn_270 ( void ) * * 現在向いている方向から時計回りに 270 度向きを * 進行方向の「左」に向きを変える */ void turn_270 ( void ) { turn_n ( "******" ); } /* * void move_n_and_turn ( char *n ) * * 現在向いている方向から n 歩進んで右を向く * 四角形の一辺を書く */ 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 ) { /* 「長さ n の辺を書いて右を向く」という事を 4 回繰り返す */ move_n_and_turn(n); move_n_and_turn(n); move_n_and_turn(n); move_n_and_turn(n); } /* * main */ int main ( void ) { /* * 最初は真中 (0,0) で上を向いている */ draw_n_sqare ( "********************" ); /* 長さ 20 の矩形を書く */ turn_270(); jump_n ( "****" ); /* 四歩ジャンプする */ draw_n_sqare ( "********************" ); /* 長さ 20 の矩形を書く */ turn_270(); jump_n ( "****" ); /* 四歩ジャンプする */ draw_n_sqare ( "********************" ); /* 長さ 20 の矩形を書く */ turn_270(); jump_n ( "****" ); /* 四歩ジャンプする */ draw_n_sqare ( "********************" ); /* 長さ 20 の矩形を書く */ turn_270(); jump_n ( "****" ); /* 四歩ジャンプする */ return 0; }
C:\usr\c>sample-005 C:\usr\c>
Download : sample-006.c ( SJIS 版 )
/* * 2014/05/09 sample-006.c */ /* * 文字「a」を出力する */ #include <stdio.h> void main ( void ) { putchar ( 'a' ); /* 「a」という「文字」を画面に出力 */ }
C:\usr\c>sample-006 aC:\usr\c>
Download : sample-007.c ( SJIS 版 )
/* * 2014/05/09 sample-007.c */ /* * 文字版「Hello, World」 */ #include <stdio.h> void main ( void ) { putchar ( 'H' ); putchar ( 'e' ); putchar ( 'l' ); putchar ( 'l' ); putchar ( 'o' ); putchar ( ',' ); putchar ( ' ' ); /* 空白の出力 */ putchar ( 'W' ); putchar ( 'o' ); putchar ( 'r' ); putchar ( 'l' ); putchar ( 'd' ); putchar ( '\n' ); /* 改行の出力 */ }
C:\usr\c>sample-007 Hello, World C:\usr\c>
Download : sample-008.c ( SJIS 版 )
/* * 2014/05/09 sample-008.c */ /* * エスケープコード (「\」)の利用 */ #include <stdio.h> void main ( void ) { printf ( "「\\」 を出すには 「'\\\\'」とする ==> " ); putchar ( '\\' ); printf ( "\n" ); printf ( "「'」を出すには 「'\\''」とする ==> " ); putchar ( '\'' ); printf ( "\n" ); printf ( "「ビープ音」を出すには 「'\\a'」とする ==> " ); putchar ( '\a' ); /* ここで文字は表示されず、音が出る */ printf ( "\n" ); printf ( "「\"」を出すには 「'\"'」だけでよい ==> " ); putchar ( '"' ); printf ( "\n" ); }
C:\usr\c>sample-008 「\」 を出すには 「'\\'」とする ==> \ 「'」を出すには 「'\''」とする ==> ' 「ビープ音」を出すには 「'\a'」とする ==> 「"」を出すには 「'"'」だけでよい ==> " C:\usr\c>
Download : sample-009.c ( SJIS 版 )
/* * 2014/05/09 sample-009.c */ /* * 文字列 */ #include <stdio.h> void main ( void ) { printf ( "文字列\n" ); /* 「文字列」+「改行」が表示される */ }
C:\usr\c>sample-009 文字列 C:\usr\c>
Download : sample-010.c ( SJIS 版 )
/* * 2014/05/09 sample-010.c */ /* * 文字列の中のエスケープコード */ #include <stdio.h> void main ( void ) { printf ( "エスケープコード(「\\」)の扱いは、基本文字と同じ\n" ); printf ( "「\\」と出力したければ、「\\\\」とかけばよい\n" ); printf ( "文字では「'」を出すのに「\\'」としたが文字列では「'」で良い\n" ); printf ( "その代わりに文字列では「\"」を出すのには「\\\"」とする必要がある\n" ); }
C:\usr\c>sample-010 エスケープコード(「\」)の扱いは、基本文字と同じ 「\」と出力したければ、「\\」とかけばよい 文字では「'」を出すのに「\'」としたが文字列では「'」で良い その代わりに文字列では「"」を出すのには「\"」とする必要がある C:\usr\c>
Download : sample-011.c ( SJIS 版 )
/* * 2014/05/09 sample-011.c */ /* * 文字列の計算 */ #include <stdio.h> void main ( void ) { printf ( "\"abc\" に 1 を加えると \"bc\" と同じになる ==> " ); printf ( "abc" + 1 ); /* 「bc」と表示される */ printf ( "\n" ); printf ( "*\"abc\" と頭に 「*」をつけると先頭の文字 ('a') になる ==> " ); putchar ( *"abc\n" ); /* 文字列「abc」の先頭の文字「a」が表示される */ printf ( "\n" ); printf ( "\"abc\"[2] とお尻に 「[数値]」をつけると「『数値』番目の文字」になる ==> " ); /* だだし、先頭(1文字目) は 0 番目であり 「n 番目」は 「n + 1 文字目」になる */ putchar ( "abc\n"[2] ); /* 文字列「abc」の 2 番目(2+1文字目) の文字「c」が表示される */ printf ( "\n" ); if ( "abc"[0] == 'b' ) { printf ( "\"abc\"[0] と 'b' は等しいです\n" ); printf ( "実際 \"abc\"[0] は " ); putchar ( "abc"[0] ); printf ( "でした\n" ); } else { printf ( "\"abc\"[0] と 'b' は等しくないです\n" ); printf ( "実際 \"abc\"[0] は " ); putchar ( "abc"[0] ); printf ( "でした\n" ); } if ( "abc"[1] == 'b' ) { printf ( "\"abc\"[1] と 'b' は等しいです\n" ); printf ( "実際 \"abc\"[1] は " ); putchar ( "abc"[1] ); printf ( "でした\n" ); } else { printf ( "\"abc\"[1] と 'b' は等しくないです\n" ); printf ( "実際 \"abc\"[1] は " ); putchar ( "abc"[1] ); printf ( "でした\n" ); } if ( "abc"[3] == '\0' ) { printf ( "\"abc\"[3] は EOS (\\0) が入っています\n" ); } else { printf ( "\"abc\"[3] は EOS (\\9) が入っていません\n" ); } }
C:\usr\c>sample-011 "abc" に 1 を加えると "bc" と同じになる ==> bc *"abc" と頭に 「*」をつけると先頭の文字 ('a') になる ==> a "abc"[2] とお尻に 「[数値]」をつけると「『数値』番目の文字」になる ==> c "abc"[0] と 'b' は等しくないです 実際 "abc"[0] は aでした "abc"[1] と 'b' は等しいです 実際 "abc"[1] は bでした "abc"[3] は EOS (\0) が入っています C:\usr\c>
#include <stdio.h> void print_three_times ( char *message ) { /* 引数で指定されたメッセージを三回繰り返し表示 */ printf ( message ); printf ( message ); printf ( message ); } void print_hello_three_times () { /* hello を三回繰り返し表示 */ printf ( "hello\n" ); printf ( "hello\n" ); printf ( "hello\n" ); } void print_konichiwa_three_times () { /* こんにちは を三回繰り返し表示 */ printf ( "こんにちは\n" ); printf ( "こんにちは\n" ); printf ( "こんにちは\n" ); } int main() { print_three_times ( "hello\n" ); print_three_times ( "こんにちは\n" ); print_three_times ( "ニーハオ\n" ); return 0; }
/* * 2014/05/09 sample-001.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" */ printf ( "abcde\n" + 3 ); /* "de\n" */ return 0; }
#include <stdio.h> void triangle_three() { printf ( "***\n" ); printf ( "**\n" ); printf ( "*\n" ); } int main(){ triangle_three(); return 0; }
#include <stdio.h> void triangle_three() { printf ( "***\n" ); /* 「***」を表示 */ printf ( "***\n" + 1 ); /* 「**」を表示(一文字短くなった) */ printf ( "***\n" + 1 + 1 ); /* 「*」を表示(ニ文字短くなった) */ } int main(){ triangle_three(); return 0; }
#include <stdio.h> void triangle_three(char *message) { printf ( message ); /* 「***」を表示 */ printf ( message + 1 ); /* 「**」を表示(一文字短くなった) */ printf ( message + 1 + 1 ); /* 「*」を表示(ニ文字短くなった) */ } int main(){ triangle_three("***\n"); triangle_three("AAA\n"); triangle_three("XYZ\n"); return 0; }
#include <stdio.h> void triangle_three(char *message) { printf ( message ); /* 「***」を表示 */ printf ( message + 1 ); /* 「**」を表示(一文字短くなった) */ printf ( message + 1 + 1 ); /* 「*」を表示(ニ文字短くなった) */ } int main(){ triangle_three("123\n"); triangle_three("123456\n"); triangle_three("456\n"); return 0; }
#include <stdio.h> void triangle_three(char *message) { printf ( message ); /* 「***」を表示 */ printf ( message + 1 ); /* 「**」を表示(一文字短くなった) */ printf ( message + 2 ); /* 「*」を表示(ニ文字短くなった) */ printf ( message + 3 ); /* 「*」を表示(ニ文字短くなった) */ printf ( message + 4 ); /* 「*」を表示(ニ文字短くなった) */ } int main(){ triangle_three("12345\n"); /* "12345\n" "2345\n" "345\n" "45\n" "5\n" */ triangle_three("12\n"); /* 何がおきるか */ /* "12\n" "2\n" "\n" "" ???????? */ return 0; }
#include <stdio.h> void triangle_three(char *message) { printf ( message ); printf ( message + 1 ); printf ( message + 2 ); printf ( message + 3 ); printf ( message + 4 ); } int main(){ triangle_three("12345\n"); triangle_three("12\n"); /* 何がおきるか */ return 0; }
#include <stdio.h> /* message の長さが 5 文字以上か、あるいは 3 文字の時 OK */ void triangle_three(char *message) { /* もし message に "12\n" が与えられたら... ? */ printf ( message ); /* 「12\n」*/ printf ( message + 1 ); /* 「2\n」*/ printf ( message + 2 ); /* 「\n」: ここまでは許せる*/ if ( !strcmp ( message + 3, "" ) ) { /* message + 3 が "" (空文字列) に等しい場合 */ /* もうなにもしなくてよい */ printf ( "短過ぎる !!\n" ); } else { /* そうじゃなかったら.. (空文字列ではないので..) プリントしてよい */ printf ( message + 3 ); /* 「」: これは意味がない */ printf ( message + 4 ); /* ???? : こまってしまう */ } } int main(){ triangle_three("12345\n"); triangle_three("12\n"); /* 何がおきるか */ return 0; }
#include <stdio.h> void triangle_less_than_five(char *message) { if ( !strcmp ( message, "" ) ) { /* 始めから、空文字列だった */ /* なにもしない */ } else { /* とりあえず、空文字ではないので.. */ printf ( message ); /* それを出力 */ if ( !strcmp ( message + 1, "" ) ) { } else { printf ( message + 1 ); /* それを出力 */ if ( !strcmp ( message + 2, "" ) ) { } else { printf ( message + 2 ); /* それを出力 */ if ( !strcmp ( message + 3, "" ) ) { } else { printf ( message + 3 ); /* それを出力 */ if ( !strcmp ( message + 4, "" ) ) { } else { printf ( message + 4 ); /* 更に続く.. */ } } } } } } int main(){ printf ( "---------\n" ); triangle_less_than_five("1234567\n"); printf ( "---------\n" ); triangle_less_than_five("1\n"); printf ( "---------\n" ); triangle_less_than_five("123\n"); printf ( "---------\n" ); return 0; }
#include <stdio.h> void triangle(char *length) { /* 三角形を作るプログラムをかきたい.. */ if ( !strcmp ( length, "***" ) ) { printf ( "***\n" ); printf ( "**\n" ); printf ( "*\n" ); } if ( !strcmp ( length, "******" ) ) { printf ( "******\n" ); printf ( "*****\n" ); printf ( "****\n" ); triangle ( "***" ); } } int main() { triangle ( "***" ); /* 「***」 「**」 「*」 */ triangle ( "******" ); /* 「******」 「*****」 「****」 「***」 「**」 「*」 */ return 0; }
#include <stdio.h> void triangle(char *length) { /* 三角形を作るプログラムをかきたい.. */ if ( !strcmp ( length, "*" ) ) { printf ( length ); printf ( "\n" ); } if ( !strcmp ( length, "**" ) ) { printf ( length ); printf ( "\n" ); triangle ( length + 1 ); } if ( !strcmp ( length, "***" ) ) { printf ( length ); printf ( "\n" ); triangle ( length + 1 ); } if ( !strcmp ( length, "****" ) ) { printf ( length ); printf ( "\n" ); triangle ( length + 1 ); } if ( !strcmp ( length, "*****" ) ) { printf ( length ); printf ( "\n" ); triangle ( length + 1 ); } if ( !strcmp ( length, "******" ) ) { printf ( length ); printf ( "\n" ); triangle ( length + 1 ); } /* ... */ } int main() { triangle ( "***" ); /* 「***」 「**」 「*」 */ triangle ( "******" ); /* 「******」 「*****」 「****」 「***」 「**」 「*」 */ return 0; }
#include <stdio.h> void triangle(char *length) { /* 三角形を作るプログラムをかきたい.. */ if ( !strcmp ( length, "" ) ) { /* 空文字列の時 */ /* 何もしない */ } else { /* 空文字以外.. "*", "**", "***", ... */ printf ( length ); printf ( "\n" ); triangle ( length + 1 ); } } int main() { triangle ( "***" ); /* 「***」 「**」 「*」 */ triangle ( "******" ); /* 「******」 「*****」 「****」 「***」 「**」 「*」 */ triangle ( "************************************" ); return 0; }
#include <stdio.h> void print_loop() { printf ( "回る\n" ); print_loop(); } int main() { print_loop(); return 0; }
/* * 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 ); printf ( edge ); printf ( "\n" ); } } void pyramid ( char *edge ) { /* pyramid ( "***" ); -> pyramid(X) * --+ ** +--> up("**") --> up( "***"+1 ); -> up(X+1) *** ----> printf ( "***\n" ); -> printf(X) ** +-> down( "**" ) --> down ( "***"+1 ); -> down(X+1) * --+ */ up ( edge + 1 ); /* 上の部分 */ printf ( edge ); /* 真ん中の部分 */ printf ( "\n" ); down ( edge + 1 ); /* 下の部分 */ } /* * main */ int main ( void ) { pyramid ( "*****" ); printf ( "\n" ); pyramid ( "**********" ); return 0; }
#include <stdio.h> int main() { putchar ( 'A' ); /* 「A」という一文字を出力 */ putchar ( '\n' ); /* 「\n(改行)」を一文字を出力する */ putchar ( 'X' ); /* 「X」という一文字を出力 */ /* "A" は、「A」 一文字からなる文字列 "", "ABC" は OK 'A' は、「A」 一文字 '', 'ABC' は NG */ return 0; }
#include <stdio.h> int main() { putchar ( *"abc" ); /* 文字列の先頭に '*' を付けると 先頭の文字になる */ /* 「a」が出力される */ putchar ( '\n' ); return 0; }
#include <stdio.h> int main() { putchar ( *("abc"+1) ); /* "abc"+1 -> "bc" *("abc"+1) -> *("bc") -> 'b' */ putchar ( "abc"[1] ); /* "abc"[1] -> *("abc"+1) -> 'b' "abc"[0] -> *("abc"+0) -> *("abc") -> 'a' "abc"[2] -> 'c' "abc"[3] -> ???? -> '\0' <= NULL 文字 End Of String (EOS) "abc" -> { 'a', 'b', 'c', '\0' } -> { "abc"[0], "abc"[1], "abc"[2], "abc"[3] } */ putchar ( '\n' ); return 0; }
階乗 3! = 3 * 2 * 1 n! = n * (n-1) * (n-2) * .. * 2 * 1 n! = n * [ (n-1) * (n-2) * .. * 2 * 1 ] = n * (n-1)! n * (n-1)! ( n > 0 ) n! = { 1 ( n = 1 ) n! の再帰的な定義 ( ! の意味を决めている.. ) ペアノの公理 1) 0 は自然数 2) n が自然数の時 n+1 も自然数 3) 1), 2) だけが自然数 # 数学的帰納法と関係がある 3 が自然数 ? 3 = 2 + 1 なので 2 が自然数なら 3 も自然数 一方 2 は自然数 ? 2 = 1 + 1 なので 1 が自然数なら 2 も自然数 一方 1 は自然数 ? 1 = 0 + 1 なので 0 が自然数なら 1 も自然数 すでに 0 が自然数である事がわかっているので.. 1! = 1 * (1-1)! = 1 * 0! = 1 * 0 * (0-1)! t("*****") = ***** **** *** ** * t("*****") = ***** t("*****") t("*****") = ***** t("******"+1) t("*****") = "*****" t("*****"+1) t("*****") = "*****" t("****") t("*****") = "*****" "****" t("****"+1) t("*****") = "*****" "****" t("***") t("*****") = "*****" "****" "***" t("***"+1) ... t("*****") = "*****" "****" "***" "**" "*" t("") t("*****") = "*****" "****" "***" "**" "*" ================== t(M)= if ( M が "" ) { なにもしない } else { p(M) t(M+1); } ================== p("***") * ** -> u("**") -> u("***"+1) *** -> d("***") ** * void p(char *X) { u(X+1); d(X); } void d( char * X) { if ( !strcmp ( X, "" ) ) { } else { printf ( X ); printf ( "\n" ); d(X+1); } } d("***") = -> d(X) *** -> printf ( "***" ); -> printf (X) pritf ( "\n" ); pritf ( "\n" ); ** -> d("**") -> d(X+1) * u("***") -> u(X) * ** -> u("**"); -> u(X+1) *** -> printf ( "***" ); -> printf (X) printf ( "\n" ); -> printf ("\n") void u(char *X) { if ( !strcmp ( X, "" ) ) { } else { u(X+1); printf ( X ); printf ( "\n" ); } }
先週(2014/05/02)の課題の 3を、解いてください。