一、计算机和C++入门
字节和位
主内存被划分称为字节的多个编号位置,一个字节的编号位置就是该字节的地址。每个字节都代表一个能容纳8个二进制位的内存位置。
主存储器
主存储器简称内存,也可以简称为RAM,也就是随机存取存储器
辅助存储器
辅助存储器能在计算机使用之后(和之前)持久性地保存数据。
软件
操作系统为计算机必须完成的不同人物分配计算机资源,操作系统实际是一个程序,或者是多个相互协作的程序。程序是计算机需要遵照执行的一系列指令。 数据是向一个程序提供的输入。
算法
用于解决问题的一系列准确的指令称为算法,通常也可以称为方法、指令、过程和例程等。
C++的起源
BCPLC语言->B语言->C语言->C++
C++的开发工具
记事本(Notepad++)+命令行
Visual C++ 6.0
VS2015
Code::Blocks
其他开发工具
DEV C++、CLion、C-Free、Xcode、C4droid
一个典型的C++代码
#include <iostream>
using namespace std;
int main()
{
cout <<"hello World!"<<;
return 0;
}
以#开头的语句成为预处理命令,告诉编译器到哪里寻找与程序中使用的特定项目有关的信息、#include语句不是必须的,但如果一旦程序中有该语句,就必须把它放到程序的开始处
将iostream文件的内容添加到程序中,iostream中包含了有关输入输出语句的函数
using namespeace std为使用命名空间,std是standard(标准的意思)的缩写,std::cout或std::endl代表从属的关系
<<符号表示把字符串"Hello World!"发送给cout打印。endl是控制符,(end line的缩写)表示重起一行(\n)。
与其说是程序显示了一条信息,不如说它s将一个字符插入到了输出流中
。从概念上看,输出是一个流,可以理解成从程序流出的一系列字符。cout右边<<符号是插入运算符,可以将右侧信息插入流中头文件命名约定
头文件类型 | 约定 | 示例 | 说明 |
---|---|---|---|
C旧式风格 | 以.h结尾 | stdio.h/math.h | C、C++通用 |
C++旧式风格 | 以.h结尾 | iostream.h | C++可以使用 |
C++新式风格 | 没有扩展名 | iostream | C++使用,需要使用namespeace |
转换后的C | 加上前缀c,没有扩展名 | cmath/cytype等 | C++使用 |
endl 和 \n的 区别
1.\n为纯粹的换行
2.endl为换行和确保程序立刻输出(清空缓冲区)cin:输入语句,读作“see-in”,用于输入
cout:输出语句,读作“see-out”,用于输出
编程提示
<<和>>表示数据移动的方向
cin >> number;
cout << number;
C++编码规范
1.每条语句占一行
2.每个函数都有一个开始和结束花括号,花括号各占一行
3.函数中的语句相对于花括号进行缩进
4.与函数名称相关的小括号周围没有空白
编译和执行过程
- 编译(预处理->编译->目标文件)
形成可执行代码/文件。可执行代码是编译器的输出结果,文件扩展名为“.o”或“.obj” - 链接
将目标代码跟C++函数库相连接,并将源程序的库代码与目标代码合并,形成最终可执行的二进制代码(可执行程序) - 执行
在特定的机器环境下运行C++应用程序
各种程序错误
语法错误:编译器能够捕捉特定类型的错误,并在检测到错误后输出一条错误信息,表示程序违反了编译语言的语法规则,比如遗漏分号。
警告信息:表明代码从技术上说没有违反语法规则,但出乎寻常,所以它可能是个错误,编译器相当于在说:“你真的是这个意思吗?”
逻辑错误:基础语法错误或者将所发翻译成C++语言的错误,如将*错误的写成了+
二、C++基础知识
变量和赋值
- C++也使用变量的编程构造来命名和储存数据,变量容纳的数据成为这个变量的值
- 编译器将内存位置分配给程序的每一个变量名,我们可以简单的认为内存位置就是用变量名做标签
- 变量(或者在程序中定义的其他项目)的名称叫标识符,标识符必须字母或下划线开头,后续每个字符只能是字母、数字、或下划线
- 计算机用不同的编码方式编码不同类型变量,声明变量就是告诉编译器两点,一、应该给一个变量分配多大的内存空间,二、用哪种编码方式将变量的值表示成一串0和1
赋值语句
C++语序采用另一种方式初始化变量
例:
double rate(0.07),time,balance(0.0);
小数点后位数控制
cout.setf(ios::fixed);
cout.setf(ios::showpoint);
cout.precision(2);
图例为保留两位小数,改变(2)的数字即可改变小数位数
输入和输出
输入流是提供计算机并有程序使用的一系列输入。“流”表明程序将以相同的方式处理所有输入,无论这些输入从何而来。输出流同样如此,是程序生成的一系列输出。
-
<<符号是插入运算符
using namespace std;
特定的using指令表明程序准备会用std命名空间。命名空间不是一个名称集合,它代表了一个C++代码主体,其中指定了某些名称的含义,命名空间的作用是将所有C++名称规范划分成不同的集合(称为命名空间),使用命名空间的每一个名称都有一个“规范”(一个定义),命名空间对名称进行划分,但和那些命名空间配合的还有大量的C++代码
转义序列
如果在代码总使用了未定义的转义序列,就失去了“可移植性”
string类
C++缺乏原生数据类型来直接操作字符串,但在string类的帮助下,可以声明一个string类型的变量来进行操作
用cin将数据读入字符串,在两个字符串之间可以用“+”符号可将两个字符串连接成一个更长的。
例如:
string day,day1,day2;
day1="Monday";
day2="Tuesday";
day=day1+day2;
会连接成以下字符串:
"MondayTuesday"
算数操作符和表达式
向负int值应用/和%操作符的结果因C++实现而异,所以,为保证程序的可移植性,只有在确定两个int非负时,才对它们使用/和%。
简单控制流程
- 语句执行顺序通常称为控制流程或控制流
程序风格
const修饰符声明的变量称为声明常量或命名常量
三、更多的控制流程
使用布尔表达式
- 布尔表达式是求值为真或假的表达式,true表示条件满足,false表示条件不满足。
- C++首先求值最左边的子表达式,如果获得的信息足以判断整个表达式的终值(不管第二个字表达式是什么),C++就不在对第二个表达式求值,这种求值方法叫做短路求值
多路分支
嵌套语句
编译器总是将else与上一个未与其他else配对的if进行配对,这被称为else的虚悬问题
编程提示:在嵌套语句中使用花括号
switch语句
switch语句的控制表达式必须返回以下值之一:布尔值、enum常量、某个常数类型或者一个字符。
代码块
通常将包含变量声明的复合语句称为块
C++循环语句详解
- 在循环中重复的语句(或语句组)称为循环主体或循环体
- 不可以将递增和递减操作符应用于除单个变量之外的任何东西,在C++中,(x+y)++,--(x+y)这些表达式都是无效的
for语句
在C++中,for语句的初始化操作可以包含变量声明。
如:
for(int n=1;n<=10;n++)
sum=sum+n;
ANSI C++标准规定,对于for循环头里的任何声明,都嘉定它相对于循环主体来说是“局部”的。
设计循环
- 设计循环三要素
1.循环体
2.初始化语句
3.循环结束条件