C++ Primer习题解答 Chapter6

6-3

#include<iostream>
//#include<vector>
//#include<string>
//#include<cctype>
//#include<iterator>
//#include<stdexcept>

using namespace std;

int fact(int d);

int main(int argc, char*argv[])
{
	cout << fact(5) << endl;
	system("pause");
	return 0;
}

int fact(int d) {
	int result = 1;
	while (d > 1) {
		result *= d--;
	}
	return result;
}

6-4

#include<iostream>
#include<vector>
#include<string>
#include<cctype>
#include<iterator>
#include<stdexcept>

using namespace std;

void fact();

int main(int argc, char*argv[])
{
	fact();
	system("pause");
	return 0;
}

void fact() {
	int result = 1;
	int d;
	cout << "please input an integer:";
	cin >> d;
	while (d > 1) {
		result *= d--;
	}
	cout << result << endl;
}

6-5

#include<iostream>
#include<vector>
#include<string>
#include<cctype>
#include<iterator>
#include<stdexcept>

using namespace std;

int abs(int i);

int main(int argc, char*argv[])
{
	int i;
	cout << "please input an integer:";
	cin >> i;
	cout << abs(i) << endl;
	system("pause");
	return 0;
}

int abs(int i) 
{
	return (i >= 0) ? i : -i;
}

6-7

#include<iostream>
#include<vector>
#include<string>
#include<cctype>
#include<iterator>
#include<stdexcept>

using namespace std;

int callCount();
int main(int argc, char*argv[])
{
	for (int i = 0; i < 10; i++) {
		cout << callCount() << endl;
	}
	system("pause");
	return 0;
}

int callCount()
{
	static int count = 0;
	return count++;
}

6-10

#include<iostream>
#include<vector>
#include<string>
#include<cctype>
#include<iterator>
#include<stdexcept>

using namespace std;

void swap(int *, int*);
int main(int argc, char*argv[])
{
	int i = 5, j = 10;
	swap(i, j);
	cout << i << " " << j << endl;
	system("pause");
	return 0;
}

void swap(int *p1, int *p2)
{
	int tmp = *p1;
	*p1 = *p2;
	*p2 = tmp;
}

6-11

#include<iostream>
#include<vector>
#include<string>
#include<cctype>
#include<iterator>
#include<stdexcept>

using namespace std;

void reset(int &i);
int main(int argc, char*argv[])
{
	int i = 100;
	reset(i);
	cout << i << endl;
	system("pause");
	return 0;
}

void reset(int &i)
{
	i = 0;
}

6-12

#include<iostream>
#include<vector>
#include<string>
#include<cctype>
#include<iterator>
#include<stdexcept>

using namespace std;

void swap(int &i, int &j);

int main(int argc, char*argv[])
{
	int i = 5, j = 10;
	swap(i, j);
	cout << i << " " << j << endl;
	system("pause");
	return 0;
}

void swap(int &i, int&j)
{
	int tmp = i;
	i = j;
	j = tmp;
}

6-17

#include<iostream>
#include<vector>
#include<string>
#include<cctype>
#include<iterator>
#include<stdexcept>

using namespace std;

int hasUpper(const string &s);
void toLower(string &s);

int main(int argc, char*argv[])
{
	string s("Hello, World!");
	toLower(s);
	cout << "转换为小写:" << s << endl;
	cout << hasUpper(s) << endl;
	cout << hasUpper("hellOworld") << endl;
	system("pause");
	return 0;
}

int hasUpper(const string &s)
{
	for (auto it = s.begin(); it != s.end(); it++) {
		if (isupper(*it)) {
			return it - s.begin();
		}
	}
	return -1;
}

void toLower(string &s) {
	for (auto &ch : s) {
		ch = tolower(ch);
	}
}

6-21

#include<iostream>
#include<vector>
#include<string>
#include<cctype>
#include<iterator>
#include<stdexcept>

using namespace std;

int cmp(int a, const int *b);

int main(int argc, char*argv[])
{
	int i = 5, j = 10, *p = &i;
	int res = cmp(j, p);
	cout << res << endl;
	system("pause");
	return 0;
}

int cmp(int a, const int *b) 
{
	return((a > *b) ? a : *b);
}

6-22

#include<iostream>
#include<vector>
#include<string>
#include<cctype>
#include<iterator>
#include<stdexcept>

using namespace std;

void swap1(const int *p, const int *q);
void swap2(int *p, int *q);
void swap3(int *(&p), int *(&q));

int main(int argc, char*argv[])
{
	int i = 10, j = 20;
	//p指向i,q指向j
	int *p = &i, *q = &j;
	cout << "初始情况" << endl;
	cout << i << " " << j << endl;
	cout << p << " " << q << endl;
	swap1(p, q);
	cout << "交换指针形参" << endl;
	cout << i << " " << j << endl;
	cout << p << " " << q << endl;
	swap2(p, q);
	cout << "交换指针指向的变量" << endl;
	cout << i << " " << j << endl;
	cout << p << " " << q << endl;
	swap3(p, q);
	cout << "通过引用交换指针" << endl;
	cout << i << " " << j << endl;
	cout << p << " " << q << endl;
	system("pause");
	return 0;
}

//这个函数没什么用
void swap1(const int *p, const int *q)
{
	const int *tmp = q;
	q = p;
	p = tmp;
}
//交换两个指针指向的int变量
void swap2(int *p, int *q)
{
	int tmp = *q;
	*q = *p;
	*p = tmp;
}
//通过指针引用交换两个指针
void swap3(int *(&p), int *(&q))
{
	int *tmp = q;
	q = p;
	p = tmp;
}

6-23

