Microsoft PowerPoint - lec4.ppt

Similar documents
Microsoft PowerPoint - while.ppt

cp-7. 配列

ゲームエンジンの構成要素

プログラミング基礎

Microsoft PowerPoint - C4(反復for).ppt

Microsoft PowerPoint - 説明2_演算と型(C_guide2)【2015新教材対応確認済み】.pptx

Microsoft PowerPoint - class04.ppt

<4D F736F F D20438CBE8CEA8D758DC F0939A82C282AB2E646F63>

Microsoft PowerPoint - lec10.ppt

Microsoft PowerPoint - 説明3_if文switch文(C_guide3)【2015新教材対応確認済み】.pptx

C 言語第 3 回 2 a と b? 関係演算子 a と b の関係 関係演算子 等しい a==b 等しくない a!=b より大きい a>b 以上 a>=b より小さい a<b 以下 a<=b 状態 真偽 値 条件が満たされた場合 TRUE( 真 ) 1(0 以外 ) 条件が満たされなかった場合 F

JavaプログラミングⅠ

gengo1-6

プログラミングA

Microsoft PowerPoint - C_Programming(3).pptx

kiso2-09.key

スライド 1

Microsoft PowerPoint - C言語の復習(配布用).ppt [互換モード]

プログラミングA

char int float double の変数型はそれぞれ 文字あるいは小さな整数 整数 実数 より精度の高い ( 数値のより大きい より小さい ) 実数 を扱う時に用いる 備考 : 基本型の説明に示した 浮動小数点 とは数値を指数表現で表す方法である 例えば は指数表現で 3 書く

4 分岐処理と繰返し処理 ( 教科書 P.32) プログラムの基本的処理は三つある. (1) 順次処理 : 上から下に順番に処理する ぶんきそろ (2) 分岐処理 : 条件が揃えば, 処理する はんぷく (3) 反復処理 : 条件が揃うまで処理を繰り返す 全てのプログラムは (1) から (3) の

Microsoft PowerPoint - kougi6.ppt

PowerPoint プレゼンテーション

kiso2-06.key

Microsoft Word - Cプログラミング演習(3)

3-4 switch 文 switch 文は 単一の式の値によって実行する内容を決める ( 変える ) 時に用いる 例えば if 文を使って次のようなプログラムを作ったとする /* 3 で割った余りを求める */ #include <stdio.h> main() { int a, b; } pri

Prog1_6th

gengo1-11

C言語によるアルゴリズムとデータ構造

PowerPoint Presentation

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

Microsoft PowerPoint - å®�æ−•è©¦é¨fi3ㆮ対ç�Œ.pptx

Microsoft PowerPoint - program.ppt [互換モード]

4-4 while 文 for 文と同様 ある処理を繰り返し実行するためのものだが for 文と違うのは while 文で指定するのは 継続条件のみであるということ for 文で書かれた左のプログラムを while 文で書き換えると右のようになる /* 読込んだ正の整数値までカウントアップ (for

Microsoft PowerPoint - 4.pptx

Microsoft PowerPoint - kougi2.ppt

fuga scanf("%lf%*c",&fuga); 改行文字を読み捨てる 10 進数の整数 おまじない取り込んだ値を代入する変数 scanf( %d%*c,&hoge); キーボードから取り込め という命令 1: scanf 1 1: int double scanf %d %lf printf

Microsoft Word - no12.doc

Microsoft PowerPoint - kougi4.ppt

Taro-再帰関数Ⅰ(公開版).jtd

C 言語の式と文 C 言語の文 ( 関数の呼び出し ) printf("hello, n"); 式 a a+4 a++ a = 7 関数名関数の引数セミコロン 3 < a "hello" printf("hello") 関数の引数は () で囲み, 中に式を書く. 文 ( 式文 ) は

1. 関数 scanf() 関数 printf() は変数の値を画面に表示しますが それに対し関数 scanf() はキーボードで入力した値を変数に代入します この関数を活用することで対話式 ( ユーザーの操作に応じて処理を行う ) プログラムを作ることができるようになります 整数の和

gengo1-2

Microsoft Word - 03

プログラミング基礎

Microsoft Word - no11.docx

Microsoft PowerPoint - CproNt02.ppt [互換モード]

Taro-プログラミングの基礎Ⅱ(公

5

Taro-最大値探索法の開発(公開版

Taro-再帰関数Ⅲ(公開版).jtd

第9回 配列(array)型の変数

kiso2-03.key

マークアップ言語

Microsoft PowerPoint - 3.pptx

Microsoft Word - no103.docx

Microsoft Word - Cプログラミング演習(1)_2012

Microsoft PowerPoint - C1(演算と変数).ppt

Microsoft Word - no13.docx

PowerPoint プレゼンテーション

3. 標準入出力

Microsoft PowerPoint - 11.pptx

C言語入門

Microsoft Word - 3new.doc

Microsoft PowerPoint - Prog05.ppt

物質工学科 田中晋

P02.ppt

æœ•å¤§å–¬ç´—æŁ°,æœ•å°‘å–¬å•“æŁ°,ã…¦ã…¼ã‡¯ã…ªã……ã…›ã†®äº™éŽ¤æ³Ł

プログラミング入門1

PowerPoint Presentation

Taro-リストⅠ(公開版).jtd

Microsoft PowerPoint - kougi7.ppt

Taro-再帰関数Ⅱ(公開版).jtd

プログラミング実習I

Cプログラミング1(再) 第2回

/*Source.cpp*/ #include<stdio.h> //printf はここでインクルードして初めて使えるようになる // ここで関数 average を定義 3 つの整数の平均値を返す double 型の関数です double average(int a,int b,int c){

