C ++ Primer第5版の演習の回答[第6章]

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;
}

 

おすすめ

転載: blog.csdn.net/Dust_Evc/article/details/114271410