E-mail and Network

プログラミング入門
• 小テスト (10分ほど)
• 小テストの解答
• 今回の講義内容:
関数Ⅱ
プログラム入門(第10回)
1
補講のお知らせ
• 12月に補講を以下の様に致します
– 12月13日 3限 第9回
– 12月22日 2限 第11回
プログラム入門(第10回)
2
プログラミング入門
•
•
•
•
•
•
•
•
•
•
•
•
•
1
2
3
4
5
6
7
8
9
10
11
12
13
授業概要
プログラムの作成から実行まで (教科書 1.1~1.6, 2.1)
変数と標準入出力 (教科書 3.1~3.2,2.2,2.4,6.4)
演算子 (教科書 4.1~4.9)
制御文,条件判断と分岐 (教科書 5.1~5.2,5.6~5.7)
繰り返し処理 (教科書 5.3~5.5,5.8)
配列と文字列 (教科書 3.3~3.4)
2次元配列 (教科書 3.3)
関数Ⅰ (教科書 7.1~7.3)
関数Ⅱ (教科書 7.4) (ローカル変数とグローバル変数)
構造体 (教科書 9.1)
ファイルの入出力 (教科書 12.1~12.3)
プログラミング評価
プログラム入門(第10回)
3
Program language C
• Local variable value & Grobal variable value
今回の学習の目標
•プロトタイプ宣言
•ローカル変数とグローバル変数について
•ローカル変数とグローバル変数との違い
•双方の変数の使い方
プログラム入門(第10回)
4
C言語の構造
自作関数
基本的に自作関数は main 関数より
上に記述
これは使う自作関数の型や引数の
数等の情報を main 関数で認識する
ためである.
main 関数
プログラム入門(第10回)
5
C言語の構造
もし,自作関数を main 関数より
下に記述すると...
main 関数
使う自作関数の型や引数の数等の情報が
main 関数で認識できないため,
型は int として,引数は無しとして main 関
数の中で扱う.
自作関数
後で自作関数と合わなくなりコンパイルエ
ラーとなる.
プログラム入門(第10回)
6
p.173
プロトタイプ宣言
プロトタイプ宣言とは
自分で作った関数の呼び出しが行われる前
に,呼び出した関数に対して
– 戻り値
– 引数の数とデータ型
の情報を伝える.
プロトタイプ宣言を使うと,自作関数は
main 関数の下に記述できる.
プログラム入門(第10回)
7
C言語の構造
プロトタイプ宣言
関数の情報
使う関数の情報がこの中に
あるので,main 関数では正
しく自作関数を使うことがで
きる.
main 関数
自作関数
プログラム入門(第10回)
8
p.174
プロトタイプ宣言の記述
include <stdio.h>
これがプロトタイプ宣言
double maxdt( double a, double b);
int main( void )
{
自作関数の先頭行に;をつけて,
上にもっていく
double
data1, data2;
...
maxdt( data1, data2 );
}
double maxdt( double a , double b )
{
...
}
プロトタイプ宣言によって
呼び出す側(main関数) では
どんな関数を呼び出すかが
わかる.
プログラム入門(第10回)
9
p.174
プロトタイプ宣言の記述方法
戻り値の型 関数名 (引数型 引数名 ...);
double maxdt( double a, double b);
セミコロンを忘れないように
自作関数の最初の部分を copy してくればOK
プログラム入門(第10回)
10
プロトタイプ宣言がないと..
include <stdio.h>
int main( void )
{
double
data1, data2;
...
maxdt( data1, data2 );
戻り値があるか,引数のデ
ータ型とかがわからない.
わからないから,仮にint 型
と勝手に解釈しする.
}
double maxdt( double a , double b )
{
コンパイルのときにエラー
か警告がでる
...
}
sample.c(15) : error C2371: 'maxdt' : 再定義されています。異なる基本型です。
プログラム入門(第10回)
11
p.185
ローカル変数とグローバス変数
• ローカル変数
– 関数内で宣言
– 宣言された関数内でしか使えない
• グローバル変数
– 関数の外で宣言
– どの関数からでも使える
プログラム入門(第10回)
12
p.195
ローカル変数とグローバル変数
外部変数の宣言 ;
グローバル変数
void main( void )
{
内部変数の宣言 ;
実行文 ;
}
どの関数から
でも使える
自作関数(引数)
{
内部変数の宣言
実行文 ;
}
ローカル変数
関数内だけで
しか使えない
プログラム入門(第10回)
通常の変数や
配列等が使える
13
グローバル変数の使用例
• 共通で大量のデータを持つ場合
• 返値を複数持つ必要がある場合
• 複数のファイルにプログラムが分割し,共
通してデータを持つ必要がある場合
プログラム入門(第10回)
14
Discussion
• prog10a.c (授業用HomePageより)
• このプログラムについて周りの人に説明
–
–
–
–
–
プロトタイプ宣言はどれか
main 関数以外の関数はどれか
ローカル変数,グローバル変数はどれか
それぞれどのような目的で使われているか
このプログラムは何をしようとしているのか
プログラム入門(第10回)
15
課題
•
•
•
•
•
3×3の2次元配列を用意する.これは外部変
数とする.
キーボードから任意の実数を9個入力し,順番
に配列にいれる.([0][0]->[0][1]->[0][2]->....)
その入力データから3×3の配列の縦と横のそ
れぞれの平均(実数)を求め,画面に表示する.
なお,平均を求めるプログラムは関数化するこ
と.(引数は使わないように)
プロトタイプ宣言,外部変数を使うこと
入力データ
– 1.1 1.2 1.3 1.4 1.5 ・・・・
•
•
•
[0][0] [0][1] [0][2]
[1][0] [1][1] [1][2]
[2][0] [2][1] [2][2]
それぞれの平均
プログラム名 prog10b.c
画面出力 prog no10.txt
Webrep にて提出
• 期限 来週の水曜日まで
ヒント:外部変数を複数持てばよい
プログラム入門(第10回)
16