岩村雅一 masa@cs.osakafu-u.ac.jp 知能情報工学演習I 第12回(C言語第6回) 岩村雅一 masa@cs.osakafu-u.ac.jp.

Slides:



Advertisements
Similar presentations
知能情報工学演習 I 第 12 回( C 言語第6 回) 課題の回答 岩村雅一
Advertisements

プログラミング 関数編 情報科学科. プログラミングにあたって C 言語では、 main 内に処理を記述 1000 行になるような大きなプログラムでは、 プログラム全体が何をしているのかを把握 することが困難になる 他人が見ると非常に理解しにくい 作成者であっても時が経てば内容を忘れて、他 人が見た時と同じ状況になる.
第 11 章 関数について 11.1 標準ライブラリ関数 11.2 関数呼び出しのオーバーヘッド 11.3 大域変数 11.4 プロトタイプ宣言 数学関数の自作.
オブジェクト指向言語・ オブジェクト指向言語演習 中間試験回答例. Jan. 12, 2005 情報処理技術基礎演習 II 2 オブジェクト指向言語 中間試験解説 1  (1) 円柱の体積(円柱の体積 = 底面の円の面積 x 高さ) を求めるプログラムを作成しなさい。ただし、出力結果は、入 力した底面の円の半径.
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第5回 関数(1) 情報・知能工学系 山本一公
A B x y z 復習 構造体変数 普通の変数 x y z 構造体変数 x y z 箱のイメージ 引き出しのイメージ
情報基礎演習B 後半第5回 担当 岩村 TA 谷本君.
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
第2回ネットワークプログラミング 中村 修.
プログラミング演習(2組) 第12回
理由:文字数より要素数の多い配列を用いた時に,文字列の最後を示すため
理由:文字数より要素数の多い配列を用いた時に,文字列の最後を示すため
プログラミング演習Ⅰ 課題2 10進数と2進数 2回目.
演習問題の答え #include #include #define NUM 5 typedef struct { // 構造体の定義 float shincho; // 身長 float taiju; // 体重 } shintai; void hyouji(shintai.
岩村雅一 知能情報工学演習I 第8回(後半第2回) 岩村雅一
ちょっとした練習問題① 配列iroを['R', 'W', 'R', 'R', 'W' , 'W' , 'W']を宣言して、「W」のときの配列の番号をprintfで表示するようなプログラムを記述しなさい。
プログラミング2 関数
岩村雅一 知能情報工学演習I 第11回(後半第5回) 岩村雅一
関数と配列とポインタ 1次元配列 2次元配列 配列を使って結果を返す 演習問題
関数の定義.
第10回関数 Ⅱ (ローカル変数とスコープ).
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第2回 ファイル処理 情報・知能工学系 山本一公
知能情報工学演習I 第9回( C言語第3回) 課題の回答
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
岩村雅一 知能情報工学演習I 第8回(C言語第2回) 岩村雅一
知能情報工学演習I 第12回(後半第6回) 課題の回答
知能情報工学演習I 第9回(後半第3回) 課題の回答
プログラミング入門2 第11回 情報工学科 篠埜 功.
第7回 プログラミングⅡ 第7回
岩村雅一 知能情報工学演習I 第10回(後半第4回) 岩村雅一
復習 前回の関数のまとめ(1) 関数はmain()関数または他の関数から呼び出されて実行される.
知能情報工学演習I 第8回( C言語第2回) 課題の回答
地域情報学 C言語プログラミング 第5回 ポインタ、関数、ファイル入出力 2017年11月17日
岩村雅一 知能情報工学演習I 第13回(後半第7回) 岩村雅一
関数への道.
プログラミング基礎B 文字列の扱い.
岩村雅一 知能情報工学演習I 第11回(後半第5回) 岩村雅一
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
復習 2次元配列 4列 j = 0 j = 1 j = 2 j = 3 i = 0 i = 1 i = 2 3行
知能情報工学演習I 第7回(後半第1回) 課題の回答
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
復習 Cにおけるループからの脱出と制御 break ループを強制終了する.if文と組み合わせて利用するのが一般的. continue
情報基礎演習B 後半第2回 担当 岩村 TA 谷本君.
11.1 標準ライブラリ関数 11.2 関数呼び出しのオーバーヘッド 11.3 大域変数 11.4 プロトタイプ宣言 11.5 関数引数
第5回 プログラミングⅡ 第5回
知能情報工学演習I 第8回(後半第2回) 課題の回答
岩村雅一 知能情報工学演習I 第8回(後半第2回) 岩村雅一
岩村雅一 知能情報工学演習I 第8回(C言語第2回) 岩村雅一
岩村雅一 知能情報工学演習I 第12回(後半第6回) 岩村雅一
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
知能情報工学演習I 第12回( C言語第6回) 課題の回答
岩村雅一 知能情報工学演習I 第10回(後半第4回) 岩村雅一
プログラミング言語論 第九回 理工学部 情報システム工学科 新田直也.
プログラミング演習I 2003年6月11日(第9回) 木村巌.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
プログラミング言語論 第九回 理工学部 情報システム工学科 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
プログラミング言語Ⅰ(実習を含む。), 計算機言語Ⅰ・計算機言語演習Ⅰ, 情報処理言語Ⅰ(実習を含む。)
第2章 数値の入力と変数 scanfと変数をやります.
知能情報工学演習I 第11回(後半第5回) 課題の回答
知能情報工学演習I 第9回(後半第3回) 課題の回答
計算技術研究会 第5回 C言語勉強会 関数(function)を使う
岩村雅一 知能情報工学演習I 第13回(後半第7回) 岩村雅一
知能情報工学演習I 第10回( C言語第4回) 課題の回答
プログラミング演習I 補講用課題
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
= 55 課題6-1 #define _CRT_SECURE_NO_WARNINGS
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
Presentation transcript:

