関数名 引数

プログラミングⅠ(1組)
第9回
http://www.fit.ac.jp/~matsuki/lecture.html
オフィス・アワーのお知らせ
• オフィス・アワーを以下の要領で開講
– 日時:毎週月曜日、5時限目(16:20~)
– 場所:A棟 4階 41番教室
– 内容:プログラミング関連科目
タイピングソフト
• 喰人王を使用して結果を記録する
• ステージ:第一の店(中華)
• Excelのシートにスコアを毎回記録していく
– 残り時間 ⇒ FeedBackページで報告
– 総タイプ数
– ミスタイプ数
– 正確さ ⇒ FeedBackページで報告
– 喰いっぷり ⇒ FeedBackページで報告
• このシートは,途中で提出してもらいます
今日の内容
•
•
•
•
•
•
関数の概要
関数の定義
関数の呼び出し
変数のスコープ
引数の受け渡し
今日の課題
関数の概要
• これまで使った関数
– main関数・printf関数・scanf関数・sqrt関数・rand
関数...⇒ C言語は関数で構成されている
• C言語の関数とは,「一連の処理の集まり」
• プログラマが,独自の関数を作ることができる
関数の定義
• 関数とは?
– プログラマが与えた値(材料)を,
– 指示通りに処理し,
– 結果を吐き出す
引数
処理の材料
addnum()関数:
2つの整数値の
和を得る
2
a
3
b
addnum()
戻り値(返り値)
処理の結果
5
関数の定義
引数の数だけ,
「,」で区切って変
数を用意する
第1引数 第2引数
戻り値の型 関数名
型 変数名
int addnum(int a,
{
int x;
x = a + b;
return x;
}
型 変数名
int b)
a, bというint型変数が,
引数の値を受け取る
addnumの処理内容を
ここに書く
return文(関数を終了し,後に続く値(戻り値)を返す)
関数の定義
• 戻り値を持たない関数
voidは「空の」とい
う意味
– 戻り値の型にvoid(ヴォイド)と指定する
dispnum()関数:引数の整数値を表示する
void dispnum(int a)
{
printf(“引数の値は%d\n”, a);
return;
}
戻り値を指定する必要はない(この場合,return文はなくてもOK)
関数の定義
• 引数を持たない関数
hello()関数:「Hello World」と表示する
void hello(void)
「void hello()」と書いてもOK
{
printf(“Hello World\n”);
}
関数の呼び出し
• 関数呼び出しの基本
関数の定義
dispnum( int a )
{
…
対応
}
関数の呼び出し
dispnum ( 5 ) ;
関数名
引数
aの値は5になる
#include <stdio.h>
void dispnum(int a)
{
printf(“引数の値は%d\n”, a);
}
main()
{
int x = 10;
dispnum( 5 );
dispnum( x );
}
5を引数として,
dispnum()を呼び出す
xの値10を引数として,
dispnum()を呼び出す
関数の呼び出し
• 戻り値を利用する
関数の定義
関数の
呼び出し
int addnum( int a, int b )
{
…
対応
}
関数の戻り値をnに代入する
int n;
n = addnum ( 2, 3 ) ;
#include <stdio.h>
int addnum(int a, int b)
{
int x;
x = a + b;
return x;
}
1
main()
addnum()関数を実行し,
{
戻り値をnに格納する
int n;
n = addnum( 2, 3 );
printf(“戻り値は%d\n”, n);
}
変数のスコープ(有効範囲)
• ローカル変数:関数の中で定義した変数
int func( )
{
int y;
…
}
main()
{
int x;
x = 3;
y = 5;
}
変数yのスコープ
変数xのスコープ
func()にあるyを
参照することはできない!
変数のスコープ(有効範囲)
• グローバル変数:関数の外で定義した変数
変数zのスコープ
int z; //グローバル変数
int func( ... )
{
変数yのスコープ
int y;
z = 2;
}
main()
{
int x;
z = 1;
}
変数xのスコープ
int y;
int z;
void myfunc(int a)
{
int z;
int x;
x = a;
y = a;
z = a;
}
main()
{
グローバル変数yとzのスコープ
グローバル変数と同じ名前の
ローカル変数があるときは,
ローカル変数が優先される
ローカル変数zとxのスコープ
同じ名前であっても,
ローカル変数は,別の変数と見なす
int x;
x = 10;
y = 10;
z = 10;
printf(“x, y, zの値は%d, %d, %d\n”,x, y, z);
myfunc( 5 );
printf(“x, y, zの値は%d, %d, %d\n”,x, y, z);
}
ローカル変数xのスコープ
プロトタイプ宣言
関数の定義
関数の呼び出し
関数の呼び出し
関数の定義
プロトタイプ宣言:
関数のひな型を呼び出し前に宣言しておく
プロトタイプ宣言
戻り値の型 関数名
第1引数の型
プロトタイプ
宣言
int addnum(int, int);
関数の
呼び出し
n = addnum(2, 3);
関数の定義
int addnum(int a, int b)
{
…
}
第2引数の型
#include <stdio.h>
void dispnum(int a)
{
printf(“引数の値は%d\n”, a);
}
main()
{
int x = 10;
dispnum( 5 );
dispnum( x );
}
#include <stdio.h>
void dispnum(int a);
プロトタイプ宣言
main()
{
int x = 10;
dispnum( 5 );
dispnum( x );
}
void dispnum(int a)
{
printf(“引数の値は%d\n”, a);
}