第5講 関数(1)
第7話 第4話課題Bをint型関数で実現する
解答例
#include<iostream> //入出力のために組み込む
using namespace std; //coutを使えるようにするために必要
int f(int s, int k, int m); //s:初項 k:交差 m:末項
int main() {
int s, k, m, y;
cout << "キーボーから初項、交差、末項を順に入力して下さい。" << endl;
cout << "初項=";
scanf("%d", &s);
cout << "交差=";
scanf("%d", &k);
cout << "末項=";
scanf("%d", &m);
y = f(s, k, m); //社員f()に仕事を命じている
cout << "初項" << s << "交差" <<
k << "末項" << m << "の等差数列の和=" <<
y << endl;
}
int f(int s, int k, int m) {
int i, w = 0;
for (i = s; i <= m; i += k)w += i;
return(w);
}
実行画面例
キーボーから初項、交差、末項を順に入力して下さい。
初項=45
交差=8
末項=845
初項45、交差8、末項845の等差数列の和=44945
さて、今回のコードを次のように書き換えてみて下さい。
#include<iostream> //入出力のために組み込む
using namespace std; //coutを使えるようにするために必要
int f(int a, int b, int c); //a:初項 b:交差 c:末項
int main() {
int s, k, m, y;
cout << "キーボーから初項、交差、末項を順に入力して下さい。" << endl;
cout << "初項=";
scanf("%d", &s);
cout << "交差=";
scanf("%d", &k);
cout << "末項=";
scanf("%d", &m);
y = f(s, k, m); //社員f()に仕事を命じている
cout << "初項" << s << "交差" <<
k << "末項" << m << "の等差数列の和=" <<
y << endl;
}
int f(int x, int y, int z) {
int i, w = 0;
for (i = x; i <= z; i += y)w += i;
return(w);
}
変更箇所は、色で示してあります。
こんなことをしてプログラムは正常に動くのでしょうか。
Ctrl+F5をしてみて下さい。
答えは例によって30行下。
答え
正常に動くです。
どうしてでしょうか。不思議ですね。
それは
ということなのです。
関数内で変数名がそろっていれば良いのです。
どうしてかは、次話で扱う変数のスコープと値参照が関係しています。
ですので、理由を知りたい型は次話をクリック!