Java講座

Microsoft PowerPoint - prog04.ppt

printf("5つの整数を入力して下さい \n"); /* データ入力 */ for( /*** 02 ***/ ){ printf("%dつ目の入力 :",i+1); scanf("%d", /*** 03 ***/ ); sum=dat[0]; /* 合計値の初期設定 */ n_max= 0

関数の呼び出し ( 選択ソート ) 選択ソートのプログラム (findminvalue, findandreplace ができているとする ) #include <stdiu.h> #define InFile "data.txt" #define OutFile "surted.txt" #def

JavaプログラミングⅠ

Taro-スタック(公開版).jtd

演算増幅器

新・明解C言語で学ぶアルゴリズムとデータ構造

計算機プログラミング

Microsoft PowerPoint - guidance.ppt

Microsoft PowerPoint - prog08.ppt

以上

Microsoft PowerPoint - ca ppt [互換モード]

本サンプル問題の著作権は日本商工会議所に帰属します また 本サンプル問題の無断転載 無断営利利用を厳禁します 本サンプル問題の内容や解答等に関するお問 い合わせは 受け付けておりませんので ご了承ください 日商プログラミング検定 STANDARD(C 言語 ) サンプル問題 知識科目 第 1 問 (

プログラミング実習I

Microsoft PowerPoint - 3.ppt [互換モード]

関数の呼び出し ( 選択ソート ) 選択ソートのプログラム (findminvalue, findandreplace ができているとする ) #include <stdio.h> #define InFile "data.txt" #define OutFile "sorted.txt" #def

第2回講義:まとめ

PowerPoint プレゼンテーション

C言語入門

プログラミング方法論 II 第 14,15 回 ( 担当 : 鈴木伸夫 ) 問題 17. x 座標と y 座標をメンバに持つ構造体 Point を作成せよ 但し座標 は double 型とする typedef struct{ (a) x; (b) y; } Point; 問題 18. 問題 17 の

今回のプログラミングの課題 ( 前回の課題で取り上げた )data.txt の要素をソートして sorted.txt というファイルに書出す ソート (sort) とは : 数の場合 小さいものから大きなもの ( 昇順 ) もしくは 大きなものから小さなもの ( 降順 ) になるよう 並び替えること

ポインタ変数

Microsoft PowerPoint - 計算機言語 第7回.ppt

Transcription:

本日の内容 繰り返し計算 while 文, for 文 例題 1. 最大公約数の計算例題 2. 自然数の和 while 文例題 3. フィボナッチ数列例題 4. 自然数の和 for 文例題 5. 九九の表繰り返しの入れ子 今日の到達目標 繰り返し (while 文, for 文 ) を使って, 繰り返し計算を行えるようになること ループカウンタとして, 整数の変数を使うこと 今回も, 見やすいプログラムを書くために, ブロック単位での字下げを行う 条件 繰り返しとは 繰り返しとは, ある条件が満たされるまで, 同じことを繰り返すこと. 繰り返しを行うための文として while 文, for 文などがある.

繰り返しの例 ユークリッドの互助法 m と n の最大公約数を求めるために, 割った余りを求めること を, 余りが 0 になるまで繰り返す. 九九の表 九九の表を求めるために, 掛け算を 81 回繰り返す フィボナッチ数 フィボナッチ数を求めるために, f(n)=f(n-1)+f(n-2) を, n に達するまで繰り返す 例題 1. 最大公約数の計算 2つの整数データを読み込んで, 最大公約数を求めるプログラムを作る. ユークリッドの互助法を用いること ユークリッドの互助法を行うために while 文を書く例 ) 20, 12 のとき : 4 など ユークリッドの互助法 最大公約数を求めるための手続き m,nの最大公約数は, m n とすると, m をn で割った余り = 0 なら, 最大公約数は n m をn で割った余り 0 なら,m と n の最大公約数は, m をn で割った余り と n の最大公約数に等しい ( なお,n > m をn で割った余り が成り立つ ) #include <stdio.h> int main() { int r; int m; int n; printf("m="); scanf("%d", &m); printf("n="); scanf("%d", &n); r = m % n; while( r!= 0 ){ m = n; n = r; r = m % n; printf("gcd=%d n", n); return 0; 条件式 条件が成り立つ限り, 実行されつづける部分

ユークリッドの互助法 実行結果の例 r = m % n; プログラム実行順 m=12 n=8 GCD=4 r!= 0 No m = n; n = r; r = m % n; ユークリッドの互助法 最初の r = m % n; で, m = 80, n = 35 とすると, r = 10 になる 繰り返し 1 回目 繰り返し 2 回目 繰り返し 3 回目 r!= 0 が成立する m = 35 n = 10 r = 5 r!= 0 が成立する m = 10 n = 5 r = 0 r!= 0 が成立しない m の値 n の値 r の値 while ( 条件式 ) { 式 1; 式 2; while 文 条件式 No 式 1 式 2 何かの処理の繰り返し 繰り返しのたびに while 文で書かれた条件式の真偽が判定され, 真である限り, while のあとに続く文が実行され続ける.

例題 2. 自然数の和 整数データ (N とする ) を読み込んで,1 か ら N までの和を求めるプログラムを作る ここでは, 練習のため, 自然数の和の公式は使わずに,while 文を用いる 例 ) 100 5050 #include <stdio.h> int main() { int i; int n; int sum; printf("n="); scanf("%d", &n); sum = 0; i = 1; while( i<=n ) { sum = sum + i; i = i + 1; 自然数の和 条件式 条件が成り立つ限り, 実行されつづける部分 printf("n=%d, sum=%d n", n, sum); return 0; 自然数の和 実行結果の例 i = 1; プログラム実行順 n=100 n=100, sum=5050 i <= n No sum = sum + 1; i = i + 1;

n = 7 とすると 繰り返し 1 回目繰り返し 2 回目繰り返し 3 回目繰り返し 4 回目繰り返し 5 回目繰り返し 6 回目繰り返し 7 回目繰り返し 8 回目 自然数の和 sum の値 i の値 例題 3. フィボナッチ数列 i <= 7 が成立する sum = 0 + 1 i <= 7 が成立する sum = 1 + 2 i <= 7 が成立する sum = 3 + 3 i <= 7 が成立する sum = 6 + 4 i <= 7 が成立する sum = 10 + 5 i <= 7 が成立する sum = 15 + 6 i <= 7 が成立する sum = 21 + 7 i <= 7 が成立しない i = 2 i = 3 i = 4 i = 5 i = 6 i = 7 i = 8 1から 繰り返し数 の和 繰り返し数 +1 整数 (N とする ) を読み込んで,1 から N まで のフィボナッチ数列を求めるプログラムを 作る. フィボナッチ数列 f(n) とは f(0)=1, f(1)=1, f(n)=f(n-1)+f(n-2) フィボナッチ数列を求めるために for 文を使う 例 ) 1,1,2,3,5,8,13,21,34,55,89,144,. #include <stdio.h> int main() { int i; int n; int fn; int fn1; int fn2; printf("n="); scanf("%d", &n); fn1 = 1; fn2 = 1; for (i=2; i<=n; i++) { fn=fn1+fn2; fn2=fn1; fn1=fn; printf("f(%d) = %d n", i, fn); return 0; 条件式 条件が成り立つ限り, 実行されつづける部分 順番に意味がある. fn1=fn; fn2=fn1; とはしないこと フィボナッチ数列 実行結果の例 n=6 f(2) = 2 f(3) = 3 f(4) = 5 f(5) = 8 f(6) = 13

