プログラミング実習

プログラミング論
第十回
If文を使ったプログラミング
本日の内容



言葉の学習としてのプログラミング
(復習)
if文を使ったプログラミング(一部復習)
関係演算子と等価演算子
言語の学習としてのプログラミング
(復習)

基本文型を覚えよう
– 英語には「基本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;
}
条件が「真」(成り立つ)
場合の処理を記述します
この時,「どこからどこまで
を実行するのか」分かる
ように,{ }で囲みます。
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文を使ったプログラム




先ほどの問題をもう一度よく考えてみまし
ょう。
定価として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;
}
問題


右のフローチ
ャートは,入力
された点数の
成績判定をす
るものです。こ
のチャートに
従ってプログ
ラムを作成し
て下さい。
ensyu31.cを
完成させ,提
出して下さい。
90以上
S
考え方としては。。
80以上
70以上
A
60以上
B
C
E
ヒント
こんなプログラムの構成になります。
if(
){
}
else{
if(
){
}
else{
if(
){
else{
*ここにもう一つif-else文が入る
}
}
}
演習


前述の問題は,
右のフローチャー
トでも同じように
実行出来ます。
このフローチャー
トに従ったプログ
ラムリスト
ensyu32.cを完成
させ,ensyu31.c
と同じ動作をする
事を確認して下さ
い。
70以上
80以上
90以上
S
60以上
B
A
C
E
if文を使ったプログラム

今の問題の場合,「このように書けたら便
利なんじゃないか?」と思いませんか?
if(70 > tokuten >= 60){
seiseki = ‘C’;
}

ensyu33.cは,この考え方で書いたプロ
グラムです。ビルド,実行してみましょう。
if文を使ったプログラム


90以上,または60未満の点数を入力すると,きちんと
結果が出力されますが,それ以外の入力では正しい成
績は出力されません。
つまり,このような書き方はできない,と言う事です。
if(70 > tokuten >= 60){
seiseki = ‘C’;
}

それでは,この表現をするためには,どのような書き方
をすればよいのでしょうか?
論理演算子


(70>tokuten>=60)というのは,「tokutenは,
70点未満であり,かつ,60点以上」という意味
ですね。
この,「~かつ~」のような表現を表す演算子を
論理演算子といいます。
演算子
説明
記述例
記述の意味
&&
論理積(かつ,and)
a==3 && b==4
aが3かつbが4
||
論理和(または,or)
a==3 || b==4
aが3またはbが4
!
否定(でない,not)
!(a==3&&b==4) Aが3かつbが4,でない
ensyu33.cを,論理演算子を使って書き直してみましょう。
*ensyu31.cとは,どちらが「良い」プログラムでしょうか?
if文を使ったプログラム

フローチャートを比較してみましょう。
90以上
90以上
S
80以上
S
80以上90未満
C
60以上
B
B
60以上70未満
70以上
A
70以上80未満
A
C
E
*何回のif判定が必要になるでしょう?
60未満
E
if文を使ったプログラム


西暦から,うるう年を判定するプログラム
を作りましょう。
うるう年の定義は,次のようになります。
– 4で割り切れ,かつ,100で割り切れない年
– または
– 400で割り切れる年

ensyu34.cを完成させて下さい。
関係演算子,等価演算子,
論理演算子の優先順位
高
優
先
順
位
低
!
<, <=, >, >=
==, !=
&&
||
同じ優先順位(式の左側から順に演算)