C++PrimerPlus 第四章 复合类型(复习题含答案)
1、如何声明下述数据?
a. actor是由30个char组成的数组。
b. betsie是由100个short组成的数组。
c. chuck是由13个float组成的数组。
d. dipsea是由64个long double组成的数组。//a. char actors[30]; //b. short betsie[100]; //c. float chuck[13]; //d. long double dipsea[64];
2、使用模板类array而不是数组来完成问题1。
//a. array<char, 30>actors; //b. array<short, 100>betsie; //c. array<float, 12>chuck; //d. array<long double, 64>dipsea;
3、声明一个包含5个元素的int数组,并将它初始化为前5个正奇数。
int oddly[5] = {1, 3, 5, 7, 9};
4、编写一条语句,将问题3中数组第一个元素和最后一个元素的和赋给变量even。
int even = oddly[0] + oddly[4];
5、编写一条语句,显式float数组ideas中的第2个元素的值。
cout << ideas[1] << endl;
6、声明一个char的数组,并将其初始化为字符串“cheeseburger”。
char c[13] = “cheeseburger”;
或者
char c[] = “cheeseburger”;
7、声明一个string对象,并将其初始化为字符串“Waldorf Salad”。
string s = “Waldorf Salad”;
8、设计一个描述鱼的结构声明。结构中应当包括品种、重量(整数,单位为盎司)和长度(英寸,包括小数)。
struct fish{ char kind[20]; int weight; float length; };
9、声明一个问题8中定义的结构的变量,并对它进行初始化。
fish f{ “trout”, 12, 26.25 };
10、用enum定义一个名为Response的类型,它包含Yes、No和Maybe等枚举量,其中Yes的值为1,No为0,Maybe为2。
enum Response{No, Yes, Maybe};
11、假设ted是一个double变量,请声明一个指向ted的指针,并使用该指针来显式ted的值。
double* pd = &ted; cout << *pd << “\n”;
12、假设treacle是一个包含10个元素的float数组,请声明一个指向treacle的第一个元素的指针,并使用该指针来显示数组的第一个元素和最后一个元素。
float* pf = treacle; //or = &treacle[0] cout << pf[0] << “ ” << pf[9] << “\n”; //or use *pf and *(pf + 9)
13、编写一段代码,要求用户输入一个正整数,然后创建一个动态的int数组,其中包含的元素数目等于用户输入的值。首先使用new来完成这项任务,再使用vector对象来完成这项任务。
unsigned int size; cout << “Enter a positive integer: ”; cin >> size; int* dyn = new int[size]; vector<int> dv(size);
14、下面的代码是否有效?如果有效,它将打印出什么结果?
cout << (int*)”Home of the jolly bytes”;
是的,它是有效的。表达式“home of the jolly bytes”是一个字符串常量,因此,它将判定为字符串开始的地址。cout对象将char地址解释为打印字符串,但类型转换(int*)将地址转换为int指针,然后作为地址被打印。总之,该语句打印字符串的地址,只要int类型足够宽,能够存储该地址。
15、编写一段代码,给问题8中描述的结构动态分配内存,再读取该结构的成员的值。
struct fish { char kind[20]; int weight; float length; }; fish* pole = new fish; cout << “Enter kind of fish: ”; cin >> pole->kind;
16、程序清单4.6指出了混合输入数字和一行字符串时存储的问题。如果将下面的代码:
cin.getline(address, 80);
替换为:
cin >> address;
将对程序的运行带来什么影响?
使用cin>>address将使得程序跳过空白,直接找到非空白字符为止。然后它将读取字符,直到再次遇到空白为止。因此,它将跳过数字输入后的换行符,从而避免这种问题。另一方面,它只读取一个单词,而不是整行。
17、声明一个vector对象和一个array对象,它们都包含10个string对象。指出所需的头文件,但不要使用using。使用const来指定要包含的string对象数。
#include<string> #include<vector> #include<array> const int Str_num {10}; //or = 10 ... std::vector<std::string> vstr(Str_num); std::array<std::string, Str_num>astr;