フィボナッチ数列 i = 2 n = 5 とすると フィボナッチ数列 fn の値 fn2 の値 fn1 の値 i = 2 i <= 5 が成立する fn = 1 + 1; fn2 = 1; fn1 = 2 i <= n No fn=fn1+fn2; fn2=fn1; fn1=fn; printf("f(%d) = %d n", i, fn); i++ i = 3 i <= 5 が成立する fn = 2 + 1; fn2 = 2; fn1 = 3 i = 4 i <= 5 が成立する fn = 3 + 2; fn2 = 3; fn1 = 5 i = 5 i <= 5 が成立する fn = 5 + 3; fn2 = 5; fn1 = 8 i = 6 i <= 5 が成立しない f i が入る f i-1 が入る f i が入る ++, -- の意味 ++ インクリメントを行う演算子. インクリメントとは 1 足すこと. オペランドに 1 を足して, オペランドに格納する. - - - デクリメント演算子. - デクリメントとは 1 引くこと. オペランドから 1 を引いて, オペランドに格納する. for 文 for ( 初期式 ; 条件式 ; 再設定式 ) { 式 1; 式 2; 初期式 : 繰り返しの最初に1 回だけ実行される. 条件式 : 繰り返しのたびに, 真偽が判定される ( 偽ならば繰り返しが終わる ). 再設定式 : 繰り返しのたびに実行される.

for 文による繰り返し 例題 4. 自然数の和 初期式 条件式 No 式 再設定式 数 (N とする ) を読み込んで,1 から N までの 和を求めるプログラムを作る ここでは, 練習のため, 自然数の和の公式は使わずに,for 文を用いる 1. まず, 初期式 を実行 2. 次に, 条件式 を実行. 条件式が成立すれば, 式と 再設定式 を実行し, 条件式 に戻る 例 ) 100 5050 自然数の和 実行結果の例 n=100 n=100, sum=5050 自然数の和 #include <stdio.h> int main() { int i; int n; int sum; printf("n="); scanf("%d", &n); sum = 0; for (i=1; i<=n; i++) { sum = sum + i; 条件式 printf("n=%d, sum=%d n", n, sum); return 0; 条件が成り立つ限り, 実行されつづける部分

