当日のOHP資料です。
makefile :本日の演習用の資料( c:\usr\c\20120608(1)に保存する)
今日の"s_print.h"を使うプログラムは、20120608フォルダ内に作成する。
C:\usr\c\20120608> make foobar.exe C:\usr\c\20120608>
makeを使わないでccでやりたい場合は次のように「-I」オプションで、headerファイル(この場合はs_print.h )があるフォルダを指定する必要がある。
C:\usr\c\20120608> cc -Ic:\usr\c\include foobar.exe foobar.c C:\usr\c\20120608>
Download : sample-001.c ( SJIS 版 )
/* * 2012/06/08 sample-001.c */ /* * 関数を利用しない場合 (各国語で、挨拶を二回ずつ繰り返す) */ #include <stdio.h> void main ( void ) { printf ( "Hello, World\n" ); printf ( "Hello, World\n" ); printf ( "こんにちは、皆さん\n" ); printf ( "こんにちは、皆さん\n" ); printf ( "ニーハオ、ダァジァハァオ\n" ); printf ( "ニーハオ、ダァジァハァオ\n" ); }
C:\usr\c>sample-001 Hello, World Hello, World こんにちは、皆さん こんにちは、皆さん ニーハオ、ダァジァハァオ ニーハオ、ダァジァハァオ C:\usr\c>
Download : sample-002.c ( SJIS 版 )
/* * 2012/06/08 sample-003.c */ /* * 各国語毎に関数を作成 */ #include <stdio.h> void english ( void ) { printf ( "Hello, World\n" ); printf ( "Hello, World\n" ); } void japanese ( void ) { printf ( "こんにちは、皆さん\n" ); printf ( "こんにちは、皆さん\n" ); } void chainese ( void ) { printf ( "ニーハオ、ダァジァハァオ\n" ); printf ( "ニーハオ、ダァジァハァオ\n" ); } void main ( void ) { english(); japanese(); chainese(); }
C:\usr\c>sample-002 Hello, World Hello, World こんにちは、皆さん こんにちは、皆さん ニーハオ、ダァジァハァオ ニーハオ、ダァジァハァオ C:\usr\c>
Download : sample-003.c ( SJIS 版 )
/* * 2012/06/08 sample-003.c */ /* * 挨拶を二回繰り返すという、引数付の関数を作る */ #include <stdio.h> void sayTwice ( char *hello ) { printf ( hello ); printf ( hello ); } void english ( void ) { sayTwice ( "Hello, World\n" ); } void japanese ( void ) { sayTwice ( "こんにちは、皆さん\n" ); } void chainese ( void ) { sayTwice ( "ニーハオ、ダァジァハァオ\n" ); } void main ( void ) { english(); japanese(); chainese(); }
C:\usr\c>sample-003 Hello, World Hello, World こんにちは、皆さん こんにちは、皆さん ニーハオ、ダァジァハァオ ニーハオ、ダァジァハァオ C:\usr\c>
Download : sample-004.c ( SJIS 版 )
/* * 2012/06/08 sample-004.c */ /* * 文字「a」を出力する */ #include <stdio.h> void main ( void ) { putchar ( 'a' ); /* 「a」という「文字」を画面に出力 */ }
C:\usr\c>sample-004 aC:\usr\c>
Download : sample-005.c ( SJIS 版 )
/* * 2012/06/08 sample-005.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-005 Hello, World C:\usr\c>
Download : sample-006.c ( SJIS 版 )
/* * 2012/06/08 sample-006.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-006 「\」 を出すには 「'\\'」とする ==> \ 「'」を出すには 「'\''」とする ==> ' 「ビープ音」を出すには 「'\a'」とする ==> 「"」を出すには 「'"'」だけでよい ==> " C:\usr\c>
Download : sample-007.c ( SJIS 版 )
/* * 2012/06/08 sample-007.c */ /* * 文字列 */ #include <stdio.h> void main ( void ) { printf ( "文字列\n" ); /* 「文字列」+「改行」が表示される */ }
C:\usr\c>sample-007 文字列 C:\usr\c>
Download : sample-008.c ( SJIS 版 )
/* * 2012/06/08 sample-008.c */ /* * 文字列の中のエスケープコード */ #include <stdio.h> void main ( void ) { printf ( "エスケープコード(「\\」)の扱いは、基本文字と同じ\n" ); printf ( "「\\」と出力したければ、「\\\\」とかけばよい\n" ); printf ( "文字では「'」を出すのに「\\'」としたが文字列では「'」で良い\n" ); printf ( "その代わりに文字列では「\"」を出すのには「\\\"」する必要がある\n" ); }
C:\usr\c>sample-008 エスケープコード(「\」)の扱いは、基本文字と同じ 「\」と出力したければ、「\\」とかけばよい 文字では「'」を出すのに「\'」としたが文字列では「'」で良い その代わりに文字列では「"」を出すのには「\"」する必要がある C:\usr\c>
Download : sample-009.c ( SJIS 版 )
/* * 2012/06/08 sample-009.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-009 "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>
Download : sample-010.c ( SJIS 版 )
/* * 2012/06/08 sample-010.c */ /* * 仮引数の型宣言と実引数の型 */ #include <stdio.h> void tenChar ( char x ) { /* 文字を 10 回出力する */ /* 引数(x)は「文字列」ではなく、「文字」なので「char」で宣言する */ putchar ( x ); /* 「char」型(文字型) なので putchar を使う */ putchar ( x ); putchar ( x ); putchar ( x ); putchar ( x ); putchar ( x ); putchar ( x ); putchar ( x ); putchar ( x ); putchar ( x ); } void tenString ( char *x ) { /* 文字列を 10 回出力する */ /* 引数(x)は「文字列」なので「char *」で宣言する */ printf ( x ); /* 「char *」型(文字列型) なので printf を使う */ printf ( x ); printf ( x ); printf ( x ); printf ( x ); printf ( x ); printf ( x ); printf ( x ); printf ( x ); printf ( x ); } void main ( void ) { printf ( "'a' を 10 回、出力する\n" ); tenChar ( 'a' ); printf ( "\n" ); printf ( "\"a\" を 10 回、出力する\n" ); tenString ( "a" ); printf ( "\n" ); /* tenChar ( "a" ) とか tenString ( 'a' ) とすると.. ? */ }
C:\usr\c>sample-010 'a' を 10 回、出力する aaaaaaaaaa "a" を 10 回、出力する aaaaaaaaaa C:\usr\c>
Download : sample-011.c ( SJIS 版 )
/* * 2012/06/08 sample-009.c */ /* * 文字列の計算 */ #include <stdio.h> void tenChar ( char x ) { /* 文字を 10 回出力する */ /* 引数(x)は「文字列」ではなく、「文字」なので「char」で宣言する */ */ putchar ( x ); /* 「char」型(文字型) なので putchar を使う */ putchar ( x ); putchar ( x ); putchar ( x ); putchar ( x ); putchar ( x ); putchar ( x ); putchar ( x ); putchar ( x ); putchar ( x ); } void tenString ( char *x ) { /* 文字列を 10 回出力する */ /* 引数(x)は「文字列」なので「char *」で宣言する */ */ printf ( x ); /* 「char *」型(文字列型) なので printf を使う */ printf ( x ); printf ( x ); printf ( x ); printf ( x ); printf ( x ); printf ( x ); printf ( x ); printf ( x ); printf ( x ); } void main ( void ) { printf ( "'a' を 10 回、出力する\n" ); tenChar ( 'a' ); printf ( "\n" ); printf ( "\"a\" を 10 回、出力する\n" ); tenString ( "a" ); printf ( "\n" ); /* tenChar ( "a" ) とか tenString ( 'a' ) とすると.. ? */ }
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>
Download : sample-101.c ( SJIS 版 )
/* * 2012/06/08 sample-001.c */ /* * 整数の扱い */ #include <stdio.h> #include "s_print.h" int main ( void ) { s_print_int ( 1 ); /* 整数 1 を出力する */ s_print_newline(); /* 改行 */ return 0; }
C:\usr\c>sample-101 1 C:\usr\c>
Download : sample-102.c ( SJIS 版 )
/* * 2012/06/08 sample-002.c */ /* * 整数と文字列の扱い */ #include <stdio.h> #include "s_print.h" int main ( void ) { s_print_int ( 123 ); /* 整数 123 を出力する */ s_print_newline(); /* 改行 */ s_print_string ( "123" ); /* 文字列 "123" を出力する */ s_print_newline(); /* 改行 */ return 0; }
C:\usr\c>sample-102 123 123 C:\usr\c>
Download : sample-103.c ( SJIS 版 )
/* * 2012/06/08 sample-003.c */ /* * 整数と文字列と取り違えると .. ? */ #include <stdio.h> #include "s_print.h" int main ( void ) { s_print_int ( "123" ); /* 文字列を整数として出力しようとした */ s_print_newline(); /* 改行 */ s_print_string ( 123 ); /* 整数を文字列として出力しようとした */ s_print_newline(); /* 改行 */ return 0; }
C:\usr\c>sample-103 C:\usr\c>
Download : sample-104.c ( SJIS 版 )
/* * 2012/06/08 sample-004.c */ /* * 関数に整数を渡す */ #include <stdio.h> #include "s_print.h" /* * 同じ整数を二度出力する */ void print_int_two ( int n ) { // 引数が整数なので、引数の宣言は int になる s_print_int ( n ); s_print_newline(); s_print_int ( n ); s_print_newline(); } /* * main */ int main ( void ) { s_print_int_two ( 123 ); /* 整数 123 を二度出力する */ return 0; }
C:\usr\c>sample-104 C:\usr\c>
Download : sample-105.c ( SJIS 版 )
/* * 2012/06/08 sample-005.c */ /* * 整数の計算 */ #include <stdio.h> #include "s_print.h" /* * 二つの和を出力する */ void print_int_wa ( int n, int m ) { s_print_int ( n ); s_print_string ( " と " ); s_print_int ( m ); s_print_string ( " の和は " ); s_print_int ( n + m ); s_print_string ( " です。" ); s_print_newline(); } /* * main */ int main ( void ) { print_int_wa ( 123, 957 ); print_int_wa ( -21, 45 ); return 0; }
C:\usr\c>sample-105 123 と 957 の和は 1080 です。 -21 と 45 の和は 24 です。 C:\usr\c>
Download : sample-106.c ( SJIS 版 )
/* * 2012/06/08 sample-006.c */ /* * 整数の大小比較 */ #include <stdio.h> #include "s_print.h" /* * 二つの比較結果を出力する */ void print_int_compare ( int n, int m ) { s_print_int ( n ); s_print_string ( " と " ); s_print_int ( m ); s_print_string ( " では " ); if ( n > m ) { /* n の方が大きければ.. */ s_print_int ( n ); } else { s_print_int ( m ); } s_print_string ( " の方が大きい。" ); s_print_newline(); } /* * main */ int main ( void ) { print_int_compare ( 10, 20 ); print_int_compare ( 40, 30 ); print_int_compare ( 4, -4 ); return 0; }
C:\usr\c>sample-106 10 と 20 では 20 の方が大きい。 40 と 30 では 40 の方が大きい。 4 と -4 では 4 の方が大きい。 C:\usr\c>
Download : sample-107.c ( SJIS 版 )
/* * 2012/06/08 sample-007.c */ /* * 整数の等号比較 ( == を使う ) */ #include <stdio.h> #include "s_print.h" /* * 二つの比較結果を出力する */ void print_int_equal ( int n, int m ) { s_print_int ( n ); s_print_string ( " と " ); s_print_int ( m ); s_print_string ( " は等し" ); if ( n == m ) { /* n と m は等しい */ s_print_string ( "い" ); } else { s_print_string ( "くない" ); } s_print_string ( "です。" ); s_print_newline(); } /* * main */ int main ( void ) { print_int_equal ( 10, 20 ); print_int_equal ( 30, 30 ); return 0; }
C:\usr\c>sample-107 10 と 20 は等しくないです。 30 と 30 は等しいです。 C:\usr\c>
Download : sample-108.c ( SJIS 版 )
/* * 2012/06/08 sample-008.c */ /* * 整数の等号比較 ( != を使う ) */ #include <stdio.h> #include "s_print.h" /* * 二つの比較結果を出力する */ void print_int_equal ( int n, int m ) { s_print_int ( n ); s_print_string ( " と " ); s_print_int ( m ); s_print_string ( " は等し" ); if ( n != m ) { /* n と m は等しくない */ s_print_string ( "くない" ); } else { s_print_string ( "い" ); } s_print_string ( "です。" ); s_print_newline(); } /* * main */ int main ( void ) { print_int_equal ( 10, 20 ); print_int_equal ( 30, 30 ); return 0; }
C:\usr\c>sample-108 10 と 20 は等しくないです。 30 と 30 は等しいです。 C:\usr\c>
Download : sample-109.c ( SJIS 版 )
/* * 2012/06/08 sample-009.c */ /* * 再帰と整数 */ #include <stdio.h> #include "s_print.h" /* * n から 1 までを出力する */ void print_n_to_one ( int n ) { if ( n == 0 ) { /* n が 0 の時 */ /* なにもしなくてよい */ } else { /* そうでなければ... */ s_print_int ( n ); /* n を出し.. */ s_print_newline(); print_n_to_one ( n - 1 ); /* 再帰で残りをする */ } } /* * main */ int main ( void ) { s_print_string ( "5 〜 1 : \n" ); print_n_to_one ( 5 ); /* 5 〜 1 を出力 */ s_print_newline(); s_print_string ( "10 〜 1 : \n" ); print_n_to_one ( 10 ); /* 10 〜 1 を出力 */ return 0; }
C:\usr\c>sample-109 5 〜 1 : 5 4 3 2 1 10 〜 1 : 10 9 8 7 6 5 4 3 2 1 C:\usr\c>
Download : sample-110.c ( SJIS 版 )
/* * 2012/06/08 sample-010.c */ /* * 総和の計算 */ #include <stdio.h> #include "s_print.h" /* * n から 1 までを sum に加えた結果を出力する */ void print_n_to_one_sum_sub ( int n, int sum ) { if ( n == 0 ) { /* n が 0 の時 */ /* もう計算しなくてもよいので結果を出力 */ s_print_string ( "合計は " ); s_print_int ( sum ); s_print_string ( "です。" ); s_print_newline(); } else { /* そうでなければ... */ print_n_to_one_sum_sub ( n - 1, sum + n ); /* 再帰処理 */ } } void print_n_to_one_sum ( int n ) { print_n_to_one_sum_sub ( n, 0 ); /* 最初は 1 〜 n を 0 に加える */ } /* * main */ int main ( void ) { s_print_string ( "1 から 5 : " ); print_n_to_one_sum ( 5 ); s_print_string ( "1 から 10 : " ); print_n_to_one_sum ( 10 ); return 0; }
C:\usr\c>sample-110 1 から 5 : 合計は 15です。 1 から 10 : 合計は 55です。 C:\usr\c>
Download : sample-111.c ( SJIS 版 )
/* * 2012/06/08 sample-011.c */ /* * 何かを n 回繰り返す */ #include <stdio.h> #include "s_print.h" /* * 文字列を 10 回出力する */ void print_string_n_times ( int n, char *str ) { if ( n == 0 ) { /* n が 0 の時 */ /* 仕事はすんだので何もしない */ } else { /* そうでなければ... */ s_print_string ( str ); /* 取りあえず、文字列を出力し.. */ print_string_n_times ( n - 1, str ); /* 再帰処理 */ } } /* * main */ int main ( void ) { print_string_n_times ( 3, "Hello, World\n" ); /* "Hello, World\n" を 3 回出力 \ */ print_string_n_times ( 5, "こんにちは\n" ); /* "こんにちは\n" を 5 回出力 */ return 0; }
C:\usr\c>sample-111 Hello, World Hello, World Hello, World こんにちは こんにちは こんにちは こんにちは こんにちは C:\usr\c>
Download : sample-112.c ( SJIS 版 )
/* * 2012/06/08 sample-012.c */ /* * 何かを n 回繰り返す */ #include <stdio.h> #include "s_print.h" /* * "*" を n 回出力 */ void print_asta_n_times ( int n ) { if ( n == 0 ) { /* n が 0 の時 */ /* 仕事はすんだので何もしない */ } else { /* そうでなければ... */ s_print_string ( "*" ); /* 取りあえず、"*" 出力し.. */ print_asta_n_times ( n - 1 ); /* 再帰処理 */ } } void print_triangle ( int n ) { if ( n == 0 ) { /* n が 0 の時 */ /* 仕事はすんだので何もしない */ } else { /* そうでなければ... */ print_asta_n_times ( n ); /* アスタリスクを n 個出力 */ s_print_newline(); print_triangle ( n - 1 ); /* 再帰処理 */ } } /* * main */ int main ( void ) { print_triangle ( 3 ); s_print_newline(); print_triangle ( 5 ); return 0; }
C:\usr\c>sample-112 *** ** * ***** **** *** ** * C:\usr\c>
Download : sample-113.c ( SJIS 版 )
/* * 2012/06/08 sample-013.c */ #include <stdio.h> #include "s_print.h" /* * ペアノの公理 (自然数の定義) * i) 0 は自然数 * ii) x が自然数ならば x + 1 も自然数 * iii) i) と ii) 以外に自然数はない */ /* * 和の定義 * n, m が自然数の時に n + m とは何か * * m ( n が 0 の時 ) * n + m { * ( x + m ) + 1 ( n = x + 1 の時 ) */ /* * a と b の和を計算する */ void addition ( int n, int m ) { if ( n == 0 ) { /* n が 0 の時 */ s_print_int ( m ); } else { addition ( n - 1, m + 1 ); /* x + m を計算 */ } } main() { addition ( 3, 4 ); printf ( "\n" ); addition ( 5, 9 ); printf ( "\n" ); /* 足し算をする */ }
C:\usr\c>sample-113 7 14 C:\usr\c>
Download : sample-114.c ( SJIS 版 )
/* * 2012/06/08 sample-014.c */ #include <stdio.h> #include "s_print.h" /* * 積の定義 * n, m が自然数の時に n * m とは何か * * 0 ( n が 0 の時 ) * n + m { * ( x * m ) + m ( n = x + 1 の時 ) */ /* * n と m のかけ算 */ void multiply_sub ( int n, int m, int mul ) { if ( n == 0 ) { /* n が 0 の時 */ s_print_int ( mul ); /* 結果を出力 */ } else { multiply_sub ( n - 1, m, mul + m ); /* x * m を計算 */ } } void multiply ( int n, int m ) { multiply_sub ( n, m, 0 ); } main() { multiply ( 3, 4 ); s_print_newline(); multiply ( 5, 8 ); s_print_newline(); }
C:\usr\c>sample-114 12 40 C:\usr\c>
Download : sample-115.c ( SJIS 版 )
/* * 2012/06/08 sample-015.c */ #include <stdio.h> #include "s_print.h" /* * 引き算の定義 * n, m が自然数の時に n - m とは何か ( n >= m ) * * n ( m が 0 の時 ) * n - m { * y - x ( m = x + 1 の時 ) * ( n = y + 1 の時 ) */ /* * n と m の差 */ void diffirence ( int n, int m ) { if ( m == 0 ) { /* m が 0 の時 */ s_print_int ( n ); } else { diffirence ( n - 1, m - 1 ); /* y - x を計算 */ } } main() { diffirence ( 7, 3 ); printf ( "\n" ); diffirence ( 13, 8 ); printf ( "\n" ); }
C:\usr\c>sample-115 4 5 C:\usr\c>
引数無しの関数の作り方: sample-001.cからsample-002.cを作るまでの説明
引数付関数の作り方: sample-002.cからsample-003.cを作るまでの説明
Download : 20120608-01.c ( SJIS 版 )
/* * DATE-DIR-QQQQ.c * * putchar で自分の名前(ローマ字)を出力する */ #include <stdio.h> /* * main */ int main( void ) { /* * putchar を使って、自分名前を表示する * 以下は "Kurino Shun-ichi" の場合 */ putchar ( 'K' ); putchar ( 'u' ); putchar ( 'r' ); putchar ( 'i' ); putchar ( 'n' ); putchar ( 'o' ); putchar ( ' ' ); putchar ( 'S' ); putchar ( 'h' ); putchar ( 'u' ); putchar ( 'n' ); putchar ( '-' ); putchar ( 'c' ); putchar ( 'h' ); putchar ( 'i' ); putchar ( '\n' ); return 0; }
C:\usr\c\> 20120608-01 Kurino Shun-chi C:\usr\c\>
Download : 20120608-02.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 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 { /* ** この部分を完成させなさい */ } } /* * remainder : print ( n mod m ) */ void remainder ( int n, int m ) { /* ** この部分を完成させなさい */ } /* * main */ int main() { printf ( "10 mod 4 = " ); remainder ( 10, 4 ); printf ( "\n" ); printf ( "10 mod 3 = " ); remainder ( 10, 3 ); printf ( "\n" ); printf ( "10 mod 2 = " ); remainder ( 10, 2 ); printf ( "\n" ); return 0; }
C:\usr\c\> 20120608-02 10 mod 4 = 2 10 mod 3 = 1 10 mod 2 = 0 C:\usr\c\>