Presentation is loading. Please wait.

Presentation is loading. Please wait.

関数への道.

Similar presentations


Presentation on theme: "関数への道."— Presentation transcript:

1 関数への道

2 元のプログラム #include <stdio.h> int main(void) {
を求めるプログラム #include <stdio.h> int main(void) { int i, num=10; // numまでの和を求める float ans=0.0; for(i=1; i <=num; i++) { ans += 1.0/i; // 1.0/i の値を加算 } printf("1から%dまでの逆数の和= %f\n", num,ans); return 0;

3 ここで問題… 突然教師の心が変わり、            だけではなく、    それぞれの値を比較せよ、というプログラムを書くことになった… を求めるプログラム

4 #include <stdio.h> int main(void) { int i, num=10;
float ans=0.0; for(i=1; i <=num; i++) { ans += 1.0/i; } printf("1から%dまでの逆数の和= %f\n", num,ans); ほとんど同じコードを書くことになった ans = 0.0; num = 100; // 追加 for(i=1; i <=num; i++) { ans += 1.0/i; } printf("1から%dまでの逆数の和 = %f\n", num,ans); ans = 0.0; num = 1000; // 追加 return 0;

5 でも、あの教師のことだから、どんどん要求が膨らむに違いない。。。
だけではなく … と増えたらどうしよう?

6 そうだ、関数を利用しよう!

7 関数への道 (1) 処理の抜き出し #include <stdio.h> int main(void) {
関数への道 (1) 処理の抜き出し #include <stdio.h> int main(void) { int i, num=10; // numまでの和を求める float ans=0.0; for(i=1; i <=num; i++) { ans += 1.0/i; // 1.0/i の値を加算 } printf("1から%dまでの逆数の和= %f\n", num,ans); return 0; 変数宣言 処理 表示(出力)

8 関数への道 (2)データの特定(関数の入力=引数)
関数への道 (2)データの特定(関数の入力=引数) この値によって処理内容が変わる for(i=1; i <=num; i++) { ans += 1.0/i; // 1.0/i の値を加算 } よって、これからつくる関数は num を引数とする (num の値によって振る舞いが変わる) num以外の変数はみな、これからつくる関数の(局所)「変数」 i, ans

9 関数への道 (3) 関数の名前と引数の特定 大事なこと それはこれからつくる関数に名前をつけること invSum と命名しよう すると
関数への道 (3) 関数の名前と引数の特定 大事なこと それはこれからつくる関数に名前をつけること invSum と命名しよう すると invSum(num) という「関数の形」が見えてきた 関数名 引数

10 関数の呼び出しの形に(関数の入力=引数)
関数への道 (4)元のコードの書き直し   関数の呼び出しの形に(関数の入力=引数) invSum を抜き去った元のプログラム: これに invSum(num) を追加する #include <stdio.h> int main(void) { int i, num=10; // numまでの和を求める float ans=0.0; printf("1から%dまでの逆数の和= %f\n", num,ans); return 0; } ans = invSum(num); // ここで invSum の戻り値が float であることをチェック

11 関数への道 (5)関数の整形(関数の出力=戻り値)
関数への道 (5)関数の整形(関数の出力=戻り値) 元のプログラムから抜き出した処理コード for(i=1; i <=num; i++) { ans += 1.0/i; // 1.0/i の値を加算 } 関数 invSum で使われる局所変数 i, ans // invSum の戻り値はfloat {  for(i=1; i <=num; i++) { ans += 1.0/i; // 1.0/i の値を加算 } float invSum(int num) // これは元のプログラムから int i; float ans=0.0; return ans;

12 完成形 #include <stdio.h> float invSum(int num) { }
int main(void) { int num=10; // numまでの和を求める float ans=invSum(num); printf("1から%dまでの逆数の和= %f\n", num,ans); return 0; この内容を書こう

13 発展形 #include <stdio.h> float invSum(int num) { }
int main(void) { int num; // numまでの和を求める     num=10; printf("1から%dまでの逆数の和= %f\n", num,invSum(num));     num=100;     num=1000; return 0; 発展形 この内容を書こう

14 おまけ:main関数に、同じような形の繰り返しがあることに気づいた君は…
#include <stdio.h> float invSum(int num) { // 中身は書いてね } void try(int num) { printf("1から%dまでの逆数の和= %f\n", num,invSum(num)); return; int main(void) { int num; for(num=10; num <= 10000; num *= 10) { try(num); return 0;


Download ppt "関数への道."

Similar presentations


Ads by Google