Download : sample-001.c
/* * CDATE sample-001.c */ /* * 返値を持つ関数 */ #include <stdio.h> /* * to_upper : 引数で与えられた文字が小文字なら大文字にする */ char to_upper ( char ch ) { if ( 'a' <= ch ) { /* もし、ch が 'a' 以上で.. */ if ( ch <= 'z' ) { /* 更に、ch が 'z' 以下なら.. */ return ch - 'a' + 'A'; /* 小文字なので大文字に変換して返す */ /* return 命令が実行されると、そこで関数は終了 */ } /* else {} */ /* else 以下はないので省略 */ } /* else {} */ return ch; /* 小文字でない場合は、そのまま返す */ } /* * main 関数 */ int main ( void ) { printf ( "一文字入力して、[Enter] キーを押してください : " ); putchar ( to_upper ( getchar() ) ); putchar ( '\n' ); return 0; }
k
$ ./sample-001.exe < sample-001.in 一文字入力して、[Enter] キーを押してください : k K $
Download : sample-002.c
/* * 2019/06/28 sample-002.c */ /* * main の返値 */ #include <stdio.h> /* * is_upper : ch が大文字なら 1 そうでなければ、0 を返す */ int is_upper ( int ch ) { if ( 'A' <= ch ) { if ( ch <= 'Z' ) { return 1; /* 大文字だった.. */ } } return 0; /* 大文字ではなかった.. */ } /* * main 関数 */ int main ( void ) { printf ( "一文字入力して、[Enter] キーを押してください : " ); if ( is_upper ( getchar() ) ) { printf ( "大文字なので 0 を返します。\n" ); return 0; } else { printf ( "大文字でなかったので 1 を返します。\n" ); return 1; } }
Q
$ ./sample-002.exe < sample-002.in 一文字入力して、[Enter] キーを押してください : Q 大文字なので 0 を返します。 $
Download : sample-003.c
/* * 2019/06/28 sample-003.c * * コンパイルの方法: * cc -c -I ~/c/include sample-003.c */ /* * s_print.h の使い方 */ #include <stdio.h> #include "s_print.h" /* s_print_... を利用する場合には必要 */ /* * main 関数 */ int main ( void ) { s_print_char ( 'A' ); /* 文字の出力 : putchar ( 'A' ) と同じ */ s_print_newline(); /* 改行の出力 : putchar ( '\n' ) と同じ */ s_print_string ( "Hello, World\n" ); /* 文字列の出力 : printf と同じ */ s_print_int ( 123 ); /* 整数値の出力 */ s_print_newline(); return 0; }
$ ./sample-003.exe A Hello, World 123 $
Download : sample-004.c
/* * 2019/06/28 sample-004.c * * コンパイルの方法: * cc -c -I ~/c/include sample-004.c */ /* * s_input.h の使い方 */ #include <stdio.h> #include "s_print.h" #include "s_input.h" /* s_input_... を利用する場合には必要 */ /* * main 関数 */ int main ( void ) { s_print_string ( "一文字を入力して、[Enter] を押してください : " ); s_print_char ( s_input_char () + 1 ); s_print_newline(); s_print_string ( "整数値を一つ入力して、[Enter] を押してください : " ); s_print_int ( s_input_int () + 1 ); s_print_newline(); return 0; }
B 123
$ ./sample-004.exe < sample-004.in 一文字を入力して、[Enter] を押してください : B C 整数値を一つ入力して、[Enter] を押してください : 123 124 $
Download : sample-005.c
/* * 2019/06/28 sample-005.c * * コンパイルの方法: * cc -c -I ~/c/include sample-005.c */ /* * 二つの入力を利用する場合 */ #include <stdio.h> #include "s_print.h" #include "s_input.h" /* * addfunc */ int addfunc ( int a ) { s_print_string ( "二つ目の整数値を入力して、[Enter] を押してください : " ); return a + s_input_int(); } /* * main 関数 */ int main ( void ) { s_print_string ( "一つ目の整数値を入力して、[Enter] を押してください : " ); s_print_int ( addfunc ( s_input_int() ) ); s_print_newline(); return 0; }
123 456
$ ./sample-005.exe < sample-005.in 一つ目の整数値を入力して、[Enter] を押してください : 123 二つ目の整数値を入力して、[Enter] を押してください : 456 579 $
Download : sample-006.c
/* * 2019/06/28 sample-006.c * * コンパイルの方法: * cc -c -I ~/c/include sample-006.c */ /* * 二つの入力を利用する場合 (失敗例) */ #include <stdio.h> #include "s_print.h" #include "s_input.h" /* * subfunc */ int subfunc ( int a, int b ) { return a - b; } /* * main 関数 */ int main ( void ) { s_print_string ( "二つの整数値を入力して、[Enter] を押してください : " ); s_print_int ( subfunc ( s_input_int(), s_input_int() ) ); s_print_newline(); return 0; }
123 456
$ ./sample-006.exe < sample-006.in 二つの整数値を入力して、[Enter] を押してください : 123 456 333 $
/* * CDATE FILENAME * * キーボードから一文字入力し、その文字によって異る国の挨拶をする */ #include <stdio.h> /* * hello ( char contry ) * char contry : 国を表す一文字 * j : 日本 * e : 英語 * c : 中国 * f : フランス語 * g : ドイツ語 */ void hello ( char cmd ) { /* 引数変数 cmd には、「入力済の情報」が記録されているので、 何度参照しても(同じだし)、「入力の副作用」が生じることもない(安心) */ if ( cmd == 'j' ) { /* 'j' の時は、日本語にする */ printf ( "こんにちは\n" ); } else if ( cmd == 'e' ) { /* 'e' の時は、英語にする */ /* cmd == 'j' でないので、他の可能性を調べる */ printf ( "Hello\n" ); /* 英語の時のあいさつ */ } else if ( cmd == 'c' ) { /* 'c' の時は、中国語にする */ printf ( "ニイハオ\n" ); } else if ( cmd == 'f' ) { /* 'f' の時は、フランス語にする */ printf ( "Bonjour\n" ); } else if ( cmd == 'g' ) { /* ドイツ語の場合 */ printf ( "Guten tag\n" ); } else { /* どれでもなければ.. */ printf ( "???\n" ); /* 人間の入力なので、何がくるかわからない.. */ /* 防護的なプログラミング */ /* 防護的プログラミングのポイントは、必ず「その他(例外)」を用意し、 その「その他」の場合も、「それなりに..」処理を行う */ } } /* * main */ int main( void ) { printf ( "国を表す文字を入力してください\n" ); printf ( "\tj\t日本\n" ); printf ( "\te\t英語\n" ); printf ( "\tc\t中国\n" ); printf ( "\tf\tフランス\n" ); printf ( "\tg\tドイツ\n" ); hello ( getchar() ); /* getchar() で文字を入力し、それに対応する結果を出す */ /* キーボードからの入力、一か所にまとめるために、 関数の引数として、入力関数(getchar())を指定している */ return 0; } /* この課題のポイント 1. 入力関数を引数に指定する => 同じ入力値を、何度でも参照できるようになる 2. 「else if」使えるようにする */
/* * CDATE FILENAME * * キーボードから一行(改行まで..)文字列を読込み、それを逆順に出す * * キーボードからの入力 : abc\n * \n は入力の終わり (処理の対象は、「abc」だけ) * 画面への出力 : cba\n (処理の結果は、「cba」となる) * \n は出力の終わり * [1] * f( "abc" ) * => cba * cb + a * => * f( "bc" ) 再帰呼び出し * putchar ( 'a' ) * [2] * 入力の副作用をどのように抑えるか */ #include <stdio.h> /* * reverse ( char contry ) * char cmd : どのメッセージにするかを表す文字 * */ void reverse_line ( char ch ) { if ( ch == '\n' ) { /* 改行ならば.. */ /* なにもしなくてよい */ } else { /* そうでなければ.. */ reverse_line ( getchar() ); /* 再帰呼び出しを行う (先読みをする) */ putchar ( ch ); /* 繰り返す処理 */ } } /* * main */ int main( void ) { reverse_line ( getchar() ); /* 最初の文字を読み込んで .. */ /* 先読み : (続きがあるなら、)最初に読みこんでから、処理をし、 * 再帰呼び出しをするときにも、まず、入力を行う */ putchar ( '\n' ); /* 改行を出力 */ return 0; }
/* * 20190628-01-QQQQ.c * 文字を入力して、それを小文字に変換して出力する */ #include <stdio.h> /* * to_lower : 引数で与えられた文字が大文字なら小文字にする */ char to_lower ( char ch ) { /* 値を返す関数 */ /* ch が大文字であるならば、小文字に変換する */ /* まず、大文字かどうかを判定したい */ /* 大文字であれば、小文字に変換 */ /* そうでなければ、何もしなくてよい (入力値をそのまま返り値にする) */ if ( 'A' <= ch ) { /* もし、ch が 'A' 以上で.. */ if ( ch <= 'Z' ) { /* 更に、ch が 'Z' 以下なら.. */ /* ここは大文字の時 */ return ch - 'A' /* ch が大文字の中で何番目 */ + ... ; /* それを利用して小文字で何番目か を返す */ /* 大文字を小文字に変換する */ /* return 命令を実行すると、関数は、その時点で終了 */ } /* else {} */ /* else 以下はないので省略 */ } /* else {} */ return ch; /* 大文字でない場合は、そのまま返す */ } /* * main 関数 */ int main ( void ) { printf ( "一文字入力して、[Enter] キーを押してください : " ); putchar ( to_lower ( getchar() ) ); /* input-proccess-outpu 設計 */ putchar ( '\n' ); return 0; }
/* Hanoi の考え方 高さ N のハノイの塔を from から to に work の棒を利用して、移動する */ void hanoi( N, from, to, work ) { /* 高さ N のハノイの塔を from から to に移動するには 少なくても、 大きさ N の円盤を from から to に移動する必要がある ところが、 大きさ N の円盤を移動するには、その上の N-1 のハノイの塔がじゃま そこで、まず、 高さ N-1 のハノイの塔を、work に移動する必要がある */ hanoi ( N-1, from, work, to ); /* 再帰 : N の円盤が動かせる */ /* 大きさ N の円盤が動かせるので、動かす */ move ( N, from, to ); /* N の大きさの円盤を移動 */ /* 今、work にどけた、N-1 の高さのハノイの塔を to に持ってゆく */ hanoi( N-1, work, to, from ); /* 再帰 : 残り作業を行う */ } /* この Hanoi の課題では、 自分自身を 2 度呼び出している <=> 繰り返しのために、一度呼ぶ再帰とは違う振る舞いをする [違い] 繰り返しの場合 関数の呼び出し回数と、引数の大きさが対応している cf. p-001.c 最初の引数に 3 を指定すると、3 回、関数が呼び出されて、 => 結果として、 3 行の出力が起きる !!! 引数が 1 つ小さくなる事と関数が 1 度呼び出される事が対応している !!! 再帰の関数呼び出しが 1 箇所という事と対応している !!! 線形 (多項式オーダー) Hanoi 引数の大きさが 1 減る事と hanoi が二度呼び出される事が対応している N = 1 の時は => 1 度だけ N = K + 1 の時は、 N = K の時の二倍だけ呼び出される => N = K + 1 の時には、2^K [2 の K 乗] 回だけ呼び出される !!! 指数オーダー !!! 1. ちょっと表現をかえただけで、大きな違いになる !!! 2. プログラム内で、命令がどれだけ実行されるのか (計算量)を考える必要がある */
#include <stdio.h> /* 再帰呼び出しを利用した繰り返し */ void loop_with_first_argment ( int times, char *message ) { if ( times <= 0 ) { /* 繰り返しの終了 */ /* 何もしない */ } else { /* times > 0 なので、まだ、繰り返す必要がある */ printf ( message ); /* 繰り返すべき作業を行う */ loop_with_first_argment ( times - 1, message ); /* まだ、残りがあるかもしれないので、再帰呼び出し */ /* 再帰呼びだしをするときに、times を 1 減らす */ } } int main(int argc, char *argv[]) { loop_with_first_argment ( 3, "Hello\n" ); return 0; } /* これまで 再帰を利用する目的は、「繰り返し」を実現するため */
#include <stdio.h> #include "p-002.h" /* ヘッダーファイル p-002.h の取り込み */ /* => func の型がわかる */ void func( int times, char *message ) { if ( times < 1 ) { } else { printf ( message ); func ( times - 1, message ); } }
#include <stdio.h> #include "p-002.h" /* 関数 func のプロトタイプ宣言がある */ int main(int argc, char *argv[]) { func ( 3, "Hello\n" ); /* func の引数の型チェックが行われる */ return 0; } /* p-002.h に関数 func のプロトタイプ宣言を記述 p-002-01.c で、関数 func を定義すると同時に p-002.h を include して、 p-002-01.c で定義された関数 func の型が p-002.h で宣言された型が一致しているかどうかが確認できる [p-002-01.c] == [p-002.h] ? p-002.c で関数 func を呼び出すと同時に p-002.h を include して、 p-002.c で呼びだされた関数 func の型が p-002.h で宣言された型が一致しているかどうかが確認できる [p-002.c] == [p-002.h] ? 最後の二つのチェックにより、分割コンパイルして、離れた、宣言と呼び出しを、 p-002.h を利用して、結び付ける事ができる [p-002.c] == [p-002-01.c] !!! また、ファイルが増えるので、make の役割がより重要になる */
#include <stdio.h> /* s_print.h の使い方 1. ファイルの先頭で、include する 2. API に従って、関数が利用できる 3. コンパイルする時に、コンパイルオプション 「-I ~/c/include」 を指定する */ #include "s_print.h" /* 同じフォルダ内に無いが、ここでは特に指定しない */ int main(int argc, char *argv[]) { /* API: s_print_int ( int num ); => 整数値(int 型の値)が表示される s_print_char ( char ch ); => 文字(char 型の値)が表示される s_print_string ( char *mes ): => 文字列(char *型の値)が表示される */ s_print_string ( "Hello, World\n" ); s_print_int ( 3 + 2 * 4 ); /* 11 が表示される */ s_print_char ( '\n' ); /* 改行 */ return 0; }
#include <stdio.h> #include "s_input.h" #include "s_print.h" /* s_input.h の使い方 1. #include で読み込む 2. API に従って s_input_XXX() XXX 型の情報が入力できる 3. このコンパイル時に、-I ~/c/include が必要 */ int main(int argc, char *argv[]) { s_print_string ( "整数値を入力してください(消費税を含んだ値を表示します):" ); s_print_int ( (s_input_int() * 108)/100 ); s_print_char ( '\n' ); return 0; }
#include <stdio.h> /* input-process-output の例 整数値を一つ入力し、その二倍を出力する 入力 : 整数値 処理 : 二倍にする 出力 : 処理した結果 */ #include "s_input.h" #include "s_print.h" int main(int argc, char *argv[]) { s_print_string ( "整数値を入力してください : " ); /* プロンプト(入力促進表示) */ s_print_int ( /* 出力 */ s_input_int() /* 入力 */ * 2 /* 処理 */ ); s_print_char ( '\n' ); /* putchar ( '\n' ) とか printf ( "\n" ) でもよい */ return 0; }
#include <stdio.h> /* input-process-output の例 整数値を一つ入力し、その二倍を出力する 入力 : 整数値 処理 : 二倍にする 出力 : 処理した結果 */ #include "s_input.h" #include "s_print.h" void input_loop ( int times ) { if ( times < 1 ) { /* do nothing */ } else { s_print_string ( "整数値を入力してください : " ); /* プロンプト(入力促進表示) */ s_print_int ( /* 出力 */ s_input_int() /* 入力 */ * 2 /* 処理 */ ); s_print_char ( '\n' ); /* putchar ( '\n' ) とか printf ( "\n" ) でもよい */ input_loop ( times - 1 ); } } int main(int argc, char *argv[]) { input_loop ( 3 ); return 0; }
#include <stdio.h> /* input-process-output の例 整数値を一つ入力し、その二倍を出力する 入力 : 整数値 処理 : 二倍にする 出力 : 処理した結果 */ #include "s_input.h" #include "s_print.h" int main(int argc, char *argv[]) { s_print_string ( "整数値を入力してください : " ); /* プロンプト(入力促進表示) */ s_print_int ( /* 出力 */ s_input_int() /* 入力 */ + s_input_int() /* 入力 */ /* a + a => 2 * a */ ); s_print_char ( '\n' ); /* putchar ( '\n' ) とか printf ( "\n" ) でもよい */ return 0; }
#include <stdio.h> /* input-process-output の例 整数値を一つ入力し、その二倍を出力する 入力 : 整数値 処理 : 二倍にする 出力 : 処理した結果 */ #include "s_input.h" #include "s_print.h" void two_times_print ( int n ) { s_print_int ( n + n ); /* n + n = 2 * n なので二倍の値を出力 */ /* 引数 n が、二度参照されるが、それはすでに、 入力された値が変数 n に入っているだけ( n 自身が s_input_int() ではない ) ので 問題はない */ } int main(int argc, char *argv[]) { s_print_string ( "整数値を入力してください : " ); /* プロンプト(入力促進表示) */ two_times_print ( s_input_int() ); /* 入力関数は、関数の引数の所で一度だけ呼び出される */ /* 副作用を「ココ」一か所に閉じ込める事ができ、値は、何度でも参照可能 */ s_print_char ( '\n' ); /* putchar ( '\n' ) とか printf ( "\n" ) でもよい */ return 0; }
#include <stdio.h> #include "s_input.h" #include "s_print.h" /* process 消費税を計算する関数 商品の代金(関数の引数) => 外税の価格(関数の値) cf. sin(x)という関数では、 sin(PI/4) PI/4 から値として √2/2 を作るもの の変換処理をした */ int process ( int pay ) { /* 関数の前の「int」は、この関数が値を返し、かつその値が int 型である事示す */ /* 値を返さない関数は、「void」と書く */ /* 今までは、「値を返す関数を作る」事をしてなかったから void で済んだ */ /* pay => (pay * 108)/100 */ return (pay * 108)/100; /* 「(pay * 108)/100」をどうやって「関数の値」にするか ? */ /* 命令の一つである return は、 それを実行する事によって関数の処理を終了すると同時に、 return の後ろにある式の値が、関数の値として返される */ } int main(int argc, char *argv[]) { s_print_string ( "整数値を入力してください(消費税を含んだ値を表示します):" ); s_print_int ( process ( s_input_int() ) ); /* 関数合成 O(P(I())) => I() -> P() -> O() */ /* 典型的な input-process-output 設計 */ s_print_char ( '\n' ); return 0; }
[??T] Hanoi ???? ??A?I??`??u?J?????v??O????p?? ?u?J?????v?????A??{?A??A?I???яo???????s?? <= Hanoi ?????A??A??яo???????? # ??A?????A?J??????????????????????????A # ?P????\???????(????????)?_???J???????L?? ???????????? => ????????d?v?? ?u???????v:??????????A??????^(int.char *)???w?????? ? ??\???? ?????A?u?^?`?F?b?N?v????p????? ?u?^?`?F?b?N?v:?????????яo?????s???????A?????????^???A ??????^????^???v?????????????m?F???鎖 => ?u?^?`?F?b?N???????????(?^????)?v????A????????\????(????..)???? <= ?l???u???????v?????? => ?N?????A?u????`?F?b?N?v???s??????K?v?????? <= ????d????????R???p?C??????????????????? => ????d???????????A?u?????????v??? => ?????????? ?????????R???p?C????y????e?? ??????`(???????????????)??????яo????????t?@?C????????? => ?R???p?C?????A?^?`?F?b?N???s??????????? ?????R???p?C???????A??????^????A?????яo??????X????A?`?F?b?N?????? => ?v???g?^?C?v??(???????????????)???w?b?_?[?t?@?C????L?q???A ????t?@?C?????A?????`??A?????яo????o????Q??(include)???鎖????A ?????R???p?C??????A?^?`?F?b?N???K?????????????K?v?????? #include ???????A?w?????t?@?C???????????????????w?? ?`??????? <> ?? "" ???? cf. #include <stdio.h> ???? #include "p-001.h" ?O?? <> ??Astdio.h ??t?@?C????u???????????????A?????????????p????? /usr/include ????? => ?W???I??????????(???V?X?e???????????鎖????????????)???? => ??????????p??\ (?W????? [cf. printf] ?????) "" ??A?v???O???}????????????? ??{??A.c ???????????u?? ???p??A-I ??w?????f?B???N?g????u????????? [?{??????e] <???> c:\usr\c\include ????g???m?F???? 2019/06/28 ??y?[?W?????????t?@?C???? c:\usr\c\include ???? s_print.h, s_input.h <s_print.h> ??g???? 1. #include ??????? 2. s_print_XXX (XXX = string, int, char) ????????^??f?[?^???o?? cf. p-003.c 3. ?R???p?C??????u-I ~/c/include?v???w???? <s_input.h> ??g???? ??{ s_print.h ????? / s_input_XXX ??f?[?^????????\ cf. p-004.c [????] ?u????v:?v???O?????????s???????(???s??)??A????(?v???O??????O????)?^?????鎖 !! ?u???s???v??T?O??A?u?R???p?C????(?v???O??????)?v?????? !! => ????????m?鎖????????(???s???????f?[?^??A?v???O?????????\?z??????..) !!!! => ?????????A?u???????N????v?????????? !!!! <= ???????????(????)???K?v(?G???[?`?F?b?N..) C ??????A?u????v??A?u???????v????яo????A??????_(?v???O????????s ????A??????????яo??????_)??A?s????????\????A (?L?[?{?[?h????????????)?f?[?^????????????_??A?????l????? ???o????????? ??: getchar() : ???????????A????????? => ?W?????C?u???? ??2: s_input.h ??p???鎖????(?u?`???????A?O???g?????..) s_input_char() s_input_int() s_input_string() ???????p????? ?v???O???~???O ?v???O???????{??v?\????? (Input-process-output) ?????????A??????????H????A?????????o????? ????????A??яo???????_??u????v???s???A???????????B ??яo??????т?A?u????v???s???A????A??????????(??????)????? => ????????l??A??яo???x????? ????(????)?l????x???????p???A??????肪??????A ??????p??????????A??|?B => ??????????l?????p??????????A?????????????w????A ????w?????????A???????????Q????? ????????A?u???????v?????????p????????A ???????????u???v??A???w?I?????????U?????????? cf. f() + f() != 2 * f() ?????? # f() ??????p???????????????????A????? !! ?????u????l?v?????Q????????? !! ???????l???????????????????A??????????w????A !! ???????A????l??????????o?R??A(????p??????)???x????Q????鎖??????? ?????????o???G?[?V???? ???????? : if ?\????s?? if ( ???? ) { ???????????????? } else { ???????s??????? } => ?????????????l???????? <= if ?\????g??????鎖???A??????????????\ ?? : ?????l???A???A?[???A????O??????? if ( num > 0 ) { printf ( "??\n" ); } else { if ( num < 0 ) { printf ( "??\n" ); } else { printf ( "?[??\n" ); } } => if ?\?????o?????A????g???????A?C??????????????? [else if] if ( num > 0 ) { printf ( "??\n" ); } else if ( num < 0 ) { /* else if : ??g {} ???? */ printf ( "??\n" ); } else { printf ( "?[??\n" ); } [??] ?????l?? 4 ??????????肪 0, 1, 2, 3 ??? if ( num % 4 == 0 ) { printf ( "?????? 0\n" ); } else if ( num % 4 == 1 ) { printf ( "?????? 1\n" ); } else if ( num % 4 == 2 ) { /* ??????????????? else if ???????? */ printf ( "?????? 2\n" ); } else { printf ( "?????? 3\n" ); } [??(????)??l????????] return ???? ????????s???鎖????????????????I????????????A return ???????鎮??l???A?????l????????@?\??????
課題プログラム内の「/*名前:ここ*/」の部分を書き換え「/*この部分を完成させなさい*/」の部分にプログラムを追加して、プログラムを完成させます。
Download : 20190628-01.c
/* * 20190628-01-QQQQ.c * 文字を入力して、それを小文字に変換して出力する */ #include <stdio.h> /* * to_lower : 引数で与えられた文字が大文字なら小文字にする */ char to_lower ( char ch ) { if ( 'A' <= ch ) { /* もし、ch が 'A' 以上で.. */ if ( ch <= 'Z' ) { /* 更に、ch が 'Z' 以下なら.. */ /* ** この部分を完成させなさい */ } /* else {} */ /* else 以下はないので省略 */ } /* else {} */ return ch; /* 大文字でない場合は、そのまま返す */ } /* * main 関数 */ int main ( void ) { printf ( "一文字入力して、[Enter] キーを押してください : " ); putchar ( to_lower ( getchar() ) ); putchar ( '\n' ); return 0; }
D
$ ./20190628-01-QQQQ.exe 一文字入力して、[Enter] キーを押してください : d $
Download : 20190628-02.c
/* * 20190628-02-QQQQ.c * 二つの整数値を入力して、その商を出力する */ #include <stdio.h> #include "s_print.h" #include "s_input.h" /* * remainder */ int remainder ( int a ) { s_print_string ( "割る整数を入力して、[Enter] を押してください : " ); /* ** この部分を完成させなさい */ } /* * main */ int main ( void ) { s_print_string ( "割られる整数を入力して、[Enter] を押してください : " ); s_print_int ( remainder ( s_input_int() ) ); s_print_newline(); return 0; }
100 13
$ ./20190628-02-QQQQ.exe 割られる整数を入力して、[Enter] を押してください : 100 割る整数を入力して、[Enter] を押してください : 13 9 $