C++ Primer Plus第四章 习题

目录

复习题

1. 如何声明下述数据库?

2. 使用模板类array而不是数组来完成问题1

3. 声明一个包含5个元素的int数组,并将它初始化为前5个正奇数。

4. 编写一条语句,将问题3中数组第一个元素和最后一个元素的和赋给变量even。

5. 编写一条语句,显示float数组ideas中的第2个元素的值。

6. 声明一个char的数组,并将其初始化为字符串 “cheeseburger”。

7. 声明一个string对象,并将其初始化为字符串 “WaldorfSalad”。

8. 设计一个描述鱼的结构声明。结构中应当包括品种、重量(整数、单位为盎司)和长度(英寸,包括小数)。

9. 声明一个问题8中定义的结构的变量,并对其进行初始化。

10. 用enum定义一个名为 Response的类型,它包含Yes、No和Maybe等枚举量,其中Yes的值为1,No为0,Maybe为2。

11. 假设ted是一个double变量,请声明一个指向ted的指针,并使用该指针来显示ted的值。

12. 假设treacle是一个包含10个元素的float数组,请声明一个指向treacle的第一个元素的指针,并使用该指针来显示数组的第一个元素和最后一个元素。

13. 编写一段代码,要求用户输入一个正整数,然后创建一个动态int数组,其中包含的元素数目等于用户输入的值。首先使用new来完成这项任务,再使用vector对象来完成这项任务。

14 下面的代码是否有效?如果有效,它将打印出什么结果?

16. 程序清单4.6 指出了混合输入数字和一行字符串时存储的问题。

17. 声明一个vector对象和一个array对象,同名都包含10个string对象。指出所需的头文件,但不要使用using。使用const来指定要包含的string对象数。

编程题(题号对应test):

复习题

1. 如何声明下述数据库?

a. actor 是由30个char组成的数组。

b. betsie 是由100个short组成的数组。

c. chuck是由13个float组成的数组。

d. dipsea是由64个long double组成的数组。

char actor[30];
short betsie[100];
float chuck[13];
long double dipsea[64];

2. 使用模板类array而不是数组来完成问题1

vectoractor;
vectorbetsie;
vector chuck;
vector dipsea;

3. 声明一个包含5个元素的int数组,并将它初始化为前5个正奇数。

unsigned int arr[5] = {1,,3,5,7,9};

4. 编写一条语句,将问题3中数组第一个元素和最后一个元素的和赋给变量even。

unsigned int even = arr[0] + arr[4];


5. 编写一条语句,显示float数组ideas中的第2个元素的值。

cout << float ideas[1];

6. 声明一个char的数组,并将其初始化为字符串 “cheeseburger”。

char arr[] = "cheeseburger";

7. 声明一个string对象,并将其初始化为字符串 “WaldorfSalad”。

string str = "WaldorfSalad";

8. 设计一个描述鱼的结构声明。结构中应当包括品种、重量(整数、单位为盎司)和长度(英寸,包括小数)。

struct fish{
    string variety;
    int weight;
    float length;
};

9. 声明一个问题8中定义的结构的变量,并对其进行初始化。

fish ex8 = {"fish01",5,7.89};

10. 用enum定义一个名为 Response的类型,它包含Yes、No和Maybe等枚举量,其中Yes的值为1,No为0,Maybe为2。

enum Response{Yes = 1,No=0,Maybe=2};

11. 假设ted是一个double变量,请声明一个指向ted的指针,并使用该指针来显示ted的值。

double *pt = &ted;
cout << *pt <

12. 假设treacle是一个包含10个元素的float数组,请声明一个指向treacle的第一个元素的指针,并使用该指针来显示数组的第一个元素和最后一个元素。

float *pt = &arr[0];
cin >> *pt;
cin >> *(pt+9);

13. 编写一段代码,要求用户输入一个正整数,然后创建一个动态int数组,其中包含的元素数目等于用户输入的值。首先使用new来完成这项任务,再使用vector对象来完成这项任务。

int main(void)
{
    int size;
    cout << "please input a positive number : ";
    cin >> size;
    int * dyn_arr = new int[size];
    vector dv(size);
}


14 下面的代码是否有效?如果有效,它将打印出什么结果?

cout << (int *)"Home of the jolly bytes";

代码是有效的,但它将打印出字符串 `"Home of the jolly bytes"` 的内存地址,而不是字符串本身。这是因为代码将字符串强制转换为一个 `int*`(整型指针),然后使用 `cout` 打印指针的值。

由于字符串是以字符数组的形式存储在内存中,将其解释为整数指针是不正确的操作。这种强制类型转换会将字符数组的起始内存地址作为整数值打印出来。

15. 编写一段代码,给问题8中描述的结构动态分配内存,再读取该结构的成员的值。

struct fish{
    string variety;
    int weight;
    float length;
};
fish new_fish = new fish{"fish02",10,10.05};
cout << new_fish.variety <

16. 程序清单4.6 指出了混合输入数字和一行字符串时存储的问题。

如果将下面的代码:
`cin.getline(address,80);`替换为;
`cin >> address;`
将对程序的运行带来什么影响?

1. 输入限制:使用 `cin >> address`,默认情况下,输入将被空格或换行符分隔。这意味着,如果输入中包含空格,则只会读取并存储第一个空格之前的部分,并且后面的内容将被忽略。换句话说,`cin >> address` 只读取并存储了输入的一个单词。

