当日のOHP資料です。
Download : sample-001.c ( SJIS 版 )
/* * 2011/06/10 sample-001.c */ /* * 条件分岐 */ #include <stdio.h> #include "s_print.h" /* * is_negative : 負の数なら負という */ void is_negative ( int n ) { s_print_int ( n ); s_print_string ( " は、負の数で" ); if ( n < 0 ) { /* 0 より小さい整数は「負の数」 */ s_print_string ( "す。" ); } else { /* そうでなければ、「負の数」でない */ s_print_string ( "はありません。" ); } s_print_newline(); } /* * */ int main ( void ) { is_negative ( 10 ); is_negative ( -5 ); is_negative ( 0 ); is_negative ( 3 ); return 0; } /* * */
C:\usr\c\> sample-001 10 は、負の数ではありません。 -5 は、負の数です。 0 は、負の数ではありません。 3 は、負の数ではありません。 C:\usr\c\>
Download : sample-002.c ( SJIS 版 )
/* * 2011/06/10 sample-002.c */ /* * 複数の条件分岐 */ #include <stdio.h> #include "s_print.h" /* * 正負零を識別 */ void sign ( int n ) { s_print_int ( n ); s_print_string ( " は、" ); if ( n < 0 ) { /* 0 より小さい整数は「負の数」 */ s_print_string ( "負の数" ); } else if ( n > 0 ) { /* 0 より大きい整数は「正の数」 */ s_print_string ( "正の数" ); } else { /* その何れでもなければ、「零」 */ s_print_string ( "零" ); } s_print_string ( "です。" ); s_print_newline(); } /* * */ int main ( void ) { sign ( 10 ); sign ( -5 ); sign ( 0 ); sign ( 3 ); return 0; } /* * */
C:\usr\c\> sample-002 10 は、正の数です。 -5 は、負の数です。 0 は、零です。 3 は、正の数です。 C:\usr\c\>
Download : sample-003.c ( SJIS 版 )
/* * 2011/06/10 sample-003.c */ /* * 複数の条件分岐 */ #include <stdio.h> #include "s_print.h" /* * 一桁の素数の倍数か ? */ void factor ( int n ) { s_print_int ( n ); s_print_string ( " は、" ); if ( n % 2 == 0 ) { /* 2 で割った余りが 0 なら 2 の倍数 */ s_print_string ( "2 の倍数" ); } else if ( n % 3 == 0 ) { /* 3 で割った余りが 0 なら 3 の倍数 */ s_print_string ( "3 の倍数" ); } else if ( n % 5 == 0 ) { /* 5 で割った余りが 0 なら 5 の倍数 */ s_print_string ( "5 の倍数" ); } else if ( n % 7 == 0 ) { /* 7 で割った余りが 0 なら 7 の倍数 */ s_print_string ( "7 の倍数" ); } else { /* その何れでもなければ、一桁の素数の倍数 */ s_print_string ( "一桁の素数の倍数ではない" ); } s_print_string ( "です。" ); s_print_newline(); } /* * factor_i_to_n */ void factor_i_to_n ( int i, int n ) { if ( i > n ) { /* すでに n まで書いた */ /* なにもする事はない */ } else { /* まだやることがある */ factor ( i ); /* とりあえず i の処理 */ factor_i_to_n ( i + 1, n ); /* 残りは再帰で */ } } /* * */ int main ( void ) { factor_i_to_n ( 10, 99 ); /* 10 〜 99 の間で、一桁の素数の倍数かどうかを調べる */ return 0; } /* * */
C:\usr\c\> sample-003 10 は、2 の倍数です。 11 は、一桁の素数の倍数ではないです。 12 は、2 の倍数です。 13 は、一桁の素数の倍数ではないです。 14 は、2 の倍数です。 15 は、3 の倍数です。 16 は、2 の倍数です。 17 は、一桁の素数の倍数ではないです。 18 は、2 の倍数です。 19 は、一桁の素数の倍数ではないです。 20 は、2 の倍数です。 21 は、3 の倍数です。 22 は、2 の倍数です。 23 は、一桁の素数の倍数ではないです。 24 は、2 の倍数です。 25 は、5 の倍数です。 26 は、2 の倍数です。 27 は、3 の倍数です。 28 は、2 の倍数です。 29 は、一桁の素数の倍数ではないです。 30 は、2 の倍数です。 31 は、一桁の素数の倍数ではないです。 32 は、2 の倍数です。 33 は、3 の倍数です。 34 は、2 の倍数です。 35 は、5 の倍数です。 36 は、2 の倍数です。 37 は、一桁の素数の倍数ではないです。 38 は、2 の倍数です。 39 は、3 の倍数です。 40 は、2 の倍数です。 41 は、一桁の素数の倍数ではないです。 42 は、2 の倍数です。 43 は、一桁の素数の倍数ではないです。 44 は、2 の倍数です。 45 は、3 の倍数です。 46 は、2 の倍数です。 47 は、一桁の素数の倍数ではないです。 48 は、2 の倍数です。 49 は、7 の倍数です。 50 は、2 の倍数です。 51 は、3 の倍数です。 52 は、2 の倍数です。 53 は、一桁の素数の倍数ではないです。 54 は、2 の倍数です。 55 は、5 の倍数です。 56 は、2 の倍数です。 57 は、3 の倍数です。 58 は、2 の倍数です。 59 は、一桁の素数の倍数ではないです。 60 は、2 の倍数です。 61 は、一桁の素数の倍数ではないです。 62 は、2 の倍数です。 63 は、3 の倍数です。 64 は、2 の倍数です。 65 は、5 の倍数です。 66 は、2 の倍数です。 67 は、一桁の素数の倍数ではないです。 68 は、2 の倍数です。 69 は、3 の倍数です。 70 は、2 の倍数です。 71 は、一桁の素数の倍数ではないです。 72 は、2 の倍数です。 73 は、一桁の素数の倍数ではないです。 74 は、2 の倍数です。 75 は、3 の倍数です。 76 は、2 の倍数です。 77 は、7 の倍数です。 78 は、2 の倍数です。 79 は、一桁の素数の倍数ではないです。 80 は、2 の倍数です。 81 は、3 の倍数です。 82 は、2 の倍数です。 83 は、一桁の素数の倍数ではないです。 84 は、2 の倍数です。 85 は、5 の倍数です。 86 は、2 の倍数です。 87 は、3 の倍数です。 88 は、2 の倍数です。 89 は、一桁の素数の倍数ではないです。 90 は、2 の倍数です。 91 は、7 の倍数です。 92 は、2 の倍数です。 93 は、3 の倍数です。 94 は、2 の倍数です。 95 は、5 の倍数です。 96 は、2 の倍数です。 97 は、一桁の素数の倍数ではないです。 98 は、2 の倍数です。 99 は、3 の倍数です。 C:\usr\c\>
Download : sample-004.c ( SJIS 版 )
/* * 2011/06/10 sample-004.c */ /* * 世界のナベアツ */ #include <stdio.h> #include "s_print.h" /* * */ void nabeatsu ( int n ) { if ( n % 3 == 0 ) { /* 3 の倍数なので.. */ s_print_string ( "アホ" ); } else if ( n % 10 == 3 ) { /* 一桁目が 3 の倍数なので.. */ s_print_string ( "アホ" ); } else if ( ( n / 10 ) % 10 == 3 ) { /* 二桁桁目が 3 の倍数なので.. */ s_print_string ( "アホ" ); } else if ( ( n / 100 ) % 10 == 3 ) { /* 三桁目が 3 の倍数なので.. */ s_print_string ( "アホ" ); } else { /* 四桁目も考えられるが、そこまでは芸は続けられないだろうから.. */ s_print_int ( n ); } } /* * i から n までを「ナベアツ」する */ void nabeatsu_i_to_n ( int i, int n ) { if ( i > n ) { /* すでに n まで書いた */ /* なにもする事はない */ } else { /* まだやることがある */ nabeatsu ( i ); /* とりあえず i のナベアツ */ s_print_string ( " " ); /* 隙間をあける */ nabeatsu_i_to_n ( i + 1, n ); /* 残りは再帰で */ } } /* * */ int main ( void ) { nabeatsu_i_to_n ( 1, 100 ); s_print_newline(); return 0; } /* * */
C:\usr\c\> sample-004 1 2 アホ 4 5 アホ 7 8 アホ 10 11 アホ アホ 14 アホ 16 17 アホ 19 20 アホ 22 アホ アホ \ 25 26 アホ 28 29 アホ アホ アホ アホ アホ アホ アホ アホ アホ アホ 40 41 アホ アホ 44 \ アホ 46 47 アホ 49 50 アホ 52 アホ アホ 55 56 アホ 58 59 アホ 61 62 アホ 64 \ 65 アホ 67 68 アホ 70 71 アホ アホ 74 アホ 76 77 アホ 79 80 アホ 82 アホ アホ \ 85 86 アホ 88 89 アホ 91 92 アホ 94 95 アホ 97 98 アホ 100 C:\usr\c\>
Download : sample-005.c ( SJIS 版 )
/* * 2011/06/10 sample-005.c */ /* * 多条件分岐 * トランプのカードの出力 ( else if 版 ) */ #include <stdio.h> #include "s_print.h" /* * print_card */ void print_card ( int card ) { if ( card == 1 ) { /* card == 1 の時 */ s_print_string ( "A" ); /* 'A' エースを出力 */ } else if ( card == 2 ) { /* card == 2 の時 */ s_print_int ( card ); /* 2 〜 10 の場合は、card 自身を出力 */ } else if ( card == 3 ) { s_print_int ( card ); } else if ( card == 4 ) { s_print_int ( card ); } else if ( card == 5 ) { s_print_int ( card ); } else if ( card == 6 ) { s_print_int ( card ); } else if ( card == 7 ) { s_print_int ( card ); } else if ( card == 8 ) { s_print_int ( card ); } else if ( card == 9 ) { s_print_int ( card ); } else if ( card == 10 ) { s_print_int ( card ); } else if ( card == 11 ) { s_print_string ( "J" ); } else if ( card == 12 ) { s_print_string ( "Q" ); } else if ( card == 13 ) { s_print_string ( "K" ); } else { /* その他 ( 1 〜 13 以外 ) の場合 */ s_print_string ( "?" ); /* "?" を出力 */ } } /* * i から n までのカードを出力 */ void print_card_i_to_n ( int i, int n ) { if ( i > n ) { /* すでに n まで書いた */ /* なにもする事はない */ } else { /* まだやることがある */ s_print_int ( i ); /* とりあえず i のプリント */ s_print_string ( " : " ); print_card ( i ); s_print_newline(); print_card_i_to_n ( i + 1, n ); /* 残りは再帰で */ } } /* * */ int main ( void ) { print_card_i_to_n ( 1, 13 ); return 0; }
C:\usr\c\> sample-005 1 : A 2 : 2 3 : 3 4 : 4 5 : 5 6 : 6 7 : 7 8 : 8 9 : 9 10 : 10 11 : J 12 : Q 13 : K C:\usr\c\>
Download : sample-006.c ( SJIS 版 )
/* * 2011/06/10 sample-006.c */ /* * 多条件分岐 * トランプのカードの出力 ( switch 版 ) */ #include <stdio.h> #include "s_print.h" /* * */ void print_card ( int card ) { switch ( card ) { /* card の値によって多重分岐する */ case 1: /* card == 1 の時 */ s_print_string ( "A" ); /* 'A' エースを出力 */ break; /* card == 1 の時を終了するためには break が必要 */ case 2: /* card == 2 の時 */ case 3: /* card == 3 の時 : 以下 10 までは同じコードよい */ case 4: case 5: case 6: case 7: case 8: case 9: case 10: s_print_int ( card ); /* 2 〜 10 の場合は、card 自身を出力 */ break; /* card == 1 の時を終了するためには break が必要 */ case 11: s_print_string ( "J" ); break; case 12: s_print_string ( "Q" ); break; case 13: s_print_string ( "K" ); break; default: /* その他 ( 1 〜 13 以外 ) の場合 */ s_print_string ( "?" ); /* "?" を出力 */ break; } } /* * i から n までのカードを出力 */ void print_card_i_to_n ( int i, int n ) { if ( i > n ) { /* すでに n まで書いた */ /* なにもする事はない */ } else { /* まだやることがある */ s_print_int ( i ); /* とりあえず i のプリント */ s_print_string ( " : " ); print_card ( i ); s_print_newline(); print_card_i_to_n ( i + 1, n ); /* 残りは再帰で */ } } /* * */ int main ( void ) { print_card_i_to_n ( 1, 13 ); return 0; }
C:\usr\c\> sample-006 1 : A 2 : 2 3 : 3 4 : 4 5 : 5 6 : 6 7 : 7 8 : 8 9 : 9 10 : 10 11 : J 12 : Q 13 : K C:\usr\c\>
Download : sample-007.c ( SJIS 版 )
/* * 2011/06/10 sample-007.c */ /* * 整数の表現 ( n 進数 ) */ #include <stdio.h> #include "s_print.h" /* * */ void n3_print ( int n, int base ) { if ( n < base ) { s_print_string ( " " ); /* 1桁なので空白を二つ追加 */ } else if ( n < base * base ) { s_print_string ( " " ); /* 2桁なので空白を一つ追加 */ } switch ( base ) { case 8: s_print_oct ( n ); /* 八進数 */ break; case 16: s_print_hex ( n ); /* 十六進数 */ break; default: case 10: s_print_int ( n ); /* 十進数 */ break; } } void n_print ( int n ) { n3_print ( n, 10 ); s_print_string ( " " ); n3_print ( n, 16 ); s_print_string ( " " ); n3_print ( n, 8 ); s_print_string ( "\n" ); } /* * i から n までを出力する */ void print_i_to_n ( int i, int n ) { if ( i > n ) { /* すでに n まで書いた */ /* なにもする事はない */ } else { /* まだやることがある */ n_print ( i ); /* とりあえず i の表示 */ print_i_to_n ( i + 1, n ); /* 残りは再帰で */ } } void print_0_to_n ( int n ) { printf ( " 10 16 8\n" ); print_i_to_n ( 0, n ); } /* * */ int main ( void ) { print_0_to_n ( 200 ); /* 0 から 200 までの表を作る */ return 0; }
C:\usr\c\> sample-007 10 16 8 0 0 0 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 6 6 6 7 7 7 8 8 10 9 9 11 10 a 12 11 b 13 12 c 14 13 d 15 14 e 16 15 f 17 16 10 20 17 11 21 18 12 22 19 13 23 20 14 24 21 15 25 22 16 26 23 17 27 24 18 30 25 19 31 26 1a 32 27 1b 33 28 1c 34 29 1d 35 30 1e 36 31 1f 37 32 20 40 33 21 41 34 22 42 35 23 43 36 24 44 37 25 45 38 26 46 39 27 47 40 28 50 41 29 51 42 2a 52 43 2b 53 44 2c 54 45 2d 55 46 2e 56 47 2f 57 48 30 60 49 31 61 50 32 62 51 33 63 52 34 64 53 35 65 54 36 66 55 37 67 56 38 70 57 39 71 58 3a 72 59 3b 73 60 3c 74 61 3d 75 62 3e 76 63 3f 77 64 40 100 65 41 101 66 42 102 67 43 103 68 44 104 69 45 105 70 46 106 71 47 107 72 48 110 73 49 111 74 4a 112 75 4b 113 76 4c 114 77 4d 115 78 4e 116 79 4f 117 80 50 120 81 51 121 82 52 122 83 53 123 84 54 124 85 55 125 86 56 126 87 57 127 88 58 130 89 59 131 90 5a 132 91 5b 133 92 5c 134 93 5d 135 94 5e 136 95 5f 137 96 60 140 97 61 141 98 62 142 99 63 143 100 64 144 101 65 145 102 66 146 103 67 147 104 68 150 105 69 151 106 6a 152 107 6b 153 108 6c 154 109 6d 155 110 6e 156 111 6f 157 112 70 160 113 71 161 114 72 162 115 73 163 116 74 164 117 75 165 118 76 166 119 77 167 120 78 170 121 79 171 122 7a 172 123 7b 173 124 7c 174 125 7d 175 126 7e 176 127 7f 177 128 80 200 129 81 201 130 82 202 131 83 203 132 84 204 133 85 205 134 86 206 135 87 207 136 88 210 137 89 211 138 8a 212 139 8b 213 140 8c 214 141 8d 215 142 8e 216 143 8f 217 144 90 220 145 91 221 146 92 222 147 93 223 148 94 224 149 95 225 150 96 226 151 97 227 152 98 230 153 99 231 154 9a 232 155 9b 233 156 9c 234 157 9d 235 158 9e 236 159 9f 237 160 a0 240 161 a1 241 162 a2 242 163 a3 243 164 a4 244 165 a5 245 166 a6 246 167 a7 247 168 a8 250 169 a9 251 170 aa 252 171 ab 253 172 ac 254 173 ad 255 174 ae 256 175 af 257 176 b0 260 177 b1 261 178 b2 262 179 b3 263 180 b4 264 181 b5 265 182 b6 266 183 b7 267 184 b8 270 185 b9 271 186 ba 272 187 bb 273 188 bc 274 189 bd 275 190 be 276 191 bf 277 192 c0 300 193 c1 301 194 c2 302 195 c3 303 196 c4 304 197 c5 305 198 c6 306 199 c7 307 200 c8 310 C:\usr\c\>
Download : sample-008.c ( SJIS 版 )
/* * 2011/06/10 sample-008.c */ /* * 「整数値(文字コード)」を利用して「文字」表示を行う * cf. http://e-words.jp/p/r-ascii.html */ #include <stdio.h> #include "s_print.h" /* * main */ int main ( void ) { /* * ASCII Code 表で 'A' の文字を調べる */ s_print_char( 65 ); /* 整数値の 65 は、ASCII コードで 'A' を表す */ s_print_newline(); /* 改行 */ /* * SJIS の対応表で '漢' の文字を調べる */ s_print_char( 0x8a ); /* 「漢」(0x8ABF)の 1 byte 目 */ s_print_char( 0xbf ); /* 「漢」(0x8ABF)の 2 byte 目 */ s_print_newline(); /* 改行 */ return 0; } /* * */
C:\usr\c\> sample-008 A ?? C:\usr\c\>
Download : sample-009.c ( SJIS 版 )
/* * 2011/06/10 sample-009.c */ /* * 「シングルクォート」を利用して「文字」を表現する */ #include <stdio.h> #include "s_print.h" /* * main */ int main ( void ) { s_print_int( 'A' ); /* 'A' は ASCII Code 表の 'A' に対応した、ASCII Code (整数値) 65 \ を意味する */ s_print_newline(); /* 改行 */ s_print_char( 'A' ); /* 'A' を使えば、簡単に 'A' が表示できる */ s_print_newline(); /* 改行 */ /* この方法は、漢字には使えない.. */ s_print_newline(); /* 改行 */ return 0; } /* * */
C:\usr\c\> sample-009 65 A C:\usr\c\>
Download : sample-010.c ( SJIS 版 )
/* * 2011/06/10 sample-010.c */ /* * 「文字コード」の計算 */ #include <stdio.h> #include "s_print.h" /* * main */ int main ( void ) { s_print_char ( 'A' ); /* 'A' を出力 */ s_print_newline(); s_print_int ( 'A' ); /* 'A' の ASCII Code */ s_print_newline(); s_print_int ( 'A' + 1 ); /* 'A' の ASCII Code + 1 は.. */ s_print_newline(); s_print_char ( 'A' + 1 ); /* 'B' の ASCII Code になるので .. */ s_print_newline(); return 0; } /* * */
C:\usr\c\> sample-010 A 65 66 B C:\usr\c\>
Download : sample-011.c ( SJIS 版 )
/* * 2011/06/10 sample-011.c */ /* * 「文字コード」で情報処理 */ #include <stdio.h> #include "s_print.h" /* * print_lower ( 小文字に変換するして出力 ) */ void print_lower ( char ch ) { s_print_char ( ch - 'A' + 'a' ); /* 小文字に変換して出力 */ } /* * print_upper ( 大文字に変換するして出力 ) */ void print_upper ( char ch ) { s_print_char ( ch - 'a' + 'A' ); /* 大文字に変換して出力 */ } /* * main */ int main ( void ) { s_print_char ( 'H' ); /* 普通に大文字を出力 */ s_print_newline(); print_lower ( 'H' ); /* 大文字を小文字に変換して出力 */ s_print_newline(); s_print_char ( 'j' ); /* 普通に小文字を出力 */ s_print_newline(); print_upper ( 'j' ); /* 小文字を大文字に変換して出力 */ s_print_newline(); return 0; } /* * */
C:\usr\c\> sample-011 H h j J C:\usr\c\>
Download : sample-012.c ( SJIS 版 )
/* * 2011/06/10 sample-012.c */ /* * 「文字コード」の計算 */ #include <stdio.h> #include "s_print.h" /* * i から n までの整数値で示される文字コードに対応する文字を出力 */ void print_char_i_to_n ( int i, int n ) { if ( i > n ) { /* すでに n まで書いた */ /* なにもする事はない */ } else { /* まだやることがある */ s_print_char ( i ); /* とりあえず i の表示 */ print_char_i_to_n ( i + 1, n ); /* 残りは再帰で */ } } /* * main */ int main ( void ) { print_char_i_to_n ( 'A', 'Z' ); /* 英大文字 ( 'A' 〜 'Z' ) を出力 */ /* これらが ASCII Code 表で「並んでいる」事がポイント */ s_print_newline(); print_char_i_to_n ( 'a', 'z' ); /* 今度は英大小文字 ( 'a' 〜 'z' ) を出力 */ /* やはり ASCII Code 表で「並んでいる」事がポイント */ s_print_newline(); print_char_i_to_n ( '0', '9' ); /* 数字 (数値ではない !!) */ s_print_newline(); return 0; } /* * */
C:\usr\c\> sample-012 ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz 0123456789 C:\usr\c\>
Download : sample-013.c ( SJIS 版 )
/* * 2011/06/10 sample-013.c */ #include <stdio.h> #include "s_print.h" /* * a と b の和を計算する */ int addition ( int n, int m ) { return n + m; /* n と m を加えた和を「関数の値」として「返す」 */ } /* * */ main() { s_print_int ( addition ( 3, 4 ) ); /* 返された値を利用する事ができる */ s_print_newline(); } /* * */
C:\usr\c\> sample-013 7 C:\usr\c\>
Download : sample-014.c ( SJIS 版 )
/* * 2011/06/10 sample-014.c */ #include <stdio.h> #include "s_print.h" /* * sum ( n ) : sum of 1 to n */ int sum ( int n ) { if ( n == 0 ) { /* n が 0 の時 */ return 0; /* sum 0 = 0 */ } else { /* その他の場合 */ return sum ( n - 1 ) + n; /* sum(n) = sum(n-1) + n */ } } /* * */ main() { s_print_string ( "sum 4 = " ); s_print_int ( sum ( 4 ) ); s_print_newline(); s_print_string ( "sum 50 = " ); s_print_int ( sum ( 50 ) ); s_print_newline(); } /* * */
C:\usr\c\> sample-014 sum 4 = 10 sum 50 = 1275 C:\usr\c\>
Download : sample-015.c ( SJIS 版 )
/* * 2011/06/10 sample-015.c */ #include <stdio.h> #include "s_print.h" /* * Fibonacci */ int fib ( int n ) { switch ( n ) { case 1: case 2: return 1; /* fib 1 = fib 2 = 1 */ break; default: return fib ( n - 1 ) + fib ( n - 2 ); /* fib( n ) = fib( n - 1 ) + fib( n - 2 ) */ break; } } /* * */ main() { s_print_string ( "fib(" ); s_print_int ( 2 ); s_print_string ( ")=" ); s_print_int ( fib ( 2 ) ); s_print_newline(); s_print_string ( "fib(" ); s_print_int ( 7 ); s_print_string ( ")=" ); s_print_int ( fib ( 7 ) ); s_print_newline(); s_print_string ( "fib(" ); s_print_int ( 10 ); s_print_string ( ")=" ); s_print_int ( fib ( 10 ) ); s_print_newline(); } /* * */
C:\usr\c\> sample-015 fib(2)=1 fib(7)=13 fib(10)=55 C:\usr\c\>
Download : sample-016.c ( SJIS 版 )
/* * 2011/06/10 sample-016.c */ #include <stdio.h> #include <stdlib.h> /* rand を使うために必要 */ #include "s_print.h" /* * main */ main() { 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-016 1804289383 846930886 1681692777 1714636915 C:\usr\c\>
Download : sample-017.c ( SJIS 版 )
/* * 2011/06/10 sample-017.c */ #include <stdio.h> #include <stdlib.h> /* rand を使うために必要 */ #include "s_print.h" /* * saikoro */ int saikoro() { return rand() % 6 + 1; /* 6 で割った余りは 0 〜 5, これに 1 を加えれば 1 〜 6 になる */ } /* * main */ main() { 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-017 2 5 4 2 C:\usr\c\>
Download : sample-018.c ( SJIS 版 )
/* * 2011/06/10 sample-018.c */ #include <stdio.h> #include "s_print.h" #include "s_input.h" /* 入力のために必要 */ /* * main */ main() { 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 x
C:\usr\c\> sample-018 整数をキーボードから入力して、改行キーを押してください : 123 文字をキーボードから入力して、改行キーを押してください : x C:\usr\c\>
Download : sample-019.c ( SJIS 版 )
/* * 2011/06/10 sample-019.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 */ main() { s_print_string ( "一つ目の整数をキーボードから入力して、改行キーを押してください : " ); s_print_int ( input_add ( s_input_int() ) ); s_print_newline(); return 0; } /* * */
123 380
C:\usr\c\> sample-019 一つ目の整数をキーボードから入力して、改行キーを押してください : \ 整数をキーボードから加える数を入力して、改行キーを押してください : 503 C:\usr\c\>
Download : sample-020.c ( SJIS 版 )
/* * 2011/06/10 sample-020.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 */ main() { s_print_string ( "1 〜 1000 の数を予想してください\n" ); min_max_game ( rand() % 1000 + 1, 1 ); return 0; } /* * */
C:\usr\c\> sample-020 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 : 20110610-01.c ( SJIS 版 )
/* * 20110610-1-QQQQ.c * Fizz Buzz */ #include <stdio.h> #include "s_print.h" /* * <a href="http://ja.wikipedia.org/wiki/Fizz_Buzz"> Fizz Buzz (フィズ・バズ) </a> * 最初は「1」と数値を発言。次は次の数値を発言。 * ただし、3で割り切れる場合は 「Fizz」、 * 5で割り切れる場合は 「Buzz」、 * 両者で割り切れる場合は 「Fizz Buzz」を数値の代わりに発言しなければならない。 */ void fizz_buzz ( int n ) { if ( n % 3 == 0 ) { /* 3 で割切れた */ if ( /* q:ここ */ ) { /* 更に 5 で割切れた */ /* ** この部分を完成させなさい */ } else { /* 3 で割れるが 5 で割切れないので.. */ s_print_string ( "Fizz" ); /* Fizz だけでよい */ } } else if ( /* q:ここ */ ) { /* 3 で割切れずに 5 で割切れたので.. */ /* ** この部分を完成させなさい */ } else { /* いずれでもなければ、3, 5 共に割切れない */ s_print_int ( n ); } } /* * fizz_buzz_i_to_n */ void fizz_buzz_i_to_n ( int i, int n ) { if ( i > n ) { /* すでに n まで書いた */ /* なにもする事はない */ } else { /* まだやることがある */ fizz_buzz ( i ); /* とりあえず i の処理 */ s_print_string ( " " ); /* 隙間 */ /* ** この部分を完成させなさい */ } } /* * main */ int main() { fizz_buzz_i_to_n ( 1, 100 ); s_print_newline(); return 0; } /* * */
C:\usr\c\> 20110610-01 1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 Fizz Buzz 16 17 \ Fizz 19 Buzz Fizz 22 23 Fizz Buzz 26 Fizz 28 29 Fizz Buzz 31 \ 32 Fizz 34 Buzz Fizz 37 38 Fizz Buzz 41 Fizz 43 44 Fizz Buzz \ 46 47 Fizz 49 Buzz Fizz 52 53 Fizz Buzz 56 Fizz 58 59 Fizz \ Buzz 61 62 Fizz 64 Buzz Fizz 67 68 Fizz Buzz 71 Fizz 73 74 \ Fizz Buzz 76 77 Fizz 79 Buzz Fizz 82 83 Fizz Buzz 86 Fizz 88 \ 89 Fizz Buzz 91 92 Fizz 94 Buzz Fizz 97 98 Fizz Buzz C:\usr\c\>
Download : 20110610-02.c ( SJIS 版 )
/* * 20210610-2-QQQQ.c * 文字コードを利用して "Hello, World 「自分の名前」" を表示するプログラム */ #include <stdio.h> #include "s_print.h" /* * 文字コードを利用して "Hello, World 「自分の名前」" を表示するプログラム */ int main() { s_print_char ( 0x48 ); /* 'H' */ s_print_char ( 0x65 ); /* 'e' */ s_print_char ( 0x6c ); /* 'l' */ s_print_char ( 0x6c ); /* 'l' */ /* ** この部分を完成させなさい */ s_print_char ( 0x6f ); /* 'o' */ s_print_char ( 0x72 ); /* 'r' */ s_print_char ( 0x6c ); /* 'l' */ s_print_char ( 0x64 ); /* 'd' */ s_print_char ( 0x20 ); /* ' ' */ /* ** この部分を完成させなさい */ s_print_newline(); return 0; }
C:\usr\c\> 20110610-02 Hello, World 栗野俊一 C:\usr\c\>
Download : 20110610-03.c ( SJIS 版 )
/* * 20110610-3-QQQQ.c * rem function */ #include <stdio.h> #include "s_print.h" /* * rem : calc ( n mod m ) */ int rem ( int n, int m ) { /* ** この部分を完成させなさい */ } /* * main */ int main() { s_print_string ( "10 mod 4 = " ); s_print_int ( rem ( 10, 4 ) ); s_print_newline(); s_print_string ( "10 mod 3 = " ); s_print_int ( rem ( 10, 3 ) ); s_print_newline(); s_print_string ( "10 mod 2 = " ); s_print_int ( rem ( 10, 2 ) ); s_print_newline(); return 0; }
C:\usr\c\> 20110610-03 10 mod 4 = 2 10 mod 3 = 1 10 mod 2 = 0 C:\usr\c\>
この表は、実際はASCII Codeではなく、それを包含した、「JIS X 0201」という規格( cf. JIS X 0201)。ASCII Codeでは、文字コードを7 bitで表現し、残りの1 bitはパリティビットとして利用するので、文字コードに対応するのは0x00〜0x7f (16進数表現)だけである。
これは、ASCII Codeが通信用の符号(Infromation Interchange)であり、エラー検出を必要としたからである。また、0x00〜0x1fの範囲に入るのは「文字コード」ではなく、「制御コード」である。改行がCR(Carriage Return)とLF(Line Feed)の二つからなる(4)JIS_X_0201は、後半の0x80〜0xffの範囲に「半角カナ」などが入り、更にバックスラッシュ(「\」)が円マーク(「¥」)に、チルダ(「〜」)が、ダッシュ(「−」)になっている。
コンピュータで、文字を扱うためには、何らかの形で、コーディング(符号化)を行う必要がある。
コンピュータの発達が、アメリカで進んだという理由から、いわゆる、英数記号文字(半角文字)に関しては、一つの文字を1 byteで表現するASCIIコードが標準として、採用され、事実上、これが世界標準となっている。
しかし、漢字などの文字種が多い日本語では、1 byteで表現可能な文字数256では当然の事ながら表現しきれない。そこで、考えられたのが、「JIS Code ( JIS X 0208) :全角文字」だったが、これは、これだけで日本で利用される文字を表現しようとしたために、文字種として、ASCIIと重なっていた(いわゆる、全角文字と半角文字の問題.. )だけでなく、文字コード(の数値)としても重なっていたために、ASCIIと併用する事ができなかった。
そこで、ASCIIとJIS Codeを併用するための様々な試みがあり、その結果がSJIS, UJIS, ISO-2022-JP ( JIS SI/SO )というコード規格の乱立だった。
現在は、日本語文字だけでなく、世界中の文字を一つの文字コード体系で、表現しようとするUnicodeが策定され、利用されるようになってきている。