Presentation is loading. Please wait.

Presentation is loading. Please wait.

今まで写経のように書いてきた『void main()』も、これでようやく話ができる!

Similar presentations


Presentation on theme: "今まで写経のように書いてきた『void main()』も、これでようやく話ができる!"— Presentation transcript:

1 今まで写経のように書いてきた『void main()』も、これでようやく話ができる!
第8章 自分で関数を作れること ~関数~ 今まで写経のように書いてきた『void main()』も、これでようやく話ができる! 第8章 関数

2 前回やったこと double 型は小数を扱い、bool 型は真偽のみを 扱うデータ型
データ型は暗黙の型変換とキャスト2つの方法 で変換することができる コメントは『//』や『/*~*/』でもって挿入が できる 第8章 関数

3 今日の予定 関数とは 関数全般の説明 main 関数 何もいらない関数 値が必要な関数 値を返す関数、return 文 第8章 関数

4 関数とは(1) C言語において、プログラムは関数が集まって できている
関数とは、コンピュータのいくつかの処理をま とめたものである(と前に説明したと思う) 最も大きな関数は main 関数と呼ばれるもので、 他のすべての関数はこの main 関数内で呼び出 されることで、使用できる 第8章 関数

5 関数とは(2) massage 関数 宣言 shohizei 関数 宣言 main 関数 図にしてみると、こんな具合かな?
第8章 関数

6 関数とは(3) 一般的に関数は、宣言して定義してから呼び出 しをすることで使うことができる(前頁参照)
実は今まで使ってきた printf や scanf もヘッ ダーファイルというところで定義されている 関数は標準で用意されているものの他に、自作 することができる(今日はそのあたりの説明をし ていくよ) 第8章 関数

7 main 関数(1) C言語のプログラムにおいて、最初に実行され る関数にして、最も肝心な関数 void main(){
} 第8章 関数

8 main 関数(2) いろんな説明を省くため 今まではとある事情からこの『void main()』 を使ってきたが、C言語の規格上以下の『int main()』をこれから使っていくことにする この『return 0;』は、main 関数の終了を意味 し、早い話プログラムをここで終了しますよ、 ということを表しているよ int main(){ return 0; } 第8章 関数

9 何もいらない関数(1) これから自作の関数の作り方・使い方を見てい こうと思う
何もいらない関数とは、特に数値が必要のない 関数を便宜上こう呼ぶことにしてみたやつ さっきも説明したが、関数はまず宣言・定義を して、そして main 関数内で呼び出しをするこ とで使える。その時必ず宣言は、main 関数よ り前に行うように! 第8章 関数

10 何もいらない関数(2) 関数の宣言・定義例:
まず関数の型(正確には違うけど)を void に決め た後、関数の名前を入れる(今回はmessage) 『()』の中に何も入れず『{}』内にやってほし い処理を書き入れる void message(){ printf(“関数を呼び出しました\n”); } 宣言終了。次は呼び出し 第8章 関数

11 何もいらない関数(3) 呼び出し例: 関数名と『()』を main 関数内で書き入れ、こ れで呼び出しができる(『;』忘れずに!)
下の『return 0;』は main 関数の終了でしたね int main(){ massage(); return 0; } 第8章 関数

