4.1
105
4.2
(a)* ( vec. begin ( ) )
(b)( * ( vec. begin ( ) ) ) + 1
4.3
可以接受,程序的正确性和效率都需要程序员的参与才完美。
4.4
( ( ( ( 12 / 3 ) * 4 ) + ( 5 * 15 ) ) + ( ( 24 % 4 ) / 2 ) ) = 91
#include <iostream>
using namespace std;
int main ( )
{
int a = 12 / 3 * 4 + 5 * 15 + 24 % 4 / 2 ;
cout << a << endl;
return 0 ;
}
4.5
( a) - 86
( b) - 18
( c) 0
( d) - 2
4.6
string s = ( n % 2 == 0 ) ? "偶数" : "奇数" ;
4.7
溢出:当计算的结果超出该类型所能表示的范围。
4.8
相等性运算符 > 逻辑与 > 逻辑或
4.9
const char * cp = "Hello World" ;
if ( cp && * cp)
先是解引用cp然后进行逻辑与,如果cp的值为ture,则不需要进行后面的判断。
4.10
#include <iostream>
using namespace std;
int main ( )
{
int a = 0 ;
cin >> a;
while ( a != 42 )
cin >> a;
return 0 ;
}
4.11
a > b && b > c && c > d
4.12
i != j < k
首先判断j 是否小于k,是返回1 ,不是则返回0 ;然后判断i是否不等于返回的值。
4.13
(a)i = 3 , d = 3.0
(b)d = 3.5 , i = 3
4.14
if ( 42 = i)
if ( i = 42 )
4.15
duoble dval; int ival; int * pi;
dval = ival = pi = 0 ;
不能把指针的值赋给Int
修改:dval = ival = 0 ; pi = 0 ;
4.16
( a) if ( ( p = getPtr ( ) ) != 0 )
( b) if ( i == 1024 )
4.17
前置递增运算符:首先将运算对象加1 (或减1 ),然后将改变后的对象作为求值结果。
后置递增运算符:首先将运算对象加1 (或减1 ),然后将改变前的对象作为求值结果。
4.18
如果使用前置运算符,不但无法输出第一个元素,而且更糟糕的是如果序列中没有负值,
程序将可能试图解引用一个根本不存在的元素。
4.19
(a)ptr != 0 && * ptr++
(b)ival++ && ival
(c)vec[ ival++ ] <= vec[ ival]
4.20
(a)迭代器iter加1 ,然后把原来迭代器iter指的值解引用
(b)解引用迭代器指的值iter,然后把迭代器iter加1
(c)错误,iter是迭代器,它没有名为empty的成员
(d)运行iter指代的对象的empty成员
(e)解引用迭代器iter所指对象,然后iter所指对象的值加1
(f)运行迭代器所指对象,然后迭代器加1
4.21
#include <iostream>
#include <vector>
using namespace std;
int main ( )
{
vector< int > v = { 1 , 2 , 3 , 4 , 5 , 6 } ;
for ( auto it = v. begin ( ) ; it != v. end ( ) ; ++ it)
{
cout << ( ( * it % 2 == 0 ) ? * it : ( * it * 2 ) ) ;
cout << " " ;
}
cout << endl;
return 0 ;
}
4.22
#include <iostream>
using namespace std;
int main ( )
{
int grade = 0 ;
cout << "Enter a grade(0~100):" << endl;
cin >> grade;
string finalgrade;
cout << ( ( grade > 90 ) ? "high pass" : ( grade > 75 ) ? "low pass" :
( grade > 60 ) ? "pass" : "fail" ) ;
cout << endl;
return 0 ;
}
#include <iostream>
using namespace std;
int main ( )
{
unsigned grade = 0 ;
cout << "Enter a grade(0~100):" << endl;
cin >> grade;
if ( grade > 90 )
cout << "high pass" ;
else if ( grade > 75 )
cout << "low pass" ;
else if ( grade > 60 )
cout << "pass" ;
else
cout << "fail" ;
return 0 ;
}
4.23
string s = "word" ;
string s1 = s + s[ s. size ( ) - 1 ] == 's' ? "" : "s" ;
加法运算符优先级高于相等运算符
修改: string s1 = s + ( s[ s. size ( ) - 1 ] == 's' ? "" : "s" ) ;
4.24
首先判断grade > 90 ,大于则为pass, 不大于则为( grade > 60 ) , 根据值选择其中一个作为后面的判断。
4.25
首先字符q的二进制会被扩展成32 位,然后左移6 位。则为7232
4.26
无法确保测试条件成立
4.27
(a)3
(b)7
(c)1
(d)1
4.28
#include <iostream>
using namespace std;
int main ( )
{
char a = 's' ;
int i = 1 ;
double f = 3.14 ;
long q = 12 ;
float t = 2.5 ;
cout << sizeof ( a) << " " << sizeof ( i) << " " << sizeof ( f)
<< " " << sizeof ( q) << " " << sizeof ( t) << endl;
return 0 ;
}
4.29
int x[ 10 ] ; int * p = x;
cout << sizeof ( x) / sizeof ( * x) << endl;
cout << sizeof ( p) / sizeof ( * p) << endl;
4.30
(a)( sizeof x) + y
(b)sizeof ( p-> mem[ i] )
(c)( sizeof a) < b
(d)sizeof ( f ( ) )
4.31
vector< int > : : size_type cnt = ivec. size ( ) ;
for ( vector< int > : : size_type ix = 0 ; ix != ivec. size ( ) ; ix++ , cnt-- )
ivec[ ix] = cnt;
4.32
constexpr int size = 5 ;
int ia[ size] = { 1 , 2 , 3 , 4 , 5 } ;
for ( int * ptr = ia, ix = 0 ; ix != size && ptr != ia + size; ++ ix, ++ ptr)
遍历ia数组中的每个元素
4.33
someValue ? ++ x, ++ y : -- x, -- y;
判断someValue是否为0 ,是就递增x, y,不是就递减x, y
4.34
(a)float 转化成bool
(b)int 转化为float ,然后float 转化为double
(c)char 转化为int ,然后int 转化为double
4.35
(a)int 转化为char
(b)int 转化为double ,unsigned int 转为为double
(c)unsigned int 转化为float , float 转化为double
(d)int 转化为float ,float 转化为double ,double 转化为char
4.36
int i * = static_cast< int > d;
4.37
( a) pv = static_cast< void * > ( ( const_cast) < string> ps) ;
( b) i = static_cast< int > ( * pc) ;
( c) pv = static_cast< void * > & d;
( d) pc = static_cast< char * > pv;
4.38
把j / i 的值强制转化为double 类型