2. 缓冲区溢出风险:使用 `cin >> address`,如果输入超过 `address` 字符数组的容量,将导致缓冲区溢出。这可能破坏邻近内存中的其他变量,或者导致程序崩溃。

3. 读取输入行:相比之下,`cin.getline(address, 80)` 可以一次性读取整行输入,并将其存储在 `address` 字符数组中,包括空格和其他特殊字符,直到达到给定的字符数限制。这适用于读取包含空格的输入行或多词语句。

所以,使用 `cin >> address` 可能会导致输入限制和缓冲区溢出问题。因此,根据你的具体需求,选择合适的输入方式非常重要。

17. 声明一个vector对象和一个array对象,同名都包含10个string对象。指出所需的头文件,但不要使用using。使用const来指定要包含的string对象数。

#include 
#include 
#include 
const int str_num = 10;
std::vector vstr(str_num);
std::array arr_str;

编程题(题号对应test):

#include
using namespace std;
#include 
#include 
void test01()
{
    string first_name, last_name;
    unsigned int age;
    char grade;
    cout << "What is your first name? ";
    getline(cin, first_name);

    cout << "What is your last name? ";
    getline(cin, last_name);

    cout << "What is your age? ";
    cin >> age;

    cout << "What letter grade do you deserve? ";
    cin >> grade;

    cout << "Name : " << last_name << "," << first_name << endl;
    cout << "Grade : " << ++grade << endl;
    cout << "Age : " << age << endl;
}

void test02()
{
    string name, dessert;
    cout << "Enter your name : \n";
    getline(cin, name);
    cout << "Enter your favorite dessert : \n";
    getline(cin, dessert);
    cout << "I have some delicious " << dessert;
    cout << " for you , " << name << ".\n";
}
void test03()
{
    char first_name[20];
    string last_name;
    cout << "Enter your first name: ";
    cin.getline(first_name, 20);

    cout << "Enter your last name: ";
    getline(cin, last_name);

    cout << "Here's the information in a single string: " << last_name << ", " << first_name << endl;
}

void test04()
{
    string first_name, last_name;
    cout << "Enter your first name: \n";
    getline(cin, first_name);

    cout << "Enter your last name: ";
    getline(cin, last_name);

    cout << "Here's the information in a single string: " << last_name << ", " << first_name << endl;
}
void test05()
{
    struct CandyBar {
        string brand;
        float candy_weight;
        int calorie;
    }; 
    CandyBar snack = { "Mocha Munch",2.3,350 };
    cout << "糖的品牌:" << snack.brand << endl;
    cout << "糖的重量:" << snack.candy_weight << endl;
    cout << "糖的卡路里:" << snack.calorie << endl;
}

void test06()
{
    struct CandyBar {
        string brand;
        float candy_weight;
        int calorie;
    };

    CandyBar snack[3] = {
        {"Mocha Munch_00",2.3,350},
        {"Mocha Munch_01",2.4,355},
        {"Mocha Munch_02",2.5,360}
    };
    cout << "     brand     candy_wieght      calorie" << endl;
    for (int i = 0; i < 3; i++) {
        cout << snack[i].brand << "       " << snack[i].candy_weight
            << "          " << snack[i].calorie << endl;
    }
}

void test07()
{
    struct pizza_info {
        string company;
        float diameter;
        float weight;
    }pizza;
    cout << "please input company of pizza : ";
    getline(cin, pizza.company);

    cout << "please input weight of pizza : ";
    cin >> pizza.weight;

    cout << "please input diameter of pizza : ";
    cin >> pizza.diameter;

    cout << "Company is : " << pizza.company << "Weight is : "
        << pizza.weight << " , Diameter is : " << pizza.diameter << endl;
}

void test08()
{
    struct pizza_info {
        string company;
        float diameter;
        float weight;
    };
    pizza_info* p = new pizza_info;
    cout << "please input diameter of pizza : ";
    cin >> p->diameter;

    cin.get();/*处理换行符,为下一行的读取做出准备*/
    cout << "please input company of pizza : ";
    getline(cin, p->company);

    cout << "please input weight of pizza : ";
    cin >> p->weight;


    cout << "Company is : " << p->company << " Weight is : "
        << p->weight << " , Diameter is : " << p->diameter << endl;
}
void test09()
{
    struct CandyBar {
        string brand;
        float candy_weight;
        int calorie;
    };
    CandyBar* snack = new CandyBar[3];
    for (int i = 0; i < 3; i++)
        snack[i] = { "Mocha Munch",2.3,350 };

    cout << "     brand     candy_wieght      calorie" << endl;
    for (int i = 0; i < 3; i++) {
        cout << snack[i].brand << "_0" << i << "      " << snack[i].candy_weight
            << "          " << snack[i].calorie << endl;
    }
    delete[] snack;
}

void test10()
{

    const int times = 3;
    arraygrade;

    cout << "please input your first grade : ";
    cin >> grade[0];

    cout << "please input your second grade : ";
    cin >> grade[1];

    cout << "please input your third grade : ";
    cin >> grade[2];

    double average = (grade[0] + grade[1] + grade[2]) / times;
    cout << times << " times average is " << average << endl;
}
int main()
{
    //test01();
    //test02();
    //test03();
    //test04();
    //test05();
    //test06();
    //test07();
    //test08();
    //test09();
    //test10();
    return 0;
}

你可能感兴趣的:(#,C++,Primer,Plus,算法,数据结构)