C ++ Primer第5版演習の回答[一般リスト]:https://blog.csdn.net/Dust_Evc/article/details/114334124
6.1
実際のパラメーターは呼び出し元の関数に格納され、正式なパラメーターは呼び出された関数に格納されます。
実際のパラメーターは、関数呼び出しの実際の値と仮パラメーターの初期値です。
6.2
(a)int f(){ 文字列s; // ... return s; } (b)f2(int i){/ * ... * /} (c)int calc(int v1、int v1){/ * ... * /} (d)double square(double x)return x * バツ;
6.3
#include <iostream>
int fact(int i)
{
return i > 1 ? i * fact(i - 1) : 1;
}
int main()
{
std::cout << fact(5) << std::endl;
return 0;
}
6.4
#include <iostream>
#include <string>
using std::cout;
using std::cin;
using std::endl;
using std::string;
unsigned main()
{
void interactive_fact();
interactive_fact();
string Repeat = "是否重复本程序? y/n";
cout << Repeat << endl;
char C = ' ';
while (cin >> C && C == 'y')
{
interactive_fact();
cout << Repeat << endl;
}
return 0;
}
void interactive_fact()
{
unsigned num = 0, mul = 1;
cout << "请输入一个1到20之间的数字:";
cin >> num;
string out_of_range = "该数字不在范围内!请重新输入:";
while (num < 1 || num >20)
{
cout << out_of_range;
cin >> num;
}
while (num > 0)
mul *= num--;
cout << "该数字的阶乘为:" << mul << endl;
}
6.5
#include <iostream>
int abs(int i)
{
return i > 0 ? i : -i;
}
int main()
{
std::cout << abs(-5) << std::endl;
return 0;
}
6.6
**正式なパラメータ**は関数パラメータリストで定義されています。
**ローカル変数**はコードブロックで定義されています。
**ローカル静的変数**は、プログラムの実行パスがオブジェクト定義ステートメントを初めて通過するときに初期化され、プログラムが終了するまで破棄されません。
6.7
int generate()
{
static int ctr = 0;
return ctr++;
}
6.8
Chapter6.h
#pragma once
#ifndef HEADER_H
#define HEADER_H
#include <iostream>
#include <string>
using std::cout;
using std::cin;
using std::endl;
using std::string;
void interactive_fact();
#endif // !HEADER_H
6.9
fact.cpp
#include"Chapter6.h"
void interactive_fact()
{
unsigned num = 0, mul = 1;
cout << "请输入一个1到20之间的数字:" ;
cin >> num;
string out_of_range = "该数字不在范围内!请重新输入:";
while (num < 1 || num >20)
{
cout << out_of_range;
cin >> num;
}
while (num > 0)
mul *= num--;
cout << "该数字的阶乘为:" << mul << endl;
}
factMain.cpp
#include"Chapter6.h"
unsigned main()
{
interactive_fact();
string Repeat = "是否重复本程序? y/n";
cout << Repeat << endl;
char C = ' ';
while (cin>>C && C == 'y')
{
interactive_fact();
cout << Repeat << endl;
}
return 0;
}
6.10
6.11
6.40
(a)正解。
(b)エラー。パラメータにデフォルト値が割り当てられると、それ以降のすべてのパラメータにはデフォルト値が必要になるためです。
6.41
(a)違法。最初のパラメーターはデフォルトのパラメーターではありません。少なくとも1つの実際のパラメーターが必要です。
(b)法務。
(c)法的であるが、当初の意図と矛盾している。文字 `*`は `int`として解釈され、2番目のパラメーターに渡されます。元々の意図は、3番目のパラメーターを渡すことです。
6.42
#include <iostream>
#include <string>
using std::string;
using std::cout;
using std::endl;
string make_plural(size_t ctr, const string& word, const string& ending = "s")
{
return (ctr > 1) ? word + ending : word;
}
int main()
{
cout << "singual: " << make_plural(1, "success", "es") << " "
<< make_plural(1, "failure") << endl;
cout << "plural : " << make_plural(2, "success", "es") << " "
<< make_plural(2, "failure") << endl;
return 0;
}