【C言語】関数(ローカル変数、グローバル変数)
ローカル変数とグローバル変数
ローカル変数
・ある関数内で宣言して、その関数内だけで使える。
・その関数内だけでの処理に使う変数
グローバル変数
・全ての関数の外で宣言して、どの関数でも使える。
・プログラム全体で参照したい時に利用する変数
・グローバル変数の多用はバグの原因になり易い
※宣言した変数を利用できる範囲のことをスコープという
[確認]
(実行結果)https://paiza.io/projects/PYwAy66zxfE4jJl-0Ma8AQ
ローカルの変数名が重なる場合
・別の関数内で宣言されているのであれば異なる変数として扱われる
・プログラムの main の中で
numを宣言(main 関数の中だけで使える)
funcの中でnumを宣言(func関数の中だけで使える)
※2つのnumは 全く別の変数(箱) でそれぞれの関数の 中だけで有効
グローバル変数とローカル変数が重なる場合
・グローバル変数とローカル変数は同じ名前をつ けても区別される
例)
int a=0; //グローバル変数a
void func(void){
int a=0; //ローカル変数a
a++; //インクリメントされるのはローカル変数a
}
int main(void){
a++; //インクリメントされるのはグローバル変数a
・・・
}
※グローバル変数とローカル変数の名前が重複すると、その関数内ではグローバル変数の名前が隠される。
ローカル変数のバリエーション
・ブロック内で宣言した変数もローカル変数
・そのブロック内だけで有効
・ブロック内とブロック外で変数名が同じになっている場合は、ブロック内の変数が優先
関数のプロタイプ宣言
・ユーザー関数(の本体)をmain 関数の後ろに記 述する方法をプロタイプ宣言という
・ main 関数の前にユーザー関数の「型」と「引数」を(コ ンパイラに)予告しておくようにする
[例題] 2個の整数を標準入力して、その平均値を求める プログラムを作成する
・平均値の計算はユーザー関数で行う
・プロトタイプ宣言を利用する
・標準入力、標準出力はmain 関数で行う
(実行例)※入力が8,3の場合https://paiza.io/projects/x_l7Ijo4nu8P5id09BxG_g
練習問題
① 3種類の弁当があり、松2500 円、竹2000 円、梅 1500 の価格になっている。この時、注文数を集 計して代金を計算する。
・代金の計算はユーザー関数で行う
・弁当の価格はマクロを使う
・標準入力、標準出力はmain 関数で行う
(解答例)
(実行例) ※入力が1,2,3の場合https://paiza.io/projects/oT2wrGAFXJ7zPQ0Kcggmig
➁ 2つの整数を標準入力し、合計と平均を求め るプログラムを作成する
・入力と表示はmain 関数内で行う
・標準入力でint型に取り込む
・合計と平均の計算は関数で行う (ユーザー関数の名前は自由にしてよい 、合計を求める関数と平均を求める関数は別にする )
・計算結果は小数点以下2桁を表示させる
(解答例)
(実行例)※入力が11,-3の場合
https://paiza.io/projects/GO64O-Eq3GkTI0hr95L5CA
③ 次のプログラムをグローバル変数を使う形に書き換えよ
(解答例)
(実行例)※入力が8の場合
https://paiza.io/projects/mcEE7u4L9A94jeMt7fd1Tg
④円の面積と円周を求めるプログラムを作成する
・円周率の値は3.14 としdefine マクロを使う
・入力と表示はmain 関数内で行う
・面積の計算と円周の計算はそれぞれ別のユーザー関数 で行う
・例外処理は考えなくてよい(マイナスの値が入力されるなどのヘンな値の入力はされ ないと想定する)
(解答例)
(実行例)※入力が7.0の場合
https://paiza.io/projects/ell039zYF_ML0VXjIFRmUA
⑤ 次に示したのは格納した変数を入れ替える 動作をするプログラムである。
次のように書き換えよ
・入力と表示はmain 関数内で行う
・格納した変数の入れ替えはユーザー関数で行う (グローバル変数に変数を格納する)
・例外処理は考えなくてよい
(解答例)
(実行例)※入力が3,8の場合
https://paiza.io/projects/cp7h0Q-fs0bT-D7n2r3XTQ
⑥ 電話料金の計算を行うプログラムを作成する。以下のプログラムを次のように書き換えよ。
・入力と表示はmain 関数内で行う
・グローバル変数を利用して基本料金の改訂が行われる ときには、プログラムの変更がを小で済むようにする
・通話料金の改定はないとしてよい
(解答例)
(実行例)※入力が2,30の場合
https://paiza.io/projects/RYbVT87ODGubPWOQrl2aRA
⑦ 2次元ベクトルの内積を計算するプログラムを作成せよ
・ベクトルの成分はmain 関数内で標準入力
・各ベクトルの成分を配列へ格納(例えばv1[2], v2[2] )
・内積の計算はユーザー関数で行う(引数は4個とする)
・結果の表示はmain 関数で行う
(解答例)
(実行例)※入力が 3.2 , 2.3 , 4.1 , 0.9の場合
https://paiza.io/projects/zXCEW0nL0U78mSLSubWfTg
よろしければサポートお願いします! いただいたサポートはクリエイターとしての活動費に使わせていただいております!