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

Slides:



Advertisements
Similar presentations
プログラミング論 第八回数字の計算,整数の入出力. 本日の内容 前回の課題(続き) 前回の課題(続き) 数字の計算をする 数字の計算をする – 加減乗除を行う – インクリメント演算子とデクリメン ト演算子.
Advertisements

情報基礎演習B 後半第5回 担当 岩村 TA 谷本君.
第2章 数値の入力と変数 scanfと変数をやります.
第13回構造体.
第12回構造体.
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
基礎プログラミングおよび演習 第9回
C言語講座 第4回 ポインタ.
第8回 プログラミングⅡ 第8回
第6章 2重ループ&配列 2重ループと配列をやります.
プログラミング演習Ⅰ 課題2 10進数と2進数 2回目.
第10回 プログラミングⅡ 第10回
第10章 char 文字列; 文字列を入力させるよ!.
C言語講座 第3回 ポインタ、配列.
ちょっとした練習問題① 配列iroを['R', 'W', 'R', 'R', 'W' , 'W' , 'W']を宣言して、「W」のときの配列の番号をprintfで表示するようなプログラムを記述しなさい。
プログラミング2 関数
関数とポインタ 値呼び出しと参照呼び出し swapのいろいろ 関数引数 数値積分
関数の定義.
プログラミング応用 printfと変数.
第10回関数 Ⅱ (ローカル変数とスコープ).
プログラミング 4 記憶の割り付け.
プログラミング演習I 2003年6月25日(第10回) 木村巌.
プログラミング演習I 2003年5月7日(第4回) 木村巌.
第10章 これはかなり大変な事項!! ~ポインタ~
プログラミング入門2 第2回 型と演算 条件分岐 篠埜 功.
前回の練習問題.
第9回関数Ⅰ (簡単な関数の定義と利用) 戻り値.
第7回 プログラミングⅡ 第7回
復習 前回の関数のまとめ(1) 関数はmain()関数または他の関数から呼び出されて実行される.
プログラミング言語論 第五回 理工学部 情報システム工学科 新田直也.
第11回 プログラミングⅡ 第11回
関数への道.
プログラミング基礎B 文字列の扱い.
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
岩村雅一 知能情報工学演習I 第12回(C言語第6回) 岩村雅一
疑似乱数, モンテカルロ法によるシミュレーション
C言語 はじめに 2016年 吉田研究室.
第4章 反復作業を楽にする方法!! ~繰り返しその1 while~
第1章 いよいよプログラミング!! ~文章の表示 printf~
復習 2次元配列 4列 j = 0 j = 1 j = 2 j = 3 i = 0 i = 1 i = 2 3行
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
復習 Cにおけるループからの脱出と制御 break ループを強制終了する.if文と組み合わせて利用するのが一般的. continue
情報基礎演習B 後半第2回 担当 岩村 TA 谷本君.
11.1 標準ライブラリ関数 11.2 関数呼び出しのオーバーヘッド 11.3 大域変数 11.4 プロトタイプ宣言 11.5 関数引数
第5回 プログラミングⅡ 第5回
オブジェクト指向言語論 第五回 知能情報学部 新田直也.
精密工学科プログラミング基礎 第7回資料 (11/27実施)
第5章 まだまだ続く反復処理!! ~繰り返しその2 for~
第2章 printf(“変数と入力”); scanf(“%d”,&num);
ループだよ!難しいよ! 第5章 while(ループ);.
標準入出力、変数、演算子、エスケープシーケンス
知能情報工学演習I 第8回(後半第2回) 課題の回答
cp-15. 疑似乱数とシミュレーション (C プログラミング演習,Visual Studio 2019 対応)
cp-3. 計算 (C プログラミング演習,Visual Studio 2019 対応)
第4章 double 小数型の変数;.
プログラミング 4 文字列.
岩村雅一 知能情報工学演習I 第12回(後半第6回) 岩村雅一
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
第7章 そろそろ int 以外も使ってみよう! ~データ型 double , bool~
第12章 乱数という業の深い存在 ~ランダムな値・他~
プログラミング演習I 2003年6月11日(第9回) 木村巌.
四則演算,変数 入力文,出力文,代入文, ライブラリ関数
第2章 数値の入力と変数 scanfと変数をやります.
知能情報工学演習I 第9回(後半第3回) 課題の回答
計算技術研究会 第5回 C言語勉強会 関数(function)を使う
C言語講座 四則演算  if ,  switch 制御文.
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
第1章 文字の表示と計算 printfと演算子をやります 第1章 文字の表示と計算.
第1章 文字の表示と計算 printfと演算子をやります.
プログラミング 3 ポインタ(1).
Presentation transcript:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

練習問題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章 関数

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

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

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

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

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

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

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

練習問題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章 関数

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

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

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

値を返す関数(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章 関数

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

補足 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章 関数

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

練習問題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章 関数

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

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