12 何もいらない関数(4) でもって以下のプログラムを実行してみよう #include <stdio.h>
void message(){ printf(“関数を呼び出しました\n”); } int main(){ message(); printf(“終了します\n”); return 0; 第8章 関数

13 何もいらない関数(5) 実行結果は、こう なんとなくご理解いただけたかな?
main 関数内にすべての処理を書き込むのは非 効率。なので、よくやる処理は関数化しておく ことで、効率よくプログラミングすることがで きるよ 第8章 関数

14 練習問題1 テストの点数を入力させ、それを表示させると いう testscore 関数をつくり、main 関数で呼 び出してみよう
実行結果は以下の通り ヒント: if 文で分岐させた後、 『return;』とだけ 書き入れてみよう 想定しない値が入力され たら、強制的に関数を終了 させたいような・・・ 第8章 関数

15 練習問題1 回答例 return 文については後ほど解説するよ ここで return; は関数 からの強制脱出の意味を持つ
#include <stdio.h> void testscore(){ int score; printf("テストの結果を入力してください > "); scanf("%d",&score); if(score > 100 || score < 0) return; printf("私のテストの結果は%d点です\n",score); } int main(){ testscore(); printf("終了します\n"); return 0; return 文については後ほど解説するよ 第8章 関数

16 補足 ローカル変数とは 基本的に、関数の中で定義された変数は、その 関数の中でしか使えない(有効じゃない)
そのような変数をローカル変数という だから上の例だと、変数 score は、この testscore 変数内でしか使えないよ void testscore(){ int score; } 逆に関数の外で定義すると、どの関数でも使える変数になる → グローバル変数 第8章 関数

17 値が必要な関数(1) 関数によっては、main 関数で入力した値を渡 して処理を行わなくてはならないものがある
こうした関数は、宣言・定義の時点で値が必要 であることを明記し、呼び出す段階で、必要な 値を入力させなくてはならない 詳細は次のスライドで 第8章 関数

18 値が必要な関数(2) 宣言・定義例: 上の例では、テストの点数を testscore 関数に 渡しておかないと正しく処理が行われない
『()』内の値は引数(ひきすう)という 宣言・定義例: 上の例では、テストの点数を testscore 関数に 渡しておかないと正しく処理が行われない あらかじめどんな値を渡すのか、『()』内で変 数を宣言しておいて、『{}』内の処理でそれを 使っている void testscore(int a){ printf(“A君の成績は%d点です\n”, a); } 次の呼び出し例とあわせるとわかりやすいかな? 第8章 関数

19 値が必要な関数(3) 呼び出し例: この『()』内の『70』が、さっきの宣言の『int a』に代入され、printf の処理に使われている
宣言の引き数の数と呼び出しの『()』内の数値 の数は一致させておいてね int main(){ testscore(70); return 0; } 第8章 関数

20 値が必要な関数(4) これらを踏まえ、以下のプログラムを実行して みよう #include <stdio.h>
void testscore(int a){ printf(“A君の成績は%d点です\n”, a); } int main(){ int num = 70; testscore(num); return 0; 第8章 関数

21 値が必要な関数(5) 実行結果 このように関数の『()』内に変数を入れても問 題ない
また『(int a, int b)』や『(int a, double b)』 のように必要に応じて引き数を複数宣言・定義 することもできるよ 第8章 関数

22 練習問題2 三角形の面積を計算し、それを表示する tri 関 数を作ってみよう
高さと数値を入力させる記述は main 関数内に 書こう(以下実行例) 今回は全部 double 型にしています 第8章 関数

23 練習問題2 回答例 double 型は『%lf』や『%f』を使うの覚えてた かな? #include <stdio.h>
void tri(double a, double b){ printf("三角形の面積は%fです\n", a * b / 2); } int main(){ double height,base; printf("底辺 > "); scanf("%lf",&base); printf("高さ > "); scanf("%lf",&height); tri(base,height); return 0; double 型は『%lf』や『%f』を使うの覚えてた かな? 第8章 関数

24 値を返す関数(1) 処理を行った後で、何かしらの値を返してくる 関数もある そういうときに使われるのが return 文
return の後に返したい値を書きいれ、関数の処 理が終わった後、その値を main 関数のほうに 返してくる どんな値を返すかは、関数の型にも影響するよ 第8章 関数

25 値を返す関数(2) 宣言・定義例: この tax 関数は return 文で変数 zei を返す値 としている。この値を返り値、ないし戻り値と いう 関数名の前の int は、返り値にどんな値を設定 するのか、を定める返り値型というものになる よ int tax(int a){ int zei = a * 0.08; return zei; } 第8章 関数

26 値を返す関数(3) 呼び出し例: 返り値型が void (ない)ということは、値を返さ ない関数であることを表している
int main(){ int num = tax(1000); printf(“消費税は%d円\n”, num); return 0; } 第8章 関数

27 値を返す関数(4) それでは、以下のプログラムを実行してみよう #include <stdio.h>
int tax(int a){ int zei = a * 0.08; return zei; } int main(){ int price; printf(“いくらの商品を買う? > ”); scanf(“%d”,&price); int n = tax(price); if(n >=0) printf(“消費税は%d円です\n”, n); return 0; } 第8章 関数

28 値を返す関数(5) 実行結果例はこちら 第8章 関数

29 補足 return 文 前述したとおり『return;』で、その関数から脱 出できる
return 文は条件分岐を使って複数おいていいし、 また戻り値は実数でもOK! 例: int charge(int a){ if( a >= 10) return 13000; if( a > 0 && a < 10 ) return 15000; if( a <= 0 ) return; } 第8章 関数

30 練習問題3 A,B,Cチームの得点を入力し、その合計と平均 を算出する cal1,cal2 関数を作ってみよう
得点は int 型で(小数点以下切捨て) 余裕があったら、得点値を「0~100」に定め、 違反する入力はエラーにする記述を入れてみよう 第8章 関数

31 練習問題3 回答例 既に定義された cal1関数を もう使っている 何回 a,b,c は出ているのだろうか
#include <stdio.h> int cal1(int a ,int b, int c){ int n = a + b + c; return n; } int cal2(int a, int b, int c){ int n = cal1(a,b,c) / 3; return n; int main(){ int a,b,c; printf("a > "); scanf("%d",&a); printf("b > "); scanf("%d",&b); printf("c > "); scanf("%d",&c); printf("3チームの合計点は%dです\n",cal1(a,b,c)); printf("3チームの平均点は%dです\n",cal2(a,b,c)); return 0; 何回 a,b,c は出ているのだろうか 第8章 関数

32 次回予告 文字列について 入力の仕方、特徴 文字列用のデータ型 char の登場!! 第8章 関数

33 テンプレ テンプレ 第8章 関数


Download ppt "今まで写経のように書いてきた『void main()』も、これでようやく話ができる!"

Similar presentations


Ads by Google