C++语言程序设计基础&&入门
概念
源程序: 由程序员使用源语言(也叫编程语言,此处指C++)写出的高级语言程序被称为高级语言源程序。
目标程序: 高级语言源程序通过翻译程序加工以后生成的机器语言程序(是二进制代码)被称为目标程序。
可执行程序: 连接目标程序以及库中的某些文件,生成的一个可执行文件(如.exe)。
翻译程序分为以下几种类型:
汇编程序:将汇编语言源程序翻译成目标程序。
编译程序:将高级语言源程序翻译成目标程序。
解释程序:将高级语言源程序翻译成机器指令,它是边翻译边执行
进制转换
十进制整数转二进制整数
十进制小数转二进制小数
二进制转十进制
二进制数的编码表示问题
原码:"符号-绝对值"表示的编码。
1/0表示正/负存在一个bug,当值为零时,会存在两个表示方法,即存在表示方法不唯一问题。如+0:0 000 和-0:1 000。
且在进行四则运算时,符号位须单独处理且运算规则复杂。
补码的特点:
- 零的表示唯一
- 符号位可作为数值参与运算
- 减法运算可转换为加法运算
模数:n位二进制整数的模数为2^n,n位小数的模数为2。
补数:一个数减去另一个数(加一个负数),等于第一个数加第二个数的补数。
反码:在原码的基础上,保持负数的符号位不变,除了符号位以外的其他位全部取反。正整数的原码和反码和补码均相同。
补码:反码的最低为加一即为补码。简称原码求反加一。
补码符号位保持不变,再次求补即可得到原码。
如果负数之和得正数或正数之和得负数,则说明运算结果溢出。
浮点数是用小数点浮动的方式来表示的。
简单程序示例
cout是输入输出流类库中的一个标准输出流对象。
使用cout前,需要提前把定义cout的<iostream>输入输出流类库这个头文件包含进来。
#include <iostream>
using namespace std;
int main()
{
cout << "Hello World!\n";
}
或
#include <iostream>
int main()
{
std::cout << "Hello World!\n";
}
在生成发布版本之前,需要清除早期生成过程中创建的中间文件和输出文件,确保其是最终版本。
点击"生成"菜单中的"清理解决方案"即可。
改"Debug"为"Release",点击"生成"菜单中的"生成解决方案"即可生成发行版本。
main(){} 叫做主函数
cout 是预定义好的类的对象,在类库中存放。
两个连续的小于号 是一个运算符,这是一个流插入运算,会将后面的一串字符串插入到输出流里面去。
数据的输出就是信息的流动,输出流就是你程序空间到外部设备之间的一个信息流动的通道。
当需要向外部设备送信息的时候,首先先建立一个能够流通信息的通道,叫输出流。
cout负责向这个流里面送数据,送数据的这个动作就是用插入运算符(两个连续小于号)实现的。
endl 是预定义好的符号,表示行结束,屏幕表现为换行。
int main(){} 是规定该函数的返回值应该是一个整数类型。
include iostream 是包含一个文件(iostream)进来。
iostream 是一个文本文件的名字,是被用来包括在别的程序头上的,所以叫头文件。
iostream 该文件里面给出了预定义好的这些输入输出功能的相应的声明。
include 是编译预处理命令。即编译器在做语法检查和开始编译该段程序之前,首先要按照include指令到约定的目录下找到iostream这个文件,把这个文件的全部内容复制粘贴到include语句所在的位置(与手动复制粘贴效果一致)。该文件内包含了对cout的必要的声明。
using namespace std 意为打开std这个命名空间,是为了避免命名冲突(担心重名)。
所有在标准库里面的名字,它有一个共同的命名空间,这个命名空间的名字叫std。
std::cout 双冒号表示作用域,分辨符。
凡是以双斜线开头的行,都是注释行。
字符集
词法记号
标识符的构成规则
C++能够处理的基本数据类型
整数类型
- 基本的整数类型:int
- 按符号分:符号的(signed)、无符号的(unsigned)
- 按照数据范围分:短整数(short)、长整数(long)、长长整数(long long)
实数类型(浮点数类型)
- 单精度(float)
- 双精度(double)
- 扩展精度(long double)
字符类型
- 容纳单个字符的编码
- 实质上存储的也是整数
布尔类型
- 只有两个值:true(真)、false(假)
- 常用来表示关系比较、相等比较、逻辑运算的结果。
字符串类型
- 有字符串常量
- 基本类型中没有字符串变量
- 采用字符数组存储字符串(C风格的字符串)
- 标准C++类库中的String类(C++风格的字符串)
程序中的数据
常量:
- 在源程序中直接写明的数据
- 其值在整个程序运行期间不可改变
整数常量
浮点数常量
字符常量
C风格字符串常量
变量:
- 在程序运行过程中允许改变的数据
初始化变量的方式
列表初始化:
- 使用大括号的初始化方式
- 不允许信息的丢失
- 例如:用double值初始化int变量会造成数据丢失
符号常量
简单程序示例2
知识点
- 常量:在源程序中直接写明的数据,其值在整个程序运行期间不可改变,这样的数据称为常量。
- 变量:在运行过程中从计算机的外部设备(如键盘、硬盘等)读取的,这些数据的值在程序运行过程中允许改变,这样的数据称为变量。
- 从键盘输入数据:iostream类的对象cin的>>操作,可以从标准输入设备(通常是键盘)读入数据。
- 数据的存储:为了存储数据,需要预先为这些数据分配内存空间。变量的定义就是在给变量命名的时候分配内存空间。
- !!浮点数在机器里面是近似存储的,其存储的值可能与你期望的值有少许差异,所以千万不能在程序中比较两个浮点数是否相等。所以,在比较两个浮点数是否相等时,比较的是两个浮点数之差是否充分小。
#include <iostream>
using namespace std;
int main()
{
const double pi(3.14159);
int v1 = 123; //定义变量
cout << "定义变量v1,其值为:" << v1 << "\n";
cout << "请输入任意值,将该值赋予变量v1\n";
cin >> v1;
cout << "此时变量v1,其值为:" << v1 << "\n";
cout << "此时常量pi,其值为:" << pi << "\n";
return 0;
}
运算与表达式
算术运算与赋值运算
基本算术运算符
- 加(+)、减(-)、乘(*)、除(/),若整数相除,结果取整。
- 取余(%),操作数为整数。
优先级与结合性
- 先乘除,后加减,同级自左至右
自增、自减
- 例:i++;–j
赋值运算
- 将值赋给变量,通过赋值运算符”=“完成。
- 例:n = 5
- 10种复合运算符:+=、-=、*=、/=、%=、<<=、>>=、&=、^=、|=、
逗号运算、关系运算、逻辑运算和条件运算
逗号运算和逗号表达式
格式
表达式1、表达式2
求解顺序及结果
先求解表达式1,再求解表达式2
最终结果为表达式2的值
例
a = 35,a4 最终结果为60
关系运算与关系表达式
- 关系运算是比较简单的一种逻辑运算,优先次序为:
< <= > >= 优先级相同(高)
== != 优先级相同(低) - 关系表达式是一种最简单的逻辑表达式
其结果类型为bool,值只能为true或false - 例如: a > b,c <= a+b,x+y == 3
逻辑运算与逻辑表达式
- 逻辑运算符
优先次序(由高到低):!(非),&&(与),||(或) - 逻辑运算结果类型:bool,值只能为true或false
- 逻辑表达式:例如:(a>b)&&(x>y)
- "&&"的运算规则
两侧表达式都为真,结果为真;有一侧表达式为假,结果为假。 - "||"的运算规则
两个表达式都为假,结果为假;有一侧表达式为真,结果为真。
条件运算符与条件表达式
- 一般形式
表达式1?表达式2:表达式3
表达式1必须是bool类型 - 执行顺序
先求解表达式1
若表达式1的值为true,则求解表达式2,且表达式2的值为最终结果
若表达式1的值为false,则求解表达式3,且表达式3的值为最终结果 - 条件运算符优先级高于赋值运算符,低于逻辑运算符
- 表达式1是bool类型,表达式2,3的类型可以不同。
sizeof运算、位运算
sizeof运算
- 语法形式
sizeof(类型名)或sizeof 表达式 - 结果值:
“类型名”所指定的类型,或“表达式”的结果类型所占的字节数 - 例:
sizeof(short)
sizeof x
位运算-按位与(&)
- 运算规则
将两个运算量的每一个位进行逻辑与操作