Download : sample-001.c ( utf8 版 )
/* * 2016/06/03 sample-001.c */ /* * コマンドライン引数 */ #include <stdio.h> /* * main 関数 */ int main ( int argc, char *argv[] ) { /* main 関数の引数が変化 */ /* main 関数の引数は、どちらでも良い 「引数を宣言」する事により、「利用が可能」になる */ /* このプログラムを実行する場合は ./sample-001.c.exe abc の様に、コマンド引数を指定する必要がある コマンドラインを指定しなかったりすると、 エラー (core dumped) になったりする。 */ printf ( "一つ目のコマンドライン引数は「" ); printf ( argv[1] ); printf ( "」でした。\n" ); return 0; }
$ ./sample-001.exe abc 一つ目のコマンドライン引数は「abc」でした。 $
Download : sample-002.c ( utf8 版 )
/* * 2016/06/03 sample-002.c */ /* * コマンドライン引数 (2) */ #include <stdio.h> /* * main 関数 */ int main ( int argc, char *argv[] ) { /* main 関数の引数が変化 */ /* このプログラムを実行する場合は ./sample-002.c.exe abc 123 zzzzz の様に、コマンド引数を 2 つ以上、指定する必要がある */ printf ( "プログラムファイル名は「" ); printf ( argv[0] ); /* argv[0] はプログラムファイル名 */ printf ( "」でした。\n" ); printf ( "一つ目のコマンドライン引数は「" ); printf ( argv[1] ); printf ( "」でした。\n" ); printf ( "二つ目のコマンドライン引数は「" ); printf ( argv[2] ); printf ( "」でした。\n" ); return 0; }
$ ./sample-002.exe abc 123 zzzz プログラムファイル名は「./sample-002.exe」でした。 一つ目のコマンドライン引数は「abc」でした。 二つ目のコマンドライン引数は「123」でした。 $
Download : sample-003.c ( utf8 版 )
/* * 2016/06/03 sample-003.c */ /* * 再起の利用 */ #include <stdio.h> /* * triangle ( N ) -- サイズ N の三角を作る */ void triangle ( char *N ) { if ( !strcmp ( N, "" ) ) { /* サイズ 0 の時 */ /* 何もしない */ } else { /* サイズが一般の N の時 */ triangle ( N + 1 ); /* 文字列は 1 を加えると短かくなる */ /* 再起呼び出し */ printf ( N ); /* N を表示 */ printf ( "\n" ); /* 改行 */ } } /* * main 関数 */ int main ( void ) { /* main 関数の引数を利用しないので */ triangle ( "***" ); /* サイズ 3 の三角 */ printf ( "---\n" ); /* 仕切り */ triangle ( "1234567" ); /* サイズ 7 の三角 */ return 0; }
$ ./sample-003.exe * ** *** --- 7 67 567 4567 34567 234567 1234567 $
/* * 2016/06/03 hanoi2.c */ #include <stdio.h> /* * 亀プログラムには、s_hanoi.h が必要 */ #include "s_hanoi.h" /* * ハノイの塔 プログラム * */ int main ( void ) { /* * 最初は "1" に全ての円盤がおいてある */ /* * ハノイで、できること * s_hanoi_set ( char *discs ) : ハノイの塔の高さを設定する * s_hanoi_move ( char *from, char *to ) : from にある円盤を to に移す * s_hanoi_clear () : 最初の状態に戻す * s_hanoi_stop : ハノイプログラムの終了 : return 0 の前に呼び出す */ s_hanoi_init(); s_hanoi_size ( "***" ); // 高さを 7 に設定 putchar ( '>' ); putchar ( getchar() ); /* 1 2 3 -------------------- (1) (2) (3) */ s_hanoi_move ( "1", "2" ); // ディスク 1 を 1 から 2 に移動 s_hanoi_move ( "1", "3" ); // ディスク 2 を 1 から 3 に移動 /* 3 1 2 -------------------- (1) (2) (3) */ putchar ( '>' ); putchar ( getchar() ); s_hanoi_stop(); return 0; }
#include <stdio.h> int main(void) { printf ( "1:" ); putchar ( getchar() ); /* ???????????A??????o????? */ printf ( "\n" ); /* ????????????A?o????A?v?????v?g????? ?s?????????????A????? */ return 0; }
#include <stdio.h> int main(void) { printf ( "1:" ); putchar ( getchar() ); /* ???????????A??????o????? */ printf ( "\n" ); /* ????????????A?o????A?v?????v?g????? ?s?????????????A????? */ getchar(); /* ??????A??s???????? */ printf ( "2:" ); putchar ( getchar() ); /* ???????????A??????o????? */ printf ( "\n" ); /* ????????????A?o????A?v?????v?g????? ?s?????????????A????? */ getchar(); /* ??????A??s???????? */ printf ( "3:" ); putchar ( getchar() ); /* ???????????A??????o????? */ printf ( "\n" ); /* ????????????A?o????A?v?????v?g????? ?s?????????????A????? */ getchar(); /* ??????A??s???????? */ return 0; }
#include <stdio.h> int main(int argc, char *argv[]) { /* ?R?}???h???C????w?????R?}???h???C???? ??????????Aargv ?o?R??A???p????? ??F ../p-004.exe ????.. ../p-004.exe abc 123456 argv[1] argv[2] */ printf ( argv[1] ); /* ?????R?}???h???C???? */ printf ( "\n" ); printf ( argv[2] ); /* ?????R?}???h???C???? */ printf ( "\n" ); /* ????v???O???????A ../p-004.exe abc 123456 ??????A abc 123456 */ return 0; }
/* * 2016/06/03 p-005.c */ #include <stdio.h> /* * 亀プログラムには、s_hanoi.h が必要 */ #include "s_hanoi.h" /* * ハノイの塔 プログラム * */ int main ( int argc, char *argv[] ) { /* * 最初は "1" に全ての円盤がおいてある */ /* * ハノイで、できること * s_hanoi_set ( char *discs ) : ハノイの塔の高さを設定する * s_hanoi_move ( char *from, char *to ) : from にある円盤を to に移す * s_hanoi_clear () : 最初の状態に戻す * s_hanoi_stop : ハノイプログラムの終了 : return 0 の前に呼び出す */ s_hanoi_init(); s_hanoi_size ( argv[1] ); // 高さを 3 に設定 putchar ( '>' ); putchar ( getchar() ); /* 1 2 3 -------------------- (1) (2) (3) */ s_hanoi_move ( "1", "2" ); // ディスク 1 を 1 から 2 に移動 s_hanoi_move ( "1", "3" ); // ディスク 2 を 1 から 3 に移動 /* 3 1 2 -------------------- (1) (2) (3) */ putchar ( '>' ); putchar ( getchar() ); s_hanoi_stop(); return 0; }
#include <stdio.h> int main(int argc, char *argv[]) { /* ?R?}???h???C????w?????R?}???h???C???? ??????????Aargv ?o?R??A???p????? ??F ../p-004.exe ????.. ../p-004.exe abc 123456 argv[1] argv[2] "abc"[1] -> 'b' "abc"[0] -> 'a' */ printf ( argv[0] ); printf ( "\n" ); printf ( argv[1] ); /* ?????R?}???h???C???? */ printf ( "\n" ); printf ( argv[2] ); /* ?????R?}???h???C???? */ printf ( "\n" ); /* ????v???O???????A ../p-004.exe abc 123456 ??????A abc 123456 */ return 0; }
/* * 2016/06/03 p-005.c */ #include <stdio.h> /* * 亀プログラムには、s_hanoi.h が必要 */ #include "s_hanoi.h" /* * ハノイの塔 プログラム * */ int main ( int argc, char *argv[] ) { /* * 最初は "1" に全ての円盤がおいてある */ /* * ハノイで、できること * s_hanoi_set ( char *discs ) : ハノイの塔の高さを設定する * s_hanoi_move ( char *from, char *to ) : from にある円盤を to に移す * s_hanoi_clear () : 最初の状態に戻す * s_hanoi_stop : ハノイプログラムの終了 : return 0 の前に呼び出す */ s_hanoi_init(); s_hanoi_size ( argv[1] ); // 高さを 3 に設定 putchar ( '>' ); putchar ( getchar() ); /* 1 2 3 -------------------- (1) (2) (3) */ s_hanoi_move ( "1", "2" ); // ディスク 1 を 1 から 2 に移動 s_hanoi_move ( "1", "3" ); // ディスク 2 を 1 から 3 に移動 /* 3 1 2 -------------------- (1) (2) (3) */ s_hanoi_move ( "2", "3" ); // ディスク 1 を 2 から 3 に移動 /* 1 3 2 -------------------- (1) (2) (3) */ s_hanoi_move ( "1", "2" ); // ディスク 3 を 1 から 2 に移動 /* 1 3 2 -------------------- (1) (2) (3) */ s_hanoi_move ( "3", "1" ); // ディスク 1 を 3 から 1 に移動 /* 1 3 2 -------------------- (1) (2) (3) */ s_hanoi_move ( "3", "2" ); // ディスク 2 を 3 から 2 に移動 /* 2 1 3 -------------------- (1) (2) (3) */ s_hanoi_move ( "1", "2" ); // ディスク 1 を 1 から 2 に移動 /* 1 2 3 -------------------- (1) (2) (3) */ putchar ( '>' ); putchar ( getchar() ); s_hanoi_stop(); return 0; }
/* * 2016/06/03 p-005.c */ #include <stdio.h> /* * 亀プログラムには、s_hanoi.h が必要 */ #include "s_hanoi.h" /* * ハノイの塔 プログラム * */ int main ( int argc, char *argv[] ) { /* * 最初は "1" に全ての円盤がおいてある */ /* * ハノイで、できること * s_hanoi_set ( char *discs ) : ハノイの塔の高さを設定する * s_hanoi_move ( char *from, char *to ) : from にある円盤を to に移す * s_hanoi_clear () : 最初の状態に戻す * s_hanoi_stop : ハノイプログラムの終了 : return 0 の前に呼び出す */ s_hanoi_init(); s_hanoi_size ( argv[1] ); // 高さを 3 に設定 putchar ( '>' ); putchar ( getchar() ); /* 1 2 3 -------------------- (1) (2) (3) */ /* N = 1 -> 1 = H(1) */ /* N = 2 -> 3 = H(2) */ /* 3 - 1 = 2 */ /* N = 3 -> 7 = H(3) */ /* 7 - 3 = 4 */ /* N = 4 -> 15 = H(4) */ /* ? - 7 = 8 */ /* H(1) + 1 = 2 */ /* H(2) + 1 = 4 */ /* H(3) + 1 = 8 */ /* H(4) + 1 = 16 */ /* H(N) + 1 = 2^N */ /* H(N) = 2^N - 1 */ = 2^(N-1) * 2 - 1 = (2^(N-1) - 1) * 2 + 1 = H(N-1) * 2 + 1 N 段のハノイの塔を解くには、 H(N) だけディスクを動かす それは N-1 段のハノイの塔を二回解いて、あと、一回ディスクを動かすのと同じ 位大変だ */ /* 1 2 3 ------------------ */ s_hanoi_move ( "1", "2" ); // ディスク 1 を 1 から 2 に移動 s_hanoi_move ( "1", "3" ); // ディスク 2 を 1 から 3 に移動 s_hanoi_move ( "2", "3" ); // ディスク 1 を 2 から 3 に移動 /* 1 3 2 ------------------ */ s_hanoi_move ( "1", "2" ); // ディスク 3 を 1 から 2 に移動 /* 1 3 2 ------------------ */ s_hanoi_move ( "3", "1" ); // ディスク 1 を 3 から 1 に移動 s_hanoi_move ( "3", "2" ); // ディスク 2 を 3 から 2 に移動 s_hanoi_move ( "1", "2" ); // ディスク 1 を 1 から 2 に移動 /* 1 2 3 -------------------- (1) (2) (3) */ putchar ( '>' ); putchar ( getchar() ); s_hanoi_stop(); return 0; }
/* * 2016/06/03 p-009.c */ #include <stdio.h> /* * ハノイプログラムには、s_hanoi.h が必要 */ #include "s_hanoi.h" /* * ハノイの塔 プログラム * */ /* hanoi ( N 段を, From, To, Work ) N =========== F T W */ void hanoi(char *N, char *From, char *To, char *Work ) { /* N 段を From, から To へ、 Work を使って移動したい N - 1 段を、From から Work に移動する From から To へ、一つ運ぶ N - 1 段を、Work から、 To に移動する */ if ( !strcmp ( N, "" ) ) { /* */ } else { hanoi ( N + 1, From, Work, To ); s_hanoi_move ( From, To ); hanoi ( N + 1, Work, To, From ); } } int main ( int argc, char *argv[] ) { /* * 最初は "1" に全ての円盤がおいてある */ /* * ハノイで、できること * s_hanoi_set ( char *discs ) : ハノイの塔の高さを設定する * s_hanoi_move ( char *from, char *to ) : from にある円盤を to に移す * s_hanoi_clear () : 最初の状態に戻す * s_hanoi_stop : ハノイプログラムの終了 : return 0 の前に呼び出す */ s_hanoi_init(); s_hanoi_size ( argv[1] ); // 高さを 3 に設定 putchar ( '>' ); putchar ( getchar() ); hanoi ( argv[1], "1", "2", "3" ); putchar ( '>' ); putchar ( getchar() ); s_hanoi_stop(); return 0; }