02_Basic

本章主要讲解 C++语言概述(C++的发展、C++ 源程序结构与书写规范、C++ 编译器和集成开发环境)C++编程基础、数据的简单输入输出
展开查看详情

1.第二讲 C++ 编程基础

2.2 主要内容 C++ 语言概述 C++ 编程基础 数据的简单输入输出 C++ 的发展 C++ 源程序结构与书写规范 C++ 编译器和集成开发环境

3.3 C++ 语言概述 C++ 的发展 C++ 是从 C 语言发展演变而来,可以看成是 C 的超集 1980 年由 Bjarne Stroustrup 开发创建 1983 年正式取名为 C++ , 1989 年开始 C++ 的标准化工作 1994 年制定了 ANSI C++ 标准草案 1998 年由 ISO 批准为国际标准,通称 C++98 目前的 C++ 最新标准是 C++14 ( 2014 年 8 月通过) (注: C++17 基本上已经完成,并开始 C++20 的制定工作) ANSI - American National Standards Institute / 美国国家标准协会 ISO - International Organization for Standardization / 国际标准化组织

4.4 C++ 语言概述 关于 C 和 C++ 的更多介绍见课程主页的相关链接 http://isocpp.org/std/status

5.5 一个简单的 C++ 程序 #include <iostream> using namespace std; int main () { cout << "Hello!" << endl; cout << "Welcome to C++! " << endl; return 0; } C++ 源程序结构: 一个 C++ 源程序由一个或多个源文件组成 每个源文件可由一个或多个函数组成 一个源程序有且只能有一个 main 函数 ,即主函数 程序执行从 main 开始,在 main 中结束 源程序中可以有预处理命令,通常应放在源文件或 源程序的最前面 一行可以写多个语句,一个语句可以分几行书写 注:所有标点符号必须在 英文状态 下输入

6.6 C++ 程序书写规范 每个说明和每条语句都必须以 分号 “ ; ” 结尾, (预处理命令,函数头和花括号 “ } ” 之后除外) 标识符 , 关键字 之间必须至少加一个空格表示间隔, 若已有明显的间隔符,也可不再加空格来间隔 习惯用小写字母, 区分大小写 注释: // 和 /* */ 为注释符 常用 锯齿形 书写格式 所有标点符号必须在英文状态下输入 书写漂亮的程序: { } 要对齐 一行写一个语句 一个语句写一行 使用 TAB 缩进 有合适的空行 有足够的注释

7.7 程序分析 #include <iostream> // 预处理指令,载入头文件 using namespace std; // 使用标准的命名空间 int main() { cout << "Hello!" << endl; cout << "Welcome to C++! " << endl; return 0; } cout :标准输出,通常指屏幕 主函数 endl :换行并刷新流 << :插入

8.8 C++ 编译器 编译器就是将 “高级语言” 翻译为 “机器语言” 的程序 编译器 常见的 C++ 编译器 源代码 目标代码 可执行程序 编译 链接 一个现代编译器的主要工作流程: Visual C++ Windows 平台上最流行的编译器,集成在 Visual Studio 中 GNU C++ 开源免费, Linux/Unix 平台上的首选,非常优秀的编译器 Intel C++ Intel 的编译器,对自家硬件的支持很好, Win/Linux 都有相应版本

9.9 IDE Integrated Development Environment IDE ( 集成开发环境 ) 常见的 C++ 集成开发环境 用于程序开发的应用程序 / 软件,一般包括代码编辑器、 编译器、调试器和图形用户界面工具等 - Visual Studio : Windows 平台上最流行的商业 C++ 集成开发环境 - Dev C++ : 小巧,免费, win 下的 gcc ,非常适合学习 C++ - Code::Blocks : 开放源码的全功能跨平台集成开发环境 ,免费

10.10 C++ 编程基础 C++ 字符集:标识符,关键字 C++ 数据类型与类型转换 变量、常量、符号常量 运算符 、运算优先级 语句与表达式

11.10 C++ 编程基础 C++ 字符集:标识符,关键字 C++ 数据类型与类型转换 变量、常量、符号常量 运算符 、运算优先级 语句与表达式

