《C++ Primer Plus(第六版)》(12)(第八章 函数探幽 编程题答案)

时间:2022-03-12 14:38:59

8.8编程练习

1.

void printInfo(char* str, int check = 0)
{
static int count = 0;
++count;
if (check == 0)
{
cout << str << endl;
}
else
{
for (int i = 0; i < count; ++i)
{
cout << str << endl;
}
}
}
int main(){printInfo("fsdf");printInfo("FableGame");printInfo("FableGame2",32);printInfo("Hello Fable");printInfo("Hello Fable333333333333", 5);cin.get();cin.get();return 0;} 

2.

struct CandyBar 
{
string name;
double weight;
int energy;
};
void fillCandyBar(CandyBar& cb, const char* name = "Millennium Munch", double weight = 2.85, int energy = 350);void printInfo(const CandyBar& cb);
int main(){CandyBar cb;fillCandyBar(cb);printInfo(cb);cin.get();cin.get();return 0;}
void fillCandyBar(CandyBar& cb, const char* name /*= "Millennium Munch"*/, double weight /*= 2.85*/, int energy /*= 350*/){cb.name = name;cb.weight = weight;cb.energy = energy;}
void printInfo(const CandyBar& cb){cout << "name: " << cb.name << " weight:" << cb.weight << " energy:" << cb.energy;}

3.

#include <iostream>
#include <array>
#include <string>
#include <set>
using namespace std;

void change(string& str)
{
for (size_t i = 0; i < str.length(); ++i)
{
str[i] = toupper(str[i]);
}
}
int main()
{
cout << "Enter a string (q to quit): ";
string str;
getline(cin, str);
while (cin && str != "q")
{
change(str);
cout << str << endl;
cout << "Next string (q to quit): ";
getline(cin, str);

}
cout << "Bye." << endl;
cin.get();
cin.get();
return 0;
}

4.

//
// main.cpp
// HelloWorld
// 关注微信公众号:传说之路,大家共同学习
// Created by feiyin001 on 16/4/3.
// Copyright (c) 2016年 FableGame. All rights reserved.
//

#include <iostream>
#include <cstring>
using namespace std;
//结构struct stringy{    char * str;    int ct;};
//函数声明void set(stringy& stry, const char* ch);void show(const stringy& str, int times = 1);void show(const char* ch, int times = 1);
//main函数int main(int argc, const char * argv[]) {        stringy beany;    char testing[] = "Reality isn't what it used to be";    set(beany, testing);    show(beany);    show(beany, 2);    testing[0] = 'D';    testing[1] = 'u';    show(testing);    show(testing, 3);    show("Done!");    return 0;}
//设置内容void set(stringy& stry, const char* ch){    stry.ct = (int)strlen(ch);    stry.str = new char[stry.ct];    strcpy(stry.str, ch);    }
//显示内容void show(const stringy& str, int times){    for (int i = 0; i < times; ++i) {        cout << str.str << endl;    }}
//显示字符串void show(const char* ch, int times){    for (int i = 0; i < times; ++i) {        cout << ch << endl;    }}

5.

template<typename T> 
T max5(T* a);
int main(){int a[5] = { 1, 2, 3, 4, 5 };double b[] = { 23.32, 323, 22, 353.3, 323.3, 99999 };cout << max5(a) << endl;cout << max5(b) << endl;std::cin.get();std::cin.get();return 0;}
template<typename T>T max5(T* a){T b = a[0];for (int i = 1; i < 5; ++i){if ( b < a[i]){b = a[i];}}return b;}

6.

template<typename T> 
T maxn(T a[], int num);
template<> char* maxn(char* a[], int num);
int main(){int a[6] = { 1, 2, 3, 4, 5, 6 };double b[4] = { 23.32, 323, 22, 353.3 };cout << maxn(a, 6) << endl;cout << maxn(b, 4) << endl;char* c[5] = { "abc", "fable game", "FableGame", "C++", "凡人修真3D" };cout << maxn(c, 5) << endl;std::cin.get();std::cin.get();return 0;}
template<typename T>T maxn(T a[], int num){T b = a[0];for (int i = 1; i < num; ++i){if ( b < a[i]){b = a[i];}}return b;}
template<>char* maxn(char* a[], int num){size_t len = strlen(a[0]);char* ch = a[0];for (int i = 1; i < num; ++i){if (len < strlen(a[i])){ch = a[i];}}return ch;}

7.

修改前:

#include <iostream>
#include <array>
#include <string>
#include <set>
using namespace std;

template<typename T>
void ShowArray(T arr[], int n);
template<typename T>
void ShowArray(T* arr[], int n);
struct debts {char name[50];double amount;};
int main(){int things[6] = { 13, 31, 103, 301, 310, 130 };struct debts mr_E[3] ={{ "Ima Wolfe", 2400.0 },{ "Ura Foxe", 1300.0 },{ "Iby Stout", 1800.0 }};double * pd[3];for (int i = 0; i < 3; i++){pd[i] = &mr_E[i].amount;}cout << "Listing Mr. E's counts of things:\n";ShowArray(things, 6);cout << "Listing Mr. E's debts:\n";ShowArray(pd, 3);std::cin.get();std::cin.get();return 0;}
template<typename T>void ShowArray(T arr[], int n){cout << "template A\n";for (int i = 0; i < n; i++){cout << arr[i] << ' ';}cout << endl;}
template<typename T>void ShowArray(T* arr[], int n){cout << "template B\n";for (int i = 0; i < n; i++){cout << *arr[i] << ' ';}cout << endl;}

修改后:

#include <iostream>
#include <array>
#include <string>
#include <set>
using namespace std;

template<typename T>
void ShowArray(T arr[], int n);
template<typename T>
void ShowArray(T* arr[], int n);
template<typename T>
T SumArray(T arr[], int n);
template<typename T>
T SumArray(T* arr[], int n);
struct debts {char name[50];double amount;};
int main(){int things[6] = { 13, 31, 103, 301, 310, 130 };struct debts mr_E[3] ={{ "Ima Wolfe", 2400.0 },{ "Ura Foxe", 1300.0 },{ "Iby Stout", 1800.0 }};double * pd[3];for (int i = 0; i < 3; i++){pd[i] = &mr_E[i].amount;}cout << "Listing Mr. E's counts of things:\n";ShowArray(things, 6);cout << "sum: " << SumArray(things, 6) << endl;cout << "Listing Mr. E's debts:\n";ShowArray(pd, 3);cout << "sum: " << SumArray(pd, 3) << endl;std::cin.get();std::cin.get();return 0;}
template<typename T>void ShowArray(T arr[], int n){cout << "template A\n";for (int i = 0; i < n; i++){cout << arr[i] << ' ';}cout << endl;}
template<typename T>void ShowArray(T* arr[], int n){cout << "template B\n";for (int i = 0; i < n; i++){cout << *arr[i] << ' ';}cout << endl;}
template<typename T>T SumArray(T arr[], int n){T sum = 0;for (int i = 0; i < n; i++){sum += arr[i];}return sum;}
template<typename T>T SumArray(T* arr[], int n){T sum = 0;for (int i = 0; i < n; i++){sum += *arr[i];}return sum;}