回目:条件式と分岐,反復...

15
プログラミング演習第一 A(11/15), B(11/16) 5回目:条件式と分岐,反復 担当:上瀧 剛(こうたき ごう) Web:http://www.cs.kumamoto-u.ac.jp/~koutaki/ Mail:[email protected]

Upload: others

Post on 14-Oct-2019

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 回目:条件式と分岐,反復 担当:上瀧剛(こうたきごう)koutaki/PEI_2010/pe_5B.pdf · 【本日の内容】 ①前回の復習(文字列の操作) ②条件分岐if

プログラミング演習第一

A組(11/15), B組(11/16)

第5回目:条件式と分岐,反復

担当:上瀧 剛(こうたき ごう)

Web:http://www.cs.kumamoto-u.ac.jp/~koutaki/

Mail:[email protected]

Page 2: 回目:条件式と分岐,反復 担当:上瀧剛(こうたきごう)koutaki/PEI_2010/pe_5B.pdf · 【本日の内容】 ①前回の復習(文字列の操作) ②条件分岐if

【本日の内容】

①前回の復習(文字列の操作)

②条件分岐 if 文

③繰り返しwhile文

④繰り返し for文

⑤ switch文

⑥break, continue

⑦演習問題

⑧課題

Page 3: 回目:条件式と分岐,反復 担当:上瀧剛(こうたきごう)koutaki/PEI_2010/pe_5B.pdf · 【本日の内容】 ①前回の復習(文字列の操作) ②条件分岐if

①前回の復習(文字列の操作)文字列sのn番目の

文字にアクセスするにはs[n-1]

文字はシングルクォーテーション’文字列はダブルクォーテーション”

Page 4: 回目:条件式と分岐,反復 担当:上瀧剛(こうたきごう)koutaki/PEI_2010/pe_5B.pdf · 【本日の内容】 ①前回の復習(文字列の操作) ②条件分岐if

①前回の復習(文字列の操作)文字/文字列/文字コードの違いを理解して下さい。

■プログラム例

■各種の違いのまとめ

char s[] = "ABCD";prinf(“%c¥n”, s*0+); // 1文字目の文字を表示prinf(“%d¥n”, s*0+); // 1文字目の文字コードを表示prinf(“%s¥n”, s); // 文字列全体を表示

文字 文字列 文字コード

参照方法 ‘A’ ‘B’ “AB” 65 66

printfでの書式

%c %s %d

Page 5: 回目:条件式と分岐,反復 担当:上瀧剛(こうたきごう)koutaki/PEI_2010/pe_5B.pdf · 【本日の内容】 ①前回の復習(文字列の操作) ②条件分岐if

②条件分岐 if 文(テキストp.96)以下のプログラムを作成してください(ファイル名:smp6-1.c)

return 0;を加えてください。

Page 6: 回目:条件式と分岐,反復 担当:上瀧剛(こうたきごう)koutaki/PEI_2010/pe_5B.pdf · 【本日の内容】 ①前回の復習(文字列の操作) ②条件分岐if

③繰り返し while文以下のプログラムを作成してください(ファイル名:smp6-2.c)

Page 7: 回目:条件式と分岐,反復 担当:上瀧剛(こうたきごう)koutaki/PEI_2010/pe_5B.pdf · 【本日の内容】 ①前回の復習(文字列の操作) ②条件分岐if

④繰り返し for文以下のプログラムを作成してください(ファイル名:smp6-3.c)

Page 8: 回目:条件式と分岐,反復 担当:上瀧剛(こうたきごう)koutaki/PEI_2010/pe_5B.pdf · 【本日の内容】 ①前回の復習(文字列の操作) ②条件分岐if

⑤switch文以下のプログラムを作成してください(ファイル名:smp6-4.c)

Page 9: 回目:条件式と分岐,反復 担当:上瀧剛(こうたきごう)koutaki/PEI_2010/pe_5B.pdf · 【本日の内容】 ①前回の復習(文字列の操作) ②条件分岐if

⑥break, continue以下のプログラムを作成してください(ファイル名:smp6-5.c)

Page 10: 回目:条件式と分岐,反復 担当:上瀧剛(こうたきごう)koutaki/PEI_2010/pe_5B.pdf · 【本日の内容】 ①前回の復習(文字列の操作) ②条件分岐if

⑦演習問題問題1.

for文を用いて順列 を計算せよ。ただし、NおよびRはscanfで入力すること。

問題2.

