関数への道.

Slides:



Advertisements
Similar presentations
コンピュータープログラミング(C言語)(3) 1.関数と分割コンパイル (復習) 2.キーボード入力
Advertisements

ISD実習E 2009年6月29日 LISPシステム入門 (第5回) 関数ポインタ eval システム関数.
情報基礎演習B 後半第5回 担当 岩村 TA 谷本君.
1.1 C/C++言語 Hello.ccを作りコンパイルしてa.outを作り出し実行する
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
プログラミング演習(2組) 第12回
C言語講座 第4回 ポインタ.
構造体.
配列の扱い、探索 有効範囲と記憶域期間 第12回 [7月10日、H.15(‘03)] 今日のメニュー 1 前回の課題の復習
配列の扱い、探索 有効範囲と記憶域期間 第12回 [7月6日、H.16(‘04)] 今日のメニュー 1 前回の課題の復習
プログラミング演習Ⅰ 課題2 10進数と2進数 2回目.
演習問題の答え #include #include #define NUM 5 typedef struct { // 構造体の定義 float shincho; // 身長 float taiju; // 体重 } shintai; void hyouji(shintai.
情報基礎及び演習 プログラミング基礎① 電気・佐藤亮一.
情報工学科 3年生対象 専門科目 システムプログラミング 第5回、第6回 ヒアドキュメント レポート課題 情報工学科 篠埜 功.
C言語講座 第3回 ポインタ、配列.
ちょっとした練習問題① 配列iroを['R', 'W', 'R', 'R', 'W' , 'W' , 'W']を宣言して、「W」のときの配列の番号をprintfで表示するようなプログラムを記述しなさい。
プログラミング2 関数
関数と配列とポインタ 1次元配列 2次元配列 配列を使って結果を返す 演習問題
#include <stdio. h> int main() { /. 表示をする
関数の定義.
プログラミング応用 printfと変数.
第10回関数 Ⅱ (ローカル変数とスコープ).
第11回 宿題 出題日:12月21日 締切日:1月7日(木).
第10章 これはかなり大変な事項!! ~ポインタ~
高度プログラミング演習 (03).
知能情報工学演習I 第12回(後半第6回) 課題の回答
岩村雅一 知能情報工学演習I 第10回(後半第4回) 岩村雅一
復習 前回の関数のまとめ(1) 関数はmain()関数または他の関数から呼び出されて実行される.
アルゴリズムとデータ構造 補足資料5-1 「メモリとポインタ」
高度プログラミング演習 (08).
知能情報工学演習I 第8回( C言語第2回) 課題の回答
地域情報学 C言語プログラミング 第5回 ポインタ、関数、ファイル入出力 2017年11月17日
岩村雅一 知能情報工学演習I 第12回(C言語第6回) 岩村雅一
演習0 func0, func1, func2を作成せよ. main()関数の中で,func0()を呼び出しを実行せよ.
メモリとメモリアドレス, ポインタ変数,関数へのポインタ渡し
演習07-0 “Hello\n” “World!\n”と
Cプログラミング演習資料.
プログラミング序論演習.
プログラミング入門2 第9回 ポインタ 情報工学科 篠埜 功.
プログラミング序論演習.
復習 2次元配列 4列 j = 0 j = 1 j = 2 j = 3 i = 0 i = 1 i = 2 3行
IF文 START もしも宝くじが当たったら 就職活動する 就職活動しない YES END NO.
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
情報基礎演習B 後半第2回 担当 岩村 TA 谷本君.
11.1 標準ライブラリ関数 11.2 関数呼び出しのオーバーヘッド 11.3 大域変数 11.4 プロトタイプ宣言 11.5 関数引数
第5回 プログラミングⅡ 第5回
第5章 まだまだ続く反復処理!! ~繰り返しその2 for~
変数を一度にたくさん宣言するよ! それだけじゃないよ!
ループだよ!難しいよ! 第5章 while(ループ);.
標準入出力、変数、演算子、エスケープシーケンス
cp-3. 計算 (C プログラミング演習,Visual Studio 2019 対応)
演習00-0 “Hello\n” “World!\n”と
Inline 展開のアルゴリズム 長谷川啓
岩村雅一 知能情報工学演習I 第12回(後半第6回) 岩村雅一
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
高度プログラミング演習 (07).
関数と再帰 教科書13章 電子1(木曜クラス) 2005/06/22(Thu.).
Cプログラミング演習資料.
四則演算,変数 入力文,出力文,代入文, ライブラリ関数
湘南工科大学 2013年10月22日 情報理論2 湘南工科大学情報工学科 准教授 小林 学.
コンピュータープログラミング (C言語)(10) 1.ファイル入出力
printf・scanf・変数・四則演算
第2章 数値の入力と変数 scanfと変数をやります.
計算技術研究会 第5回 C言語勉強会 関数(function)を使う
C言語講座 四則演算  if ,  switch 制御文.
岩村雅一 知能情報工学演習I 第13回(後半第7回) 岩村雅一
第1章 printf(“文字の出力\n”);
= 55 課題6-1 #define _CRT_SECURE_NO_WARNINGS
プログラミング 2 静的変数.
Presentation transcript:

関数への道

元のプログラム #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;

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

#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;

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

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

関数への道 (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; 変数宣言 処理 表示(出力)

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

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

関数の呼び出しの形に(関数の入力=引数) 関数への道 (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 であることをチェック

関数への道 (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;

完成形 #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; この内容を書こう

発展形 #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; 発展形 この内容を書こう

おまけ: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;