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 $