プログラミング論 第九回 文字・文字列の入出力 If文を使ったプログラミング 本日の内容 文字列の入出力を行う – scanf関数と入力の変換仕様 言葉の学習としてのプログラミング (復習) if文を使ったプログラミング 関係演算子と等価演算子 文字列の入出力を行う 次のプログラムの動作を確認しましょう。 //ensyu24.c 文字列の入出力を行う #include <stdio.h> int main(void) { char ss[80]; gets(ss); puts(ss); return 0; } 文字列変数です。 最大80文字まで 保存可能です。 文字列の入出力を行う 次のプログラムの動作を確認しましょう。 //ensyu24.c 文字列の入出力を行う #include <stdio.h> int main(void) { char ss[80]; gets(ss); puts(ss); return 0; } キーボードから文字列を 入力する関数です。 文字列を保存する配列名 を与えます。 文字列の入出力を行う 次のプログラムの動作を確認しましょう。 //ensyu24.c 文字列の入出力を行う #include <stdio.h> int main(void) { char ss[80]; gets(ss); puts(ss); return 0; } 文字列を出力する関数です。 文字列変数(配列名)を指定します。 “ABC”のように直接文字列を指定する こともできます。 演習 ensyu24.cのプログラムにおいて, puts(ss); と同じ働きをするように,この処 理をprintfで置き換えてください。 文字列の終端について 文字列は,終わりを指定しなければ,どこまでを正 しい文字列データとして表示すればよいのか分か りません。 文字列を入力したとき,その終端には「文字列終端 マーク」が自動的に挿入されます。 文字列終端マークのことを「NULL文字」といいます 。 通常は「数値の0」です。 「数値の0」では,通常の数値変数の意味なのか, 終端マークの意味なのか分かりにくいので,’\0’と 特殊表現することもあります。 演習-文字列終端マーク ensyu25.cは,文字列変数に初期値として ”hamamoto kazuhiko”という文字列が与えら れているプログラムです。 このまま実行すると, hamamoto kazuhiko と表示されます。 5文字目に「数値の0」を代入した場合の出力を 確認してください。 同様に,「特殊文字’\0’」を代入した場合の出 力を確認してください。 scanfによる文字列の入力 //ensyu26.c scanfを用いた文字列の入力 #include <stdio.h> int main(void) { char ss[80]; scanf("%s", ss); puts(ss); return 0; } 文字列の変換仕様 は%sとなります。 配列変数の場合は,&が必 要ありません。 詳しくは,後期に学習します。 scanfによる文字列の入力 ensyu26.cにおいて, hamamoto kazuhiko と入力してみましょう。 どのように出力さましたか? hamamoto のみの出力・・・? scanf(“%s”, …); では,スペースは文字列終端マーク として判断されるので注意が必要です。 演習 - scanfとgetsの違い ensyu27.cを実行してみましょう。 入力は hama kazu でお願いします。 gets()とscanf()とで,2回入力します。 それぞれの場合において,一文字ずつ文 字コード(十進数)を出力させるプログラ ムです。 hamaとkazuの間の「スペース」の扱いの 違いを確認してください。 言語の学習としてのプログラミング (復習) 基本文型を覚えよう – 英語には「基本5文型」があります。 S+V S+V+C S+V+O S+V+O+O S+V+O+C – プログラミング言語に基本文型はあるのでしょ うか? あります! 言語の学習としてのプログラミング (復習) 基本文型を覚えよう – 「制御構造」とも呼ばれます。文(処理)の並べ方 の決まりです。次の3つです。 順次構造 – 順番に処理を実行していく構造。 選択構造 – もしAならば処理Bを実行し,そうでない場合処理Cを実行す る。 繰り返し構造 – Aが成り立っている間,処理Bを繰り返し実行する。 – 全てのプログラムは,この3つの構造で書かれ ています 言語の学習としてのプログラミング (復習) 基本文型を覚えよう – 「制御構造」とも呼ばれます。文(処理)の並べ方 の決まりです。次の3つです。 順次構造 – 順番に処理を実行していく構造。 選択構造 – もしAならば処理Bを実行し,そうでない場合処理Cを実行す る。 繰り返し構造 – Aが成り立っている間,処理Bを繰り返し実行する。 – 全てのプログラムは,この3つの構造で書かれ ています if文を使ったプログラム 次の処理を考えましょう。 「定価が10000円以上なら 1000円引き,そうでないと きは500円引きする」 これが,条件処理の基本 形になります。 これは,右の図のように図 式化すると分かり易くなり ます。 これをフローチャートと言 います。 プログラムは,このように 各部の処理を図式化して ,これを組みあわせて作る と作りやすくなります。 条件 真 処理1 1000円引き 10000円 以上 偽 処理2 500円引き if文を使ったプログラム 条件 真 処理1 1000円引き 10000円 以上 if( 偽 処理2 条件 処理1 } else{ 処理2 500円引き } ){ if文を使ったプログラム ensyu28.c #include <stdio.h> int main(void) { int teika; printf(“定価= ”); scanf("%d", &teika); if(teika >= 10000) { teika = teika – 1000; } else { teika = teika - 500; } printf("代金=%d\n",teika); return 0; } この部分ですね if文を使ったプログラム #include <stdio.h> int main(void) { int teika; printf(“定価= ”); scanf("%d", &teika); if(teika >= 10000) { teika = teika – 1000; } else { teika = teika - 500; } printf("代金=%d\n",teika); return 0; } 条件の設定です。 「teikaが10000以上」 は,このように表現 します。 >=のように,二つの数値の 大小関係を判定する演算子 を「関係演算子」といいます 関係演算子と等価演算子 二つの値の大小関係を判定する演算子です。 関係演算子 演算子 > >= < <= 説明 記述例 記述の意味 より大きい if(a>100) より大きいか等しい if(a>=100) aが100以上なら より小さい if(a<100) より小さいか等しい if(a<=100) aが100以下なら aが100より大きいなら aが100未満なら 等価演算子 演算子 説明 記述例 記述の意味 == 等しい if(a==100) aが100なら != 等しくない if(a!=100) aが100でないなら if文を使ったプログラム #include <stdio.h> int main(void) { int teika; printf(“定価= ”); scanf("%d", &teika); if(teika >= 10000) { teika = teika – 1000; } else { teika = teika - 500; } printf("代金=%d\n",teika); return 0; } 条件が「真」(成り立つ) 場合の処理を記述します この時,「どこからどこまで を実行するのか」分かる ように,{ }で囲みます。 もし{ }が無いと,1文だけ が処理されます。つまり, 1文の処理なら{ }は必要 ありません。 if文を使ったプログラム #include <stdio.h> int main(void) { int teika; printf(“定価= ”); scanf("%d", &teika); if(teika >= 10000) { teika = teika – 1000; } 条件が「偽」(成り立たない) else { 場合の処理も同様です teika = teika - 500; } printf("代金=%d\n",teika); return 0; } if文を使ったプログラム #include <stdio.h> int main(void) { int teika; printf(“定価= ”); scanf("%d", &teika); 今回のプログラムは,処理 if(teika >= 10000) が各1文なので,{ }を省略 teika = teika – 1000; してこのようにも書けます else 実行して確認しましょう。 teika = teika - 500; printf("代金=%d\n",teika); return 0; } 重要:例え処理が1文であっても{ }で範囲を明確に した方が間違いありません! 演習 先ほどの問題は,次のようにも考えられ ます。 「定価が10000円未満であれば500円値 引きし,そうでなければ1000円値引きす る。」 このプログラムを作ってみましょう。 ensyu29.cを完成して下さい。 正負に対応した四捨五入 実数aを入力 a>0 a=a+0.5; – aが正の場合,0.5を 追加 – aが負の場合,0.5を 引く a=a-0.5; 整数b=(int)a; まず,実数aを入力し ます。 if文を使い処理を分 岐します。 整数値に変換(小数 点以下を切り捨て)し て整数値とする if文を使ったプログラム 「偽」の場合の処理が不要なとき 条件 偽 if( 処理 真 処理 条件 } ){ if文を使ったプログラム 先ほどの問題をもう一度よく考えてみまし ょう。 定価として300円を入力するとどうなりま すか? -200円,という答えになりますよね。 どうすればよいでしょう? if文を使ったプログラム 次のように考えなおしましょう。 – 定価が10000円以上なら1000円引き – そうでないとき(else) 定価が1000円以上なら500円引き そうでないとき(else) タダにする フローチャートにすると分かり易くなりま す。 if文を使ったプログラム 条件1 真 偽 定価が 10000円以上 処理1 条件2 真 1000円引き 定価が 1000円以上 偽 処理2 500円引き 処理3 タダ if文を使ったプログラム 一見難しく見えますが。。。。 条件1 真 定価が 10000円以上 処理1 偽 このように考えれば, 既に学んだif文ですね 処理4 そして,処理4も 通常のif文なわけ です。 条件2 真 1000円引き 定価が 1000円以上 偽 処理2 500円引き 処理3 タダ つまり,2つのif 文を組みあわせ ればいいんです if文を使ったプログラム まず,このように考えてみましょう。 if( 条件1 条件1 処理1 } else{ 処理1 処理4 処理4 } ){ if文を使ったプログラム 次に,このように考えてみましょう。 if( 条件1 条件1 処理1 処理4 } else{ 処理1 処理4 } ){ if文を使ったプログラム 要するに,処理4の所にもう一つif-elseが入ればいいんです。 if( 条件1 ){ 条件1 処理1 } else{ 条件2 if( 処理1 処理2 条件2 処理2 処理3 } else{ 処理3 } } ){ if文を使ったプログラム ensyu30.cがこのプログラムになります。確認しましょう。 #include <stdio.h> int main(void) { int teika; printf("定価= "); scanf("%d", &teika); if(teika >= 10000) { teika = teika – 1000; } else { if(teika>=1000){ teika = teika-500; } else{ teika=0; } } printf("代金=%d\n",teika); return 0; } if文を使ったプログラム else if 文を使うと,このように書く事も出来ます。 #include <stdio.h> int main(void) { int teika; printf("定価= "); scanf("%d", &teika); if(teika >= 10000) { teika = teika – 1000; } else if(teika>=1000){ teika = teika-500; } else{ teika=0; } printf("代金=%d\n",teika); return 0; }
© Copyright 2024 ExpyDoc