12.12 词法记号 / 词汇 标识符: 用来标识变量名、函数名、对象名等的字符序列 由字母、数字、下划线组成,第一个字符必须是字母或下划线 区分大小写,不能用关键字 C++ 不限制标识符长度,实际长度与编译器有关,通常不要超过 32 个 命名原则:见名知意、不宜混淆 运算符 (详见后面介绍) 分隔符: 逗号、冒号、分号、空格、 ( ) 、{} 注释符:以 “ /* ”开头并以 “ * / ”结尾;或 “ // ”开头 文字:直接用字符表示的数据,即常量,如数字、字符串等 关键字: 具有特定意义的字符串,通常也称为保留字 类型说明符、语句定义符(控制命令)、预处理命令等

13.13 C++ 数据类型 整型 实型 字符型 (char) 整型 ( int ) 短整型 (short) 长整型 (long) 单精度 (float) 双精度 (double) 基本类型 C++ 数 据 类 型 布尔型 (bool) 无符号 (unsigned) 有符号 自定义数据类型 或扩展数据类型 或派生数据类型 或导出数据类型 数组型 枚举型 指针型 … … 类

14.14 基本数据类型 类型 关键字 所占字节数 表示范围 整型 short 2 - 2 15 ~ 2 15 - 1 int 2 / 4 - 2 15 ~ 2 15 - 1 / - 2 31 ~ 2 31 - 1 long 4 / 8 - 2 31 ~ 2 31 - 1 / - 2 63 ~ 2 63 - 1 unsigned int 2 0 ~ 2 16 - 1 unsigned short 2 0 ~ 2 16 - 1 unsigned long 4 0 ~ 2 32 - 1 实型 float 4 (6-7) 10 - 38 ~ 10 38 double 8 (15-16) 10 - 308 ~ 10 308 long double 16 (18-19) 10 - 4932 ~ 10 4932 布尔型 bool 1 true, false 字符型 char 1 C++ 标准没有规定每种数据类型的字节数和表示范围,只规定大小顺序,具体长度由处理器和编译器决定 。 更长的整型: long long / unsigned long long ex02_sizeof.cpp

15.15 数据类型的转换 自动转换 / 隐式转换 不同类型的数据进行运算,需先转换成同一类型 转换按数据长度增加的方向进行,以保证精度不降低 所有的浮点运算都是以双精度进行的 char 型和 short 型参与运算时,必须先转换成 int 型 赋值号两边的数据类型不同时,右边的类型将转换为左边的 char  short  int  unsigned  long  unsigned long  float  double int i =2 ; double x=3.2 , y; y= i+x ; ex02_datetype_01.cpp 例:

16.16 数据类型的转换 强制转换 / 显示转换 类型说明符 ( 表达式 ) // C++ 风格 ( 类型说明符 ) 表达式 // C 风格 将表达式的 值 转换成指定的数据类型 int i =2, a=3; double y, z; y=double( i )/a; // y= static_cast <double>( i )/a z=double( i /a); 例: 注: 类型转换 不会改变变量的数据类型!

17.17 数据类型的转换 转换规则 浮点型转整型: 直接丢掉小数部分 字符型转整型: 为字符的 ASCII 码 整型转字符型: ASCII 码对应的字符 int i ; char a; i =3.6; cout << " i =" << i << endl; i =-3.6; cout << " i =" << i << endl ; i =m; cout << " i =" << i << endl ; a=90; cout << "a=" << a << endl; 例:

18.18 变量 变量名: 要求与标识符相同 变量类型: 整型、实型、字符型、布尔型 变量必须 先声明,后使用 用于存储数据,值可以改变 变量的声明 数据类型 变量名列表 ; int i , j, k=0 ; double x(3.1415) ; char c; 变量的初始化: 有两种方式(赋值号和小括号) 例:

19.19 常量(常数) 整型常量: 整数,后面加 l 或 L 表示长整型, 后面加 u 或 U 表示无符号整型 实型常量: 缺省为双精度实数, 后面加 f 或 F 表示单精度,加 l 或 L 表示 long double 字符型常量: 用单引号括起来的单个字符和转义字符 字符串常量: 用双引号括起来的字符序列 布尔常量: true 和 false 在程序运行中值不能改变的量 123 , -456, 123L, 456U; 1.2 , 1.2F, 1.2L, 1.2e8, 1.2e8F, 1.2e-8L M , A, T, H, ?, $ " MATH@ECNU" 例:

20.20 符号常量 符号常量: 用标识符代表常量 const 数据类型 标识符 = 常量值 ; const float PI=3.1415926; 符号常量在声明时必须初始化 符号常量的值在程序中不能被修改(不能重新赋值) 例:

21.21 typedef typedef :为一个已有的数据类型另外命名(取别名) typedef 已有类型名 新类型名表 ; typedef double area, volume ; typedef int natural ; natural i , j; area s; volume v; 可以同时取多个别名 例:

22.22 运算符 算术运算符: + 、 - 、 * 、 / 、 % 、 ++ ( 自增 ) 、 -- ( 自减 ) 赋值运算符: = 、 += 、 -= 、 * = 、 /= 、 %= 、 &= 、 |= 、 ^= 、 >>= 、 <<= 逗号运算符: , ( 把若干表达式组合成一个表达式 ) 求字节数运算符: sizeof ( 计算数据类型所占的字节数 ) 关系运算符:用于比较运算, > 、 < 、 == 、 >= 、 <= 、 != 逻辑运算符:用于逻辑运算, && 、 || 、 ! 条件运算符:是一个三目运算符,用于条件求值 ( ? : ) 指针运算符: * ( 取内容 ) 、 & ( 取地址 ) 位运算符:按二进制位进行运算 & 、 | 、 ^ ( 异或 ) 、 ~ ( 取反 ) 、 << ( 左移 ) 、 >> ( 右移 )

23.23 赋值运算 标准赋值语句: int i =10, j, k; j = i ++; k = ++ i ; ex02_datatype_02.cpp 自增自减(前置和后置) ++ 、 -- 变量 = 表达式 x++; x = x+1; ++x; x = x+1; x = 3; x = y = 3; y = 3; x = y; y=x++*x; y=x*x; x=x+1; y=++x*x; x=x+1; y=x*x; 例: 例: 例: 前置: 先自增自减,然后使用 后置: 先使用,然后自增自减 不要在同一语句中包含一个变量的多个 ++ 或 -- ,因为它们的解释在 C/C++ 标准中没有规定,完全取决于编译器的个人行为 注:这种方式不能用于变量初始化!

24.24 赋值与逗号运算 int a, b, c, d, e; a = 5; b = a + 3; a = a + (c=6); d = e = f = a; e *= d; f /= c - 2; ex02_datatype_03.cpp 其他常见赋值运算符 += 、 -= 、 * = 、 /= 、 %= x += 3; x = x+3; x /= 3; x = x/3; 逗号运算符: int a=2, b; a = 3*5, a+10; b = (3*5, a+10); ex02_datatype_04.cpp 先计算 表达式 1 的值,再计算 表达式 2 的值, 并将 表达式 2 的值作为整个表达式的结果 表达式 1 ,表达式 2 例: 例: 例: 注意运算的优先级!

25.25 位运算 位运算符:按二进制位进行运算 & 、 | 、 ^ ( 异或 ) 、 ~ ( 取反 ) 、 << ( 左移 ) 、 >> ( 右移 ) short a=5, b=14; short c1,c2,c3,c4,c5,c6; c1 = a & b; c2 = a | b; C3 = ~ a; C4 = a ^ b; C5 = a << 3; C6 = a >> 2; 例: a : 00000000 00000101 b : 00000000 00001110 ex02_datatype_05.cpp / 补码 a&b a | b ~ a a ^ b a<<3 a>>2 : 00000000 00000100 : 00000000 00001111 : 11111111 11111010 : 00000000 00001011 : 00000000 00101000 : 00000000 00000001 其他运算符将会再后面的讲义中陆续介绍

26.26 运算优先级 () ++ ( 后置 ) --( 后置 ) 强制类型转换 ! ++ ( 前置 ) ––( 前置 ) + ( 正号 ) – ( 负号 ) * / % + – < <= > >= == != && || 赋值 ( = += –= *= /= 等 ) 逗号运算 ( , ) 高 低 详 见教材或课程 主页

27.27 常用数学函数 abs(x) | x | exp (x) e x log(x) ln x log10(x) lg x sqrt (x) pow( x,y ) x y 需加入 cmath 头文件 : #include < cmath > 取整函数: ceil, floor, round, trunc 三角函数: sin, cos, tan, asin, acos, atan 双曲三角函数: sinh,cosh,tanh,asinh,acosh,atanh min( x,y ) max( x,y ) 最小值 最大值 ex02_math.cpp

28.28 空语句 (只有分号) 声明语句 表达式语句 (赋值表达式) 复合语句 (将多个语句用 { } 括起来组成的一个语句) 选择语句 循环语句 跳转语句 ... ... 语句 程序由语句构成, C++ 的语句包括:

29.29 表达式语句 表达式与表达式语句 表达式: 运算符连接常量、变量、函数所组成的式子 表达式语句: 表达式; a+b*c a+b*c; 表达式可以包含在其它表达式中,但表达式语句不行! a+(b=3;)*c X 表达式中的运算符含 赋值运算符 a+(b=3)*c 赋值表达式的值是赋值号左边变量的值