C++ primer plus__例程

目录

一.安装软件vs

vs安装教程地址

二.运行第一个程序

vs测试

三.c++ primer plus 记录

第一章 预备知识

第二章 开始学习c++

第三章 处理数据

3.1 简单变量

3.1.1 变量名

--主要讲述变量的命名规则

3.1.2 整形

c++基本整形:char short int long,char类型有一些特殊属性(常用来表示字符,而不是数字)
short 是short int的缩写,long 是 long int 的缩写。

3.1.3 整形short int long 和 long long

计算机内存由位(bit)单元组成。可以将位(bit)看成电子开关,0,1。8位的内存块可以设置出256种不同的组合:2的8次方。因此8位单元可以表示0-255或者-128-127
Q1.为什么对变量进行初始化?
如果不对函数内部定义的变量进行初始化,该变量的值将是不确定的。这意味着该变量的值将是它被创建之前,相应内存单元保存的值。

3.1.4 无符号类型

关键字:unsigned  
注意,unsigned 本身是 unsigned int 的缩写。

short 和 unsigned short 的范围,注意越界概念,上溢或者下溢。

3.1.5 选择整形类型

int被设置为对目标计算机而言最“自然”的长度,自然长度就是计算机处理起来效率最高的长度。
变量表示的值不可能为负数,选择unsigned类型,可以表示更大的范围。
如果不知道选择什么类型,选int 。

3.1.6 整形字面量

控制输出的方式,是十六进制、八进制格式。
hex、oct 分别控制输出十六进制和八进制。

3.1.7 c++如何确定常量的类型

cout<<"year="<<1678<<"\n"

程序的生命将特定的整型变量的类型告诉编译器,在没有特殊的限定,程序把1678存储为int类型

3.1.8 char类型:字符和小整数

char 类型是转为存储字符而设计的。char类型是另一种整形,能够表示目标计算机系统中的所有基本符号--所有的字母、数字、标点符号。
第一个成员函数:cout.put(),通过类对象cout来使用函数put(),句点被称为成员运算符。
c++转义序列的编码:换行符“\n”,回车“\r”,水平制表符“\t"
换行符可替代endl,用于在输出中重启一行。下面三行代码都将光标移动到下一行开头:

cout<<endl;
cout<<"\n";
cout<<'\n';

3.1.9 bool类型:true flase

3.2 const限定符

const int Months=12;
#define类似,c++更好的对符号常量的处理是关键字const。
常量被初始化之后,其值就被固定下来,编译器将不允许修改常量的值了。
创建常量的通用格式:

const type name = value;

3.3 浮点数

3.3.1 书写浮点数

c++有两种书写浮点数的方式。常规小数点,E。
3.45E6,表示3.45x10的六次方。
8.33E~4表示8.33/10的四次方。

3.3.2 浮点类型


c++有三种浮点类型:float、double、long double。

float的精度比double的精度低。

3.3.3 浮点常量

8.24和2.4E8这种属于double类型。
1.234f       属于float类型。

3.3.4 浮点数的优缺点

将类型分类:

整数和浮点数统称为算术类型。
类型char、short、int、long统称为符号整形。
类型float、double、long double统称为浮点型。

3.4 c++ 算术运算符

基本算术 运算符:加法,减法,乘法,除法,求模。

对于float,c++只保证6位有效位。

将61.419998四舍五入成6位,将得到61.4200.

3.4.1 运算符优先级和结合性

遵从先乘除,后加减。
如果优先级相同:
float logs=120/4*5; //从左到右

3.4.2 除法分支

如果两个操作数都为整数,结果的小数部分将被丢弃,最后的结果是一个整数。
如果其中有一个(或两个)操作数都是浮点数,则小数部分将被保留,结果为浮点数
---
记住:两个操作数都为double类型,则结果为double类型。如果两个操作数都是float类型,结果为float类型。
浮点常量在默认情况下为double类型。
---
9/5=1
9.0/5.0=1.800000
9.0/5=1.800000

3.4.3 求模运算符

3.4.4 类型转换

为处理11种整形和3种浮点类型,类型进行运算时,c++会自动执行很多类型转换 :
1.将一种算术类型的值赋给另一种算术类型的变量时,c++将对值进行转换;
2.表达式中包含不同的类型时,c++将对值进行转换;
3.将参数传递给函数时,c++将对值进行转换;
---
潜在数值转换后的问题
如double转化为float:精度降低;浮点类型转换为整形:小数部分丢失;
---
将0赋给bool变量时,将被转换成为false,而非零的值将被转换成为true。
---
1.初始化和赋值进行的转换
2.以{
   }方式初始化时进行的转换