岩村雅一 masa@cs.osakafu-u.ac.jp 知能情報工学演習I 第12回(C言語第6回) 岩村雅一 masa@cs.osakafu-u.ac.jp

C言語の予定 5月31日 プログラミング環境(テキスト1,2章) 6月 7日 変数とデータ型(3章) 、演算子(4章) 5月31日 プログラミング環境(テキスト1,2章) 6月 7日 変数とデータ型(3章) 、演算子(4章) 6月14日 コンソール入出力(6章) 、配列(3章)、 数学処理の標準ライブラリ(11章) 6月21日 制御文1 (テキスト5章) 6月28日 制御文2(テキスト5章) 7月 5日 関数1(テキスト7章) 、 プリプロセッサ(テキスト10章) 7月12日 応用プログラム

本日のメニュー 関数 関数とは何か ローカル変数とグローバル変数 プロトタイプ宣言 プリプロセッサ 引数や戻り値が無い関数 return文 配列を関数に渡す方法 ローカル変数とグローバル変数 プロトタイプ宣言 プリプロセッサ

関数とは 引数を取り、処理の後、戻り値を返すもの 数学の関数(”y=f(x)”)のようなもの printf()やscanf()は関数 main()も関数

関数の例(定義) 関数waは、2つの引数xとyを元にzの値を計算し、戻り値として返す 戻り値の型 引数の型 int wa(int x, int y) { int z; z=x+y; return z; } 関数名 戻り値

サンプルプログラム

サンプルプログラム

引数や戻り値が無い関数 引数が無い関数 戻り値が無い関数 int func(void) { … } void func(int a) { …

return文の役割 return文があると、関数の処理を打ち切って呼び出し元に戻る int waru(int x, int y) { int z; if (y==0) { return -999; } z=x/y; return z; yが0ならば-999を返して 関数の計算は終了

配列を関数に渡す方法 サンプルプログラムの前に、配列の初期化について

配列の初期化(テキストP.67) 変数は宣言するときに値を設定できる 配列は宣言するときに値を設定できる int a=10; 等価 省略可能

配列を関数に渡す方法の サンプルプログラム 配列の初期化 配列の大きさは(最後の1つだけ)省略可能 #include<stdio.h> int wa2(int num, int x[]) { int i; int sum=0; for(i=0; i<num; i++) { sum+= x[i]; } return sum; int main(void){ int a[]={1,3,5,7,9}; int sum; sum = wa2(5,a); printf("sum = %d\n",sum); return 0; } 配列の和

ローカル変数とグローバル変数 #include <stdio.h> int global; int func1(int x, int y) { int local; … } int func2(void) { int local, global; グローバル変数 ローカル変数

ローカル変数とグローバル変数 #include <stdio.h> int global; int func1(int x, int y) { int local; … } int func2(void) { int local, global; 変数が有効な範囲 global local local global 優先

プロトタイプ宣言 関数の「定義」を先にできない場合は「宣言」だけを先に書く

プロトタイプ宣言

プロトタイプ宣言

プリプロセッサ(テキストP.247) コンパイルする前にソースコードを変更する #include …ファイルの挿入 #define … 文字の置き換え

#include …ファイルの挿入 ファイル名:何でもいい ファイル名:wa.c ※通常はヘッダファイルと呼ばれるプロトタイプ宣言が書かれたファイルを読み込む #include <stdio.h> #include "wa.c" int main(void) { int a, b, sum; printf("a: "); scanf("%d", &a); printf("b: "); scanf("%d", &b); sum=wa(a,b); printf("a + b = %d\n", sum); return 0; } ファイル名:wa.c int wa(int x, int y) { int z; z=x+y; return z; }

#define … 文字の置き換え 記号定数 関数形式マクロ 単なる文字列の置き換え # define M_PI 3.14159265358979323846 関数形式マクロ 関数のように働く #define wa(a,b) a+b

関数形式マクロの例 コンパイル前に置き換える sum=a+b; include <stdio.h> #define wa(a,b) a+b int main(void) { int a, b, sum; printf("a: "); scanf("%d", &a); printf("b: "); scanf("%d", &b); sum=wa(a,b); printf("a + b = %d\n", sum); return 0; } コンパイル前に置き換える sum=a+b;

マクロの長所、短所 例:#define wa(a,b) a+b 長所 短所 変数の型を気にする必要がない 関数を呼ぶより速い int型でもfloat型でも同じように動作する 関数を呼ぶより速い 短所 予期せぬ動作をするときがある wa(a,b)/2 は、関数だったら(a+b)/2になったはずなのに、マクロだとa+b/2になる