3×3の行列Aのi行j列の要素を以下のように要素を与えることを考える。

これをプログラムで書くと以下のようになる。(for文の中に、for文を入れる処理は2重ループと呼ばれる)

同様に3×3の単位行列I を生成するプログラムを生成せよ。(ヒント:行と列が一致すれば1,それ以外は0とする行列となる)

また、同様に2重ループを用いて、行列C=A+Iを計算するプログラムを作成せよ。

)!(

!)1()2)(1(

RN

NRNNNNPRN

1)1()1( 2 jiAij

配列のインデックスi,jは0から始まるのでこのようにしている

Page 11: 回目:条件式と分岐,反復 担当:上瀧剛(こうたきごう)koutaki/PEI_2010/pe_5B.pdf · 【本日の内容】 ①前回の復習(文字列の操作) ②条件分岐if

⑦演習問題問題3.

以下のようにASCIIコード表を画面に表示するプログラムを作成せよ。ただし、必ずfor文を使用すること。また、ASCIIコード0x7Fは制御文字であるので、break文またはcontinue文を使用して表示を回避すること。

[ヒント]コード値codeは縦軸y, 横軸xとすると、 code=16*y+x で計算できる。

Page 12: 回目:条件式と分岐,反復 担当:上瀧剛(こうたきごう)koutaki/PEI_2010/pe_5B.pdf · 【本日の内容】 ①前回の復習(文字列の操作) ②条件分岐if

⑦演習問題問題4.

以下のように、文字配列sに学籍番号と名前を初期代入している。このプログラムを改良して、sの文字列長を計算するプログラムを作成せよ。ただし、while文を必ず使用し、文字列の最後には終端記号’¥0’が存在することを利用すること。学籍番号と氏名の間には2個の空白、姓と名の間には1個の空白を挿入し、いずれの文字も1バイト文字(半角英数文字)で記述するものとする。

(実行結果例)

Page 13: 回目:条件式と分岐,反復 担当:上瀧剛(こうたきごう)koutaki/PEI_2010/pe_5B.pdf · 【本日の内容】 ①前回の復習(文字列の操作) ②条件分岐if

⑦演習問題問題5.

問題2.で与えた行列Aに対して、行列Aの自乗 D=A*A を計算および表示(右図参照)するプログラムを作成せよ。ただし、必ずfor文を用いて計算すること。

問題6.

をマクローリン展開すると、が得られる。このとき、x=1を代入すれば自然対数eを近似的に計算できる。このことを利用して、整数Nを入力して、第N次項までで打ち切ったeの近似値e[N]を計算するプログラムを作成せよ。なお、プログラムでは途中のe[i], i=1,2,3,…,Nの結果も計算して、eの15桁目までの真値2.718281828459045

との差を画面に出力すること(右図参照)。

!!3!2!1

132

N

xxxxe

Nxxe

Page 14: 回目:条件式と分岐,反復 担当:上瀧剛(こうたきごう)koutaki/PEI_2010/pe_5B.pdf · 【本日の内容】 ①前回の復習(文字列の操作) ②条件分岐if

⑥第4回レポート課題(締切11/30)

課題1.

順列 および組み合わせ

を計算するプログラムを作成せよ。レポートにはプログラムソースおよび、学籍番号下4ケタをABCDとしたとき、N=D+1, R=C+1(もし、R>NになるならばN=C+1, R=D+1とせよ )として入力したときの結果を示しなさい。なお、実行時には以下のようにタイトル、入力のガイド、結果を表示すること(ヒント: で計算できる)。

)!(

!

RN

NPRN

)!(!

!

RNR

NCRN

!RPC RNRN

Page 15: 回目:条件式と分岐,反復 担当:上瀧剛(こうたきごう)koutaki/PEI_2010/pe_5B.pdf · 【本日の内容】 ①前回の復習(文字列の操作) ②条件分岐if

⑥第4回レポート課題(締切11/30)

課題2.

学籍番号下4桁をABCDとする。最後の番号Dに対して、以下の表に該当する問題を解き、そのソースプログラムおよび実行結果を示せ。なお、各プログラムは下記表のプログラムタイトルを実行時に表示すること。

Dの値 解く問題 プログラムタイトル

1, 5, 9 演習問題3 アスキーコード表示プログラム

2, 6 演習問題4 文字列長計算プログラム

3, 7 演習問題5 3x3行列の自乗計算プログラム

4, 8, 0 演習問題6 自然対数の近似計算プログラム(N=10を入力)