3.表达式中的转换
4.传递参数时的转换
5.强制类型转换
	//强制类型转换不会修改thorn变量本身,而是创建一个新的、指定类型的变量。
	//强制类型转换的格式:
	    (typename) value;
	     typenname  (value);//纯粹的c++风格
	//强制类型转换有两种表示方式,将存储在thorn中的int值转换为long类型时,可以表示为:
	(long) thorn;
	long   (thorn);

3.4.5 c++11中的auto声明

auto能够根据初始值的类型推断变量的类型
	auto n=100;
自动推断类型不是为这种简单情况设计的。处理复杂类型,如标准模块库(STL)中的类型时,自动类型推断才用上。
	std::vector<double> scores;
	auto pv=scores.begin();

3.5 总结

3.6 复习题

1.为什么c++有多种整形?
	c++整形变量一共11种,基本整型有四种:char,short,int,long 。可以根据特定的需求选择最合适的类型。
	例如可以用short来存储空格,用long来保证存储容量。提高计算的速度。
2.声明下面描述相符合的变量。
	short n=80;
	unsigned int n=42110;
	unsigned long int n=3E10;  //值为300000000的整数
3.c++提供了什么措施来防止超出整形的范围?
	c++没有提供自动防止超出整型限制的功能,可以使用头文件climits来确定限制的情况。//书第40页
4.33L与33之间有什么区别?
	33L为长整型,33为int类型。//标准答案:33L的类型为long,33的类型为int。
5.下面两条语句是否等价?
	char grade=65;
	char grade=’A‘;
	//答案:不等价 第一个 65是int常量,第二个A是char常量,字符串。
6.如何使用c++来找出编码是88表示的字符?
	方法1:
	char c = 88;
	cout<<c<<endl;
	方法2:
	cout.put(char(88));
	方法3:
	cout<<char(88);
	方法4:
	cout<<(char)88;
7.将long值赋给float变量会导致舍入误差,将long值赋给double变量呢?将long long值赋给double呢?
	这个问题的答案取决于这两个类型的长度。如果long为4字节,则没有损失。因为long的最大值将是20亿,即10位	
	数。由于double提供了至少13位有效数字,因而不需要进行任何舍入。long long类型可提供19位有效数字,超
	过了double保证的13位。
8.下列c++表达式的结果分别是多少?
	a.8*9+2;//74
	b.6*3/4; //4
	c.3/4*6;  //0
	d.6.0*3/4;  //  18.0/4is4.5
	e.15%4;  //3
9.
	double x1;
	double x2;
	int(x1);
	int(x2);
	int x3=x1+x2;
	---
	double x1;
	double x2;
	int x3=int(x1+x2);

10.下面每条语句声明的变量都是什么类型?

	a.auto cars=15;   //int
	b.auto iou=150.37f;  //float
	c.auto level='B'  //char
	d.auto crat=U'/u00002155'    //  这个是char32_t
	e.auto fract=8.25f/2.5   //double   整形提升,看第64页
	===
	1. 后面的2.5如果后面不加f的话,就是个double类型的值
	2. /的两个操作数一个是float一个是double,float向double方向做类型提升(Type promotion)
	3. 两个double的结果还是double,所以auto 的类型推断就认为fract是个double了

3.7 编程练习

答案链接

1.

第四章 复合类型

需要一些比基本类型复杂的数据类型---复合类型,这种类型是基于基本类型和浮点类型创建的。影响最为深远的复合类型就是---类是学习面向对象OOP的关键。

4.1 数组(array)

声明数组的通用格式:
typeName arrayName[arraySize]
---
short months[12]

4.1.1 程序说明

sizeof运算符返回类型或数据对象的长度(单位是字节)。如果将sizeof运算符用于数组名,得到的将是整个数组中字节数,如果sizeof用于数组元素,就是元素的长度(单位是字节)。

4.1.2 数组初始化规则

将数组中所有元素都初始化为0:
	long totals[500]={
   0};
	如果初始化{
   1}而不是{
   0},则第一个元素被设置为1,其他元素都被设置成0.

4.1.3 c++11 数组初始化方法

1.可以省略=
	double earning[4] {
   1.2,2.2,2.2,2.4}
2.可不在大括号内包含任何东西,所有元素都被设置成0
	float balances[100] {
   }
3.列表初始化进制缩窄转换:(第三章讲的)
	long n[]={
   12,23,1.0} ;      //错误的,
	char slifts[4] {
   'd','e',1122011,'\0'};      //错误的
	char slifts[4] {
   'd','e',112,'\0'};    //正确的

4.2 字符串

