C++学习-5-第二篇-20230103

在这里插入图片描述

第二篇

ch4 表达式

4.1表达式
4.2算术操作符
  • 标准 C++头文件 limits 提供了与内置类型表示有关的信息 例如一个类型能表示的最大值和最小值 另外 C++编译系统也提供了标准 C 头文件 climitscfloat 它们定义了提供类似信息的预处理器宏 ,使用这些头文件来防止溢出 overflow 和下underflow
  • 浮点数的算术运算的精度问题.

练习 4.1
下列两个除法表达式的主要区别是什么
double dval1 = 10.0, dval2 = 3.0;
int ival1 = 10, ival2 = 3;
dval1 / dval2;
ival1 / ival2;
练习 4.2
给出一个有序对象 可用什么操作符来判定它是奇数还是偶数 写出表达式
练习 4.3
在你的系统中找到并检查 C++头文件 limits 和标准 C 头文件 climits 以及 cfloat

4.3 等于 关系和逻辑操作符

练习 4.4
下列哪个表达式不正确或不可移植 为什么 怎样改正 注意 在这些例子中对象的
类型并不重要
(a) ptr->ival != 0 (b) ival != jval < kval
© ptr != 0 && *ptr++ (d) ival++ && ival
(e) vec[ ival++ ] <= vec[ ival ];

练习 4.5
二元操作符的计算顺序未定义 因而允许编译器自由地提供可选的实现 这是在 有效
的实现 和 程序员使用的语言存在潜在缺点 之间的一种折衷 你认为这是一种可接受的
折衷吗 为什么?

4.4 赋值操作符
  • 复合赋值加操作符
复合赋值操作符的一般语法格式是
a op= b; 
 这里的 op=可以是下列十个操作符之一
+= -= *= /= %= 
<<= >>= &= ^= |= 
 每个复合赋值操作符都等价于以下 普通写法 的赋值
a = a op b; 

练习 4.6
下列代码合法吗 为什么 怎样改正
int main() {
float fval;
int ival;
int *pi;
fval = ival = pi = 0;
}

练习 4.7
虽然下列表达式不是非法的 但是它们的行为并不像程序员期望的那样 为什么 怎样修改以使其能反映程序员的可能意图
(a) if ( ptr = retrieve_pointer() != 0 )
(b) if ( ival = 1024 )
( c ) ival += ival + 1;

4.5 递增和递减操作符

练习 4.8
你认为为什么 C++不叫++C
-说明它本质上是从c语言演化而来的,“++”是c语言里的自增操作符。c++语言是c语言的超集,是在c语言基础上的扩展,是先有c语言,再++。根据自增操作符前后式的差别,c++表示对c语言进行扩展以后,还可以使用c语言的内容。而++c则表示无法再使用c的原始值了。后置 postfix 形式表示:这个新值直到下一次迭代才能被实际使用.

4.6 复数操作
complex 头文件定义了用于处理复数的功能。complex<T> 模板类型的实例表示的是复数,这里定义了 3 个特化类型:complex<float>、complex<double>、complex<long double>norm() 函数模板会返回复数的量的平方。
arg() 模板会返回以弧度为单位的相角,是复数 z 对应的 std::atan(z.imag()/z.real())conj() 函数模板会返回共轭复数,是 a+bi 和 a-bi。
polar() 函数模板接受量和相角作为参数,并返回和它们对应的复数对象。
prqj() 函数模板返回的复数是复数参数在黎曼球上的投影。

#####4.7 条件操作符

int max = ( (i > j)  ? (( i > k) ? i : k)  : ( j > k ) ? j : k); 
4.6 sizeof 操作符

siseof 操作符的作用是返回一个对象或类型名的字节长度 它有以下三种形式

  • sizeof (type name );

    扫描二维码关注公众号,回复: 15260465 查看本文章
  • sizeof ( object );

  • sizeof object;
    返回值的类型是 size_t 这是一种与机器相关的 typedef 定义

  • 当 sizeof 操作符应用在数组上时 返回整个数组的字节长度

  • 应用在指针类型上的 sizeof 操作符返回的是包含该类型地址所需的内存长度

  • 应用在引用类型上的 sizeof 操作符返回的是包含被引用对象所需的内存长度

  • 应用在 char 类型上时 在所有的 C++实现中结果都是 1

4.9 new 和 delete 表达式
  • new 表达式返回指向新分配的对象的指针
  • 当对象完成了使命时 我们必须显式地把对象的内存返还给空闲存储区
  • delete 表达式不应该被应用在 不是通过 new 表达式分配的指针上

练习 4.11
下列语句哪些是非法的或错误的
(a) vector svec( 10 );
(b) vector *pvec1 = new vector(10);
© vector **pvec2 = new vector[10];
(d) vector *pv1 = &svec;
(e) vector *pv2 = pvec1;
(f) delete svec;
(g) delete pvec1;
(h) delete [] pvec2;
(i) delete pv1;
(j) delete pv2;

4.10 逗号操作符
4.11 位操作符
4.12 bitset 操作

#include < bitset>

在这里插入图片描述

4.13 优先级
4.14 类型转换 ?

隐式/算术/显式(强制)

4.15 栈类实例 ?

ch5 语句

5.1 简单语句和复合语句
5.2声明语句
5.3 if语句
5.4 switch语句
记录元辅音字母的个数
#include <iostream> 
#include <ctype.h> 
int main() 
{
    
     
 char ch; 
 int aCnt=0, eCnt=0, iCnt=0, oCnt=0, uCnt=0, 
 consonantCnt = 0; 
 while ( cin >> ch ) 
 switch ( ch ) 
 {
    
     
 case 'a': case 'A': 
 ++aCnt; 
 break; 
 case 'e': case 'E': 
 ++eCnt; 
 break; 
 case 'i': case 'I': 
 ++iCnt; 
 break; 
 case 'o': case 'O': 
 ++oCnt; 
 break; 
 case 'u': case 'U': 
 ++uCnt; 
 break; 
 default: 
 if ( isalpha( ch )) 
 ++consonantCnt; 
 break; 
 } 
 cout << "Number of vowel a: \t" << aCnt << '\n' 
 << "Number of vowel e: \t" << eCnt << '\n' 
 << "Number of vowel i: \t" << iCnt << '\n' 
 << "Number of vowel o: \t" << oCnt << '\n' 
 << "Number of vowel u: \t" << uCnt << '\n' 
 << "Number of consonants: \t" << consonantCnt << '\n'; 
} 
5.5 for循环语句
5.6 while语句
5.7 do while语句
5.8 break语句
5.9 continue语句
5.10 goto语句
5.11 链表

ch6 函数类型

顺序容器: list 和 vector
关联容器: map 映射 和 set 集合 m

6.1文本查询系统
6.2 vector还是list?
6.3 vector怎样自己增长
6.4定义一个顺序容器
6.5迭代器
6.6顺序容器操作
6.7存储文本行
6.7存储文本行
6.8找到一个子串
6.9处理标点符号
6.10任意其他格式的字
6.11其他string操作
6.12生成文本位置map
6.13创建单词排除集
6.14完整的程序
6.15 multimap和multiset
6.16栈
6.17队列和优先级队列

猜你喜欢

转载自blog.csdn.net/weixin_45783317/article/details/128540567