i = 1; i <= n No プログラム実行順 sum = sum + 1; i = i + 1; n = 7 とすると 自然数の和 sum の値 i = 1 i <= 7 が成立する sum = 0 + 1 i = 2 i <= 7 が成立する sum = 1 + 2 i = 3 i <= 7 が成立する sum = 3 + 3 i = 4 i <= 7 が成立する sum = 6 + 4 i = 5 i <= 7 が成立する sum = 10 + 5 i = 6 i <= 7 が成立する sum = 15 + 6 i = 7 i <= 7 が成立する sum = 21 + 7 i = 8 i <= 7 が成立しない sum には 1 から i までの和が入る for 文と while 文 for ( 初期式 ; 条件式 ; 再設定式 ) { 式 1; 式 2; 初期式 while ( 条件式 ) { 式 1; 式 2; 再設定式 for 文と while 文の能力は同じ. 自分にとって分かりやすい方と使うべし 例題 5. 九九の表 九九の表を表示するプログラムを作成する 九九の表を表示するために, 繰り返しの入れ子を使う

#include <stdio.h> int main() { int i; int j; for (i=1; i<=9; i++) { for(j=1; j<=9; j++) { printf("%d, ", i*j); printf(" n"); return 0; 九九の表 内側 外側 繰り返しの入れ子 i = 1 i <= 9 No j = 1 九九の表 課題 1 例題 1. 最大公約数の計算 のプログラ ムを書き換えて,m,n を何度も入力して計 j <= 9 算できるようにせよ No i++ printf("%d, ", i*j); j++

課題 1 のヒント m,n を何度も入力して計算できる とは 条件式での 1 の意味 繰り返し続けるプログラム while (1) { 式 1; 式 2; 1 この 1 は, 常に真である ことを示す特別な数 式 1 式 2 * 後述する do while 文を使っても 繰り返し続ける ことは可能 値 1 0 意味 真 (true) 偽 (false) 課題 1 のヒント x と y を入れ替えるプログラム int x; int y; int z; z = x; x = y; y = z; z は入れ替えのためだけに使う変数 課題 2 1. ベクトルの値 (x 1, x 2, x k ) を1つづつ読み込んで,1つ読み込むごとに, 次の計算を行うプログラムを作成しなさい. ベクトル (x 1, x 2, x k ) の長さ 2. 2つのベクトルの値 (x 1, x 2, ), (y 1, y 2, ) を交互に読み込んで,1 組読み込むことに次の計算を行うプログラムを作成しなさい. 2つのベクトルの内積

課題 2 のヒント 課題 3. 三角関数 k 回めの繰り返しにおいて, 長さ k のベクトル (x1, x2, xk) の二乗和を求めるプログラム sum = 0; while (1) { scanf( "%lf", x ); sum = sum + ( x * x ); printf( "sum = %f n", sum ); θ を読み込んで,(cosθ+ i sinθ) n を計算するプログラムを作りなさい なお,i は虚数単位 n は 1 から 100 まで繰り返すこと ( つまり, 計算は 100 回行う ) z 1 = x 1 + i y 1 z 2 = x 2 + i y 2 のとき 複素数の積 z 1 z 2 = (x 1 + i y 1 ) (x 2 + i y 2 ) = x 1 x 2 + x 1 i y 2 + i y 1 x 2 + i y 1 i y 2 = x 1 x 2 - y 1 y 2 + i (x 1 y 2 + y 1 x 2 ) 実数部 虚数部 (cosθ+ i sinθ) n = cos nθ+ i sin nθ (cosθ+ i sinθ) 2 = cos 2 θ- sin 2 θ+ 2i cosθsin θ = cos2θ+ i sin2θ (cosθ+ i sinθ) 3 = (cosθ+ i sinθ) 2 (cosθ+ i sinθ) = (cos2θ+i sin2θ) (cosθ+ i sinθ) = cos2θcosθ- sin2θsinθ + i (cos2θsinθ- sin2θcosθ) = cos (2θ+θ) + i sin (2θ+θ) = cos3θ+ i sin3θ ( 以下同様に考える. 数学的帰納法で証明できる )

課題 4 あるクラスの試験の点数から, その平均 値と, 標準偏差を計算するプログラムを より勉強したい人への付録 作成しなさい. do while 文による繰り返し do while 文 do { 式 1; 式 n; while ( 条件式 ); while 文との違い : 必ず最初に 1 回は実行される

do while 文が役に立つ場合 読み込み値のチェック 0 点以上,100 点以下のデータの読み込み 間違いがあったら, 読み込みを繰り返す do { printf(" tensu="); scanf("%d", &tensu); while( ( tensu < 0 ) ( tensu > 100 ) ); break 文 繰り返しを中断 break を含む最も内側の switch 文あるいは繰り返し文 (while, for 文など ) から抜け出す. break 文 条件 1 の結果が成り立たない while ( 条件 1){ 式 ; if ( 条件 2){ 条件 2 の結果が成り立つ式 ; break; /* whileの外へ */ printf(" 条件 2が成り立てば実行されない."); printf("whileの外 n"); continue 文 次の繰り返し実行を行うための文. continue を含む最も内側の繰り返し文 (while 文, for 文など ) について, 繰り返し の本体の残りを飛ばして, 次の繰り返しを始める.

continue 文 while ( 条件 1){ 式 ; if ( 条件 2){ 式 ; continue; /* while の先頭へ */ printf( 条件 2 が成り立たなければ実行される."); printf("while の外 n"); break 文, continue 文のまとめ break 文 while 文, for 文での繰り返しから抜け出す continue 文 繰り返し途中で, 残りの処理を飛ばす