c++处理字符串方式有两种。第一种常被称为c-风格字符串。另一种基于string类库。
---
c-风格的字符串必须以  “\0”  结尾
char dog[8]={
   'a','w','d','f','d','d','f','d','\0'};
---
有一种更好的、将字符数组初始化为字符串的方法---字符串常量或字符串面值,用引号括起的字符串隐士地包括结尾的空字符。
	char  bird[8]="Bozo";

4.2.1 拼接字符串常量

4.2.2 在数组中使用字符串

4.2.3 字符串输入

cin>>name;

4.2.4 每次读取一行字符串输入

1.面向行的输入:getline()
	getline()函数读取整行,它使用通过回车输入的换行符来确定输入结尾,调用这种方法,使用cin.getline()。
	该函数有两个参数,第一个是数组名,第二个是字符数。如果输入20,存储19个,最后一个为空字符。
					cin.getline(name,20);
2.面向行的输入:get()
3.空行和其他问题
	当getlin()或get()读取空行时,将设置失效位(failbit)。这意味着接下来的输入将会被阻断,可以用下面命令
	恢复:
						cin.clear();
	

4.2.5 混合输入字符串和数字

混合输入数字和面向行的字符串会导致问题。
---
c++程序常使用指针(而不是数组)来处理字符串。

4.3 string 类简介

c++98通过添加string类扩展了c++库,因此现在可以使用string类型的变量(c++的话是对象)而不是字符数组
来存储字符串。string类使用起来比数组简单,同时提供了将字符串作为一种数据类型的表示方法。
要使用string类,必须在程序中包含头文件string。string类位于名称空间std中,因此必须提供一条using编译
指令,或者使用std::string来引用。
---
string对象和字符数组的主要区别是:可以将string对象声明为简单变量,而不是数组
		string str1;
		string str2=“panther”;
类设计让程序能够自动处理string的大小。例如,str1的声明创建一个长度为0的string对象,但程序将输入读取到
str1中时,将自动调整str1的长度:
		cin>>str1;
与使用数组相比,使用string对象更方便,也更安全。

4.3.1 c++11字符串初始化

char first_date[]={
   "le Chapon Dodu"};
char second_date[] {
   "The Elegant Plate"};
string third_data={
   "The Bread Bowl"};
string fourth_data {
   "Hank's Fine Eats"};

4.3.2 赋值、拼接和附加

*不能将一个数组赋值给另一个数组,但是能将一个string对象赋值给另一个string对象*
	char charr1[20];
	char charr2[20]="jaguar";
	string str1;
	string str2="panther";
	charr1=charr2;   //错误的
	str1=str2;       //正确的
---
string类简化了字符串合并的操作。能够运用+ +=运算符。
	string str3;
	str3 = str1+str2;
	str1 += str2;

4.3.3 string类的其他操作

可以使用函数:strcpy()将 字符串复制到字符数组中;
可以使用函数;strcat()将 字符串附加到字符数组末尾;
---
两种确定字符串中字符数的方法:
	int len1=str1.size();
	int len2=strlen(charr1)

4.3.4 string 类I/O

完整代码:第87页
---
char charrr[20];
cin.getline(charr,20);//这种句点表明,函数getline()是istream类的一个方法,而cin是一个istream的
对象。函数头#include <iostream>
---
string str;
getline(cin,str);//这里没有使用句点表示,说明getline()不是类方法。它将cin作为输入参数,指出到哪里
去查找输入。另外也没有指出字符串的长度,因为string对象将根据字符串的长度自动调整自己的大小。
---
为啥getline()是istream的类方法,下面的不是呢?。。。。。
处理string对象的代码使用string类的一个友元函数。

4.3.5 其他形式的字符串字面值

除了char类型外,c++还有类型wchar_t,而c++11新增了char16_t 、char32_t。对于这些类型的字符串分别使用
前缀L、u、U.
	wchar_t title[]=L"Chief Assrogator";   //w_char string
	char16_t name[]=u"Felonia Ripova";     //char_16 string
	char32_t car[]=U"Humber Super Snipe";  //char_32 string
	

4.4 结构简介

数组中所有元素的类型必须相同,结构是一种比数组更灵活的数据格式,同一个结构中可以存储多种类型数据,结构
也是c++OOP(面向对象)的基石。
结构是用户定义的类型,而结构声明定义了这种类型的数据属性。首先,定义结构描述,然后按描述创建结构变量。
---
例如,假设某公司要创建一种类型来描述充气产品:存储产品名称,容量和售价。
	struct inflatable
	{
   
	char name[20];
	float volume;
	double price;
	};
	//***定义好结构便可以创建这种类型的==变量==了:
	inflatable hat;
	
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值