p.149 演習6-4 作成例
//p.149 演習6-4 ex0603.cpp 整数の4乗値を求める
#include <stdio.h>
//--- nの2乗値を返す ---//
int sqr(int n)
{
return n * n;
}
//--- nの4乗値を返す ---//
int pow4(int n)
{
return sqr(n) * sqr(n);
}
int main(void)
{
int x;
printf("整数:"); scanf("%d", &x);
printf("4乗は%dです。\n", pow4(x));
return 0;
}
p.150 値渡し
・関数の引数として変数を指定できる ・この時、変数名と引数名が違っても良い(違うことが望ましい) ・というのも、C言語の基本は値渡しであり、変数の値が引数にコピーされるから ・よって、関数の内部で引数を変数のように用いて、値を変更しても良い ・コピーなので、引数の値を変更しても、呼び出し側の変数とは無関係だから
p.150 list0606.cpp
//p.150 list0606.cpp べき乗を求める(その2)
#include <stdio.h>
//--- xのn乗を返す ---//
double power(double x, int n)
{
double tmp = 1.0;
while (n-- > 0) { // 引数nの値をデクリメントしているが、コピーなので悪影響はない
tmp *= x; // tmpにxを掛ける
}
return tmp;
}
int main(void)
{
double a;
int b;
printf("aのb乗を求めます。\n");
printf("実数a:"); scanf("%lf", &a);
printf("整数b:"); scanf("%d", &b);
printf("%.2fの%d乗は%.2fです。\n", a, b, power(a, b)); //bの値が関数内で引数nにコピーされている
return 0;
}
p.151(引数における暗黙の型変換)
・関数の呼び出しにおける引数(実引数)と、関数で定義している引数(仮引数)の型は一致させるのが基本。
・しかし、自動的に型を変換できる場合は、型が違っても良い
・これを引数における暗黙の型変換という
・例: double sqrt(double x) { return x * x; } に対して、sqrt(5)と整数を与えると、
暗黙の型変換により sqrt(5.0) となるのでOK
・例: sqrt("ABC")と文字列を与えると、型変換できないのでエラー
p.151 演習6-5 ヒント
・関数の中で、for/while文による繰返しを行えば良い
作成例 その1
//p.151 演習6-5
#include <stdio.h>
//--- 1からnまでの全整数の和を返す ---//
int sumup(int n)
{
int sum = 0; //合計値
for (int i = 1; i <= n; i++) { // nまで繰返す
sum += i; // 合計値に足し込む
}
return sum;
}
int main(void)
{
int x;
printf("整数:"); scanf("%d", &x);
printf("1から%dまでの全整数の和は%d\n", x, sumup(x));
return 0;
}
作成例 その2
//p.151 演習6-5
#include <stdio.h>
//--- 1からnまでの全整数の和を返す ---//
int sumup(int n)
{
int sum = n; //合計値
while (n-- > 0) { // nが0超である間、デクリメントしながら繰返す(値渡しなのでOK)
sum += n; // 合計値に足し込む
}
return sum;
}
int main(void)
{
int x;
printf("整数:"); scanf("%d", &x);
printf("1から%dまでの全整数の和は%d\n", x, sumup(x));
return 0;
}