#include<iostream>
#include<vector>
#include<string>
#include<cctype>
#include<iterator>
#include<stdexcept>

using namespace std;

void print1(const int *p);
void print2(const int *begin, const int *end);
void print3(const int *p, const int size);

int main(int argc, char*argv[])
{
	int i = 0;
	int j[2] = { 0, 1 };
	print1(&i);
	print2(begin(j),end(j));
	print3(j, end(j) - begin(j));
	system("pause");
	return 0;
}

void print1(const int *p)
{
	cout << *p << endl;
}

void print2(const int *begin, const int *end) 
{
	while (begin != end)
		cout << *(begin++) << endl;
}

void print3(const int *p, const int size) 
{
	const int *begin = p;
	while (p != begin + size)
		cout << *(p++) << endl;
}

6-25

#include<iostream>
#include<vector>
#include<string>
#include<cctype>
#include<iterator>
#include<stdexcept>

using namespace std;

int main(int argc, char*argv[])
{
	string str;
	for (int i = 1; i < argc; i++) {
		str += argv[i];
	}
	cout << str << endl;
	system("pause");
	return 0;
}

6-26

#include<iostream>
#include<vector>
#include<string>
#include<cctype>
#include<iterator>
#include<stdexcept>

using namespace std;

int main(int argc, char*argv[])
{
	for (int i = 0; i < argc; i++) {
		cout << "argv[" << i << "]" <<" = "<< argv[i] << endl;
	}
	system("pause");
	return 0;
}

6-27

#include<iostream>
#include<vector>
#include<string>
#include<cctype>
#include<iterator>
#include<stdexcept>
#include<initializer_list>

using namespace std;


void sum(const initializer_list<int> &list);

int main(int argc, char*argv[])
{
	sum({1,2,3,4,5});
	system("pause");
	return 0;
}

void sum(const initializer_list<int> &list)
{
	int sum = 0;
	for (auto e:list) {
		sum += e;
	}
	cout <<"sum is "<< sum << endl;
}

6-33

#include<iostream>
#include<vector>
#include<string>
#include<cctype>
#include<iterator>
#include<stdexcept>

using namespace std;


void print_vector(const vector<int> &v, unsigned int index);

int main(int argc, char*argv[])
{
	vector<int> v = { 1,2,3,4,5 };
	print_vector(v, 0);
	system("pause");
	return 0;
}

void print_vector(const vector<int> &v, unsigned int index)
{
	if (!v.empty() and index < v.size()) {
		cout << v[index] << endl;
		print_vector(v, index + 1);
	}
}

6-37

#include<iostream>
#include<vector>
#include<string>
#include<cctype>
#include<iterator>
#include<stdexcept>

using namespace std;

//定义一个接受并返回数组引用的函数,什么都不做
int(&func(int(&arr)[3]))[3]
{
	return arr;
}
//通过别名简化
using arrayRef = int(&)[3];
typedef int(&arrRef)[3];
arrayRef func1(arrRef arr) {
	return arr;
}
//尾置返回
auto func2(int (&arr)[3])->int(&)[3] 
{
	return arr;
}

int main(int argc, char*argv[])
{
	int array[3] = { 0, 1, 2 };
	func(array);
	func1(array);
	func2(array);
	system("pause");
	return 0;
}



6-38

#include<iostream>
#include<vector>
#include<string>
#include<cctype>
#include<iterator>
#include<stdexcept>

using namespace std;

int odd[] = { 1, 3, 5, 7, 9 };
int even[] = { 0, 2, 4, 6, 8 };

decltype(odd) &arrPtr(int i)
{
	return (i % 2) ? odd : even;
}

int main(int argc, char*argv[])
{
	arrPtr(5);
	system("pause");
	return 0;
}

6-42

#include<iostream>
#include<vector>
#include<string>
#include<cctype>
#include<iterator>
#include<stdexcept>

using namespace std;

string make_plural(int ctrl, const string &word, const string &ending = "s");

int main(int argc, char*argv[])
{
	cout << make_plural(2, "fish", "es") << endl;
	cout << make_plural(2, "rule") << endl;
	system("pause");
	return 0;
}

string make_plural(int ctrl, const string &word, const string &ending)
{
	return (ctrl > 1) ? word + ending : word;
}

6-44

#include<iostream>
#include<vector>
#include<string>
#include<cctype>
#include<iterator>
#include<stdexcept>

using namespace std;

int abs(int i);

int main(int argc, char*argv[])
{
	int i;
	cout << "please input an integer:";
	cin >> i;
	cout << abs(i) << endl;
	system("pause");
	return 0;
}

int abs(int i) 
{
	return (i >= 0) ? i : -i;
}

6-56

#include<iostream>
#include<vector>
#include<string>
#include<cctype>
#include<iterator>
#include<stdexcept>

using namespace std;

int add(int a, int b)
{
	return a + b;
}

int fminus(int a, int b)
{
	return a - b;
}

int multiply(int a, int b)
{
	return a * b;
}

int divide(int a, int b)
{
	return a / b;
}
int main(int argc, char*argv[])
{
	int(*pfadd)(int, int) = add;
	int(*pfminus)(int, int) = fminus;
	int(*pfmul)(int, int) = multiply;
	int(*pfdiv)(int, int) = divide;
	vector<int(*)(int, int)> vf;
	
	vf.push_back(pfadd);
	vf.push_back(pfminus);
	vf.push_back(pfmul);
	vf.push_back(pfdiv);
	for (auto fp : vf) {
		cout << fp(10, 5) << endl;
	}
	system("pause");
	return 0;
}
发布了22 篇原创文章 · 获赞 35 · 访问量 6063

猜你喜欢

转载自blog.csdn.net/cxm2643199642/article/details/104383613