重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
按照这本书的顺序,不懂得查别的资料了,不理解的好多
目录练习 3.1
说明下列文字常量的区别
(a) ‘a’, L’a’, “a”, L"a"
(b) 10, 10u, 10L, 10uL, 012, 0xC
© 3.14, 3.14f, 3.14L
练习 3.2
下列语句哪些是非法的
(a) “Who goes with F\144rgus?\014”
(b) 3.14e1L
© “two” L"some"
(d) 1024f
(e) 3.14UL
(f) “multiple line
comment”
练习 3.3
下列定义哪些是非法的 请改正之
(a) int car = 1024, auto = 2048;
(b) int ival = ival;
( c) int ival( int() );
(d) double salary = wage = 9999.99;
(e) cin >>int input_value;
练习 3.4
区分左值与右值 并给出它们的例子
练习 3.5
说明下列 student 和 name 两个实例的区别
(a) extern string name;
string name( “exercise 3.5a” );
(b) extern vector students;
vector students;
练习 3.6
下列名字哪些是非法的 请改正之
(a) int double = 3.14159; (b) vector< int >_;
© string namespace; (d) string catch-22;
(e) char 1_or_2 = ‘1’; (f) float Float = 3.14f;
练习 3.7
下面的全局对象定义和局部对象定义有什么区别(如果你认为有区别的话)
string global_class;
int global_int;
int main() {
int local_int;
string local_class;
// …
}
枚举类型最常见也最有意义的用处之一就是用来描述状态量.
不能做到的是打印枚举成员的实际枚举名.
不能使用枚举成员进行迭代.
可以定义枚举类型的对象 它可以参与表达式运算 也可以被作为参数传递给函数.
枚举类型的对象能够被初始化 但是只能被一个相同枚举类型的对象或枚举成员集中的某个值初始化或赋值.
这个讲的明白:https://www.runoob.com/w3cnote/cpp-enum-intro.html
枚举变量的值只能取枚举常量表中所列的值,就是整型数的一个子集。
枚举变量占用内存的大小与整型数相同。
以下定义:
//定义枚举类型之后,就可以定义该枚举类型的变量,如:
//color_set1 color1, color2;
//默认状态下,这个整数就是所列举元素的序号,序号从0开始
enum color_set1 {RED, BLUE, WHITE, BLACK} color1, color2;
enum color_set2 {GREEN, RED, YELLOW, WHITE} color3, color4;
练习 3.22
下面哪些数组定义是非法的 为什么
96 第三章 C++数据类型
int get_size();
int buf_size = 1024;
(a) int ia[ buf_size ]; (d) int ia[ 2 * 7 - 14 ];
(b) int ia[ get_size() ]; (e) char st[ 11 ] = “fundamental”;
© int ia[ 4 * 7 - 14 ];
练习 3.23
下面代码试图用数组中每个元素的索引值来初始化该元素 其中包含了一些索引错误
请把它们指出来
int main() {
const int array_size = 10;
int ia[ array_size ];
for ( int ix = 1; ix<= array_size; ++ix )
ia[ ix ] = ix;
// …
}
-多维数组-数组与指针
ia
&ia[0]
const int rowSize = 4;
const int colSize = 3;
int ia[ rowSize ][ colSize ];
遍历数组的方式
定义模板函数:
#includetemplatevoid print( elemType *pbegin, elemType *pend )
{ while ( pbegin != pend ) { cout<< *pbegin<< ' ';
++pbegin;
}
}
现在我们可以给通用的函数 print()传递一对指向**任意类型**数组的指针 只要该类型的输
出操作符已经被定义即可 例如
int main()
{ int ia[9] = {0, 1, 1, 2, 3, 5, 8, 13, 21 };
double da[4] = {3.14, 6.28, 12.56, 25.12 };
string sa[3] = {"piglet", "eeyore", "pooh" };
print( ia, ia+9 );
print( da, da+4 );
print( sa, sa+3 );
}
3.10 vector 容器类型#include< vector >
可以用 size()查询 vector 的大小 也可以用 empty()测试它是否为空
vector 可以被另一个 vector 初始化 或被赋给另一个 vector
使用 vector 有两种不同的形式 即所谓的数组习惯和 STL 习惯
数组习惯
vector< int >ivec( 10 );
vector< int >ivec( 10, -1 );//定义了 ivec 它包含十个 int 型的元素 每个元素都被初始化为-1
STL 习惯
====================================
vector< string >text;//定义一个空 vector
// 插入元素
string word;
while ( cin >>word ) { text.push_back( word );
// ...
}
====================================
text[ i ] //访问元素
====================================
//使用 vector 操作集中的 begin()和 end()所返回的迭代器 iterator对
for ( vector::iterator it = text.begin();
it != text.end(); ++it )
cout<< *it<< ' ';
练习 3.24 下列 vector 定义中 哪些是错误的 int ia[ 7 ] = { 0, 1, 1, 2, 3, 5, 8 };
(a) vector< vector< int >>ivec; (b) vector< int >ivec = { 0, 1, 1,
2, 3, 5, 8 }; © vector< int >ivec( ia, ia+7 ); (d) vector< stringsvec = ivec; (e) vector< string >svec( 10, string( “null” ));
3.11复数类型练习 3.25
已知下面的函数声明
bool is_equal( const int*ia, int ia_size,
const vector &ivec );
请实现下列行为 如果两个容器大小不同 则比较相同大小部分的元素 一旦某个元素
不相等 则返回 false 如果所有元素都相等 则返回 true 请用 iterator 迭代访问 vector 可
以以本节中的例子为模型 并且写一个 main()函数来测试 is_equal()函数
#include< complex >
3.12 typedef 机制它并没有引入一种新的类型 而只是为现有类型引入了一个助记符号
3.13 volatile 限定修饰符#include
3.14pair 类型 3.14 类练习 3.26 在 String 类的构造函数和赋值操作符的实现中 有大量的重复代码 请使用 2.3 节中展 示的模型 把这些公共代码抽取成独立的私有成员函数 用它们重新实现构造函数和赋值操 作符 并重新运行程序以确保其正确
练习 3.27 修改程序
使其也能够记下辅音字母 b d f s 和 t 的个数
练习 3.28 实现能够返回 String 中某个字符出现次数的成员函数 声明如下
class String { public:
// … int count( char ch ) const;
// … };
练习 3.29 实现一个成员操作符函数 它能把一个 String 与另一个连接起来
并返回一个新的 String 声明如下 class String { public: // … String
operator+( const 2String &rhs ) const; // … };
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