E-mail and Network

プログラミング入門
• 小テスト (5分ほど)
• 小テストの解答
• 今回の講義内容:
制御文,条件判断と分岐
プログラム入門(第6回)
1
プログラミング入門
•
•
•
•
•
•
•
•
•
•
•
•
•
1
2
3
4
5
6
7
8
9
10
11
12
13
授業概要
プログラムの作成から実行まで (教科書 1.1~1.6, 2.1)
変数と標準入出力 (教科書 3.1~3.2,2.2,2.4,6.4)
演算子 (教科書 4.1~4.9)
制御文,条件判断と分岐 (教科書 5.1~5.2,5.6~5.7)
繰り返し処理 (教科書 5.3~5.5,5.8)
配列と文字列 (教科書 3.3~3.4)
2次元配列 (教科書 3.3)
関数Ⅰ (教科書 7.1~7.3)
関数Ⅱ (教科書 7.4)
構造体 (教科書 9.1)
ファイルの入出力 (教科書 12.1~12.3)
プログラミング評価
プログラム入門(第6回)
2
Program language C
• Algorithms
• Flowchart
• Program control
– if
– else
– switch - case
プログラム入門(第6回)
3
Algorithms
アルゴリズム (Algorithms) とは....
• 問題を解くための処方
• コンピュータ向けの解法・手順
• Programming (プログラミング)
– アルゴリズムを特定の言語で書いたもの
ある目的を実現するために必要な作業の手順を,
明確に述べたもののことを指す
プログラム入門(第6回)
4
Program language C
• Algorithms
• Flowchart
• Program control
– if
– else
– switch - case
プログラム入門(第6回)
5
Flowchart
例
• 流れ図
– 処理の流れを図を使って表す
端子
処理
Y
判断
N
定義済処理
プログラム入門(第6回)
6
Program language C
• Algorithms
• Flowchart
• Program control
– if
– else
– switch - case
プログラム入門(第6回)
7
p.95
制御文
制御文
分岐
if 文
2方向分岐
switch 文
多方向分岐
for 文
反復
指定回数反復
while 文
前判定型
不定回数反復
do-while文
後判定型
不定回数反復
break 文
脱出
反復脱出
continue文 スキップ
プログラム入門(第6回)
8
p.98
制御文の基本構造
制御文
{
...制御文
...括弧
この中で関係演算
子,等価演算子
および 論理演算
し等が使われる
{ から }までが制
御文の影響が及
ぶ範囲
...文(単数または複数)
}
...括弧
プログラム入門(第6回)
9
条件分岐で使える式
式には以下の関係演算子が使える
<
より小さい
a<b
>
より大きい
a>b
<=
等しいか,より小さい a <= b
>=
等しいか,より大きい a >= b
==
等しい
a == b
!=
等しくない
a != b
&& 論理積 (AND)
a && b -> a>100 && b>100
||
論理和 (OR)
a || b
!
否定 (NOT)
!a
プログラム入門(第6回)
10
p.100
条件分岐
• if 文
if 文
条件によって分岐
式
(真) ≠0
if (式) { 文 } ;
if ( x < a )
{
実行文 ;
}
(偽) =0
文
関係演算子
が使用可
次の命令へ
プログラム入門(第6回)
11
例1
int data, amari;
... 剰余算
amari = data % 2;
... もし余りがあれば,
if ( amari= =1 )
以下の文を実行する
{
printf(“このデータは奇数です\n”);
}
プログラム入門(第6回)
12
p.100
条件分岐2
• if -else 文
式が真ならば文1を
偽ならば文2に分岐
if (式) { 文1 } ;
else
{ 文2 } ;
if ( x<a || y < b )
{
実行文1 ;
}
else
{
実行文2 ;
}
if -else文
式
(偽) =0
(真) ≠0
関係演算子
が使用可
文1
文2
次の命令へ
プログラム入門(第6回)
13
例2
int data, amari;
amari = data % 2;
... 剰余算
if ( amari= =1 )
... もし余りがあれば,
{
以下の文を実行する
printf(“このデータは奇数です\n”);
}
... その他の場合は,
else
以下の文を実行する
{
printf(“このデータは偶数です\n”);
}
プログラム入門(第6回)
14
例題
Start
このフローチャートはキーボードから数値を入力し,その数
値に対応した文字を出力するアルゴリズムとなっている.
これを if 文 で記述する.
プログラム名は prog5a.c とする(サンプルが web にある)
数値 a の入力
a= = 1
yes
c = 'A'
no
a= = 2
yes
c= 'B'
文字 c の表示
no
a= = 3
no
c = 'Z'
yes
c='C'
End
プログラム入門(第6回)
#include <stdio.h>
void main(void)
{
int a;
char c;
scanf(“%d”,&a);
if( .....
....
}
15
例題(解答例)
#include <stdio.h>
int main(void)
{
int a;
char c;
scanf(“%d”, &a);
if( a==1 ) {
c=‘A’;
}
else if( a==2 ) {
c=‘B’;
}
else if( a==3 ) {
c=‘C’;
}
else {
c=‘Z’;
}
printf(“%c”,c);
}
... 整数型変数 a の定義
... 文字型変数 c の定義
... キーボードから数値を読み取り,変数 a に入れる
... 変数 a が 1 のとき,下の文を実行
... 変数 c に文字 A を代入
... 変数 a が 2 のとき,下の文を実行
... 変数 c に文字 B を代入
... 変数 a が 3 のとき,下の文を実行
... 変数 c に文字 C を代入
... 変数 a がどれにも当てはまらなかったとき,下の文を実行
... 変数 c に文字 Z を代入
... 変数 c に入っている文字を表示する
プログラム入門(第6回)
16
p.113
分岐 (switch文)
switch 文
• switch-case 文
複数の分岐先から条件
に合うものを選ぶ
case
式= = 定数式
yes
文1
yes
文2
no
case
式というよりも,主に
変数が指定される
switch(式)
{
case 定数式:
case 定数式:
....
default:
}
式= = 定数式
no
文1 ;
文2 ;
文n
文n ;
次の命令へ
プログラム入門(第6回)
17
p.120
break 文 (switch-case)
switch( k )
{
case 0:
case 1:
default:
定数式
switch 文
文
x=a;
break ;
x=b;
break ;
x=c;
break ;
case
式= = 定数式
yes
文1
yes
文2
no
case
式= = 定数式
no
文n
}
break 文
ループを抜ける
次の命令へ
プログラム入門(第6回)
18
例2
int data, amari;
amari = data % 2;
... 剰余算
if ( amari= =1 )
... もし余りがあれば,
{
以下の文を実行する
printf(“このデータは奇数です\n”);
}
... その他の場合は,
else
以下の文を実行する
{
printf(“このデータは偶数です\n”);
}
プログラム入門(第6回)
19
例3
int data, amari;
... 剰余算
amari = data % 2;
switch ( amari )
... amari を以下で分類分けする
{
... 0の場合(偶数)は,
case 0:
printf(“このデータは偶数です\n”);
以下の文を実行する
... break で switch を終える
break;
case 1:
... 1の場合(奇数)は,
printf(“このデータは奇数です\n”);
以下の文を実行する
break;
... break で switch を終える
default:
... どれにも当てはまらない場合
printf(“エラー\n”);
break;
}
プログラム入門(第6回)
20
例題
Start
このフローチャートはキーボードから数値を入力し,その数
値に対応した文字を出力するアルゴリズムとなっている.
これを switch 文で記述する.
プログラム名は prog5b.c とする(サンプルが web にある)
数値 a の入力
a= = 1
yes
c = 'A'
no
a= = 2
yes
c= 'B'
文字 c の表示
no
a= = 3
no
c = 'Z'
yes
c= 'C'
End
プログラム入門(第6回)
#include <stdio.h>
void main(void)
{
int a;
char c;
scanf(“%d”,&a);
switch( .....
....
}
21
例題(解答例)
#include <stdio.h>
int main(void)
{
int a;
char c;
scanf(“%d”, &a);
switch( a ) {
case 1:
c=‘A’;
break;
case 2:
c='B';
break;
case 3:
c='C';
break;
default:
c='Z';
break;
}
printf("%c",c);
}
... 整数型変数 a の定義
... 文字型変数 c の定義
... キーボードから整数を読み取り,変数 a に入れる
... 変数 a を以下で場合分けする
... 変数 a が 1 のとき,下の文を実行する
... 変数 c に文字 A を入れる
... switch 文を抜ける
... 変数 a が 2 のとき,下の文を実行する
... 変数 c に文字 B を入れる
... switch 文を抜ける
... 変数 a が 2 のとき,下の文を実行する
... 変数 c に文字 C を入れる
... switch 文を抜ける
... どれにも当てはまらない場合,下の文を実行する
... 変数 c に文字 C を入れる
... switch 文を抜ける
... 変数 c に入っている文字を表示する
プログラム入門(第6回)
22
Program language C
• Algorithms
• Flowchart
• Program control
– if
– else
– switch - case
プログラム入門(第6回)
23
課題
•
•
•
•
•
キーボードから任意の整数を 2 個入力し,その入力データの平均値(小数点以
下切り上げ)に相当する‘*’を表示するプログラムを作成せよ.使う制御文は
if でも switch のどちらでも可
‘*’の表示個数は 5 までを限度とし,5 を越える時には”ERROR”の文字を表
示をさせるようにせよ.
プログラムの確認用データは以下の 2 つとする.各データごとにプログラムを実
行し,画面出力を得ること.
– 3,3 → この場合 * は 3 個になる
– 3,4 → この場合 * は 4 個になる
例
画面に出力した結果とソースプログラムをwebrep に提出する
画面出力の取得については下記 Homepage を参照すること.
12
“プログラムの実行結果の画面のコピーについて”
合計: 3
http://www.sp.ee.musashi-tech.ac.jp/tk/class/pc/
平均 : 1.5
•
•
プログラム名 prog5c.c 画面 prog5c.txt
期限:次週の水曜日18時まで
•
注意:文字型変数 char には文字が1文字しか入らず,複数の文字を入れること
はできないので注意.(教科書 45 頁を参照のこと)
プログラム入門(第6回)
**
24