Download presentation
Presentation is loading. Please wait.
Published byHertha Ziegler Modified 6年之前
1
第2讲 C++语言基础 基本语法成分 基本数据类型 变量和常量 运算符和表达式 综合案例分析
2
目标 掌握基本数据类型的定义以及不同数据类型之 间的转换机制 掌握各种常量的性质和定义 掌握变量的定义、初始化和使用
掌握基本数据类型的定义以及不同数据类型之 间的转换机制 掌握各种常量的性质和定义 掌握变量的定义、初始化和使用 熟练掌握各种运算符与表达式的使用
3
内容 基本语法成分 基本数据类型 变量和常量 运算符和表达式 综合案例分析
4
C++程序例子 #include <iostream> using namespace std; int main(int argc, char* argv[]) { int a,b,c; a=13; b=20; c=a+b; cout<<"The sum is"<<endl; cout<<c<<endl; return 0; }
5
2.1 基本语法成分 C++语言的基本要素是字符集,由字符集中的若 干字符按照一定的语法规则组成C++程序中各种 成分。
2.1 基本语法成分 C++语言的基本要素是字符集,由字符集中的若 干字符按照一定的语法规则组成C++程序中各种 成分。 (一)字符集——可使用字符的集合。 (二)标识符——用户用来标识程序中函数名,类型名、 常量名、变量名、对象名等实体而定义的单词。(注意 命名规则) (三)关键字——系统预设特殊用途的单词。(注意标 识符不得是系统关键字)
6
字符集 C++语言的字符集包括以下内容: (1) 大、小写英文字母:A-Z, a-z (2) 数字:0-9 (3) 特殊字符:
空格 ! # % ^ & * _ + - = ~ < > / \ ‘ “ ; . , ( ) [ ] { } :
7
标识符 标识符是程序员或系统定义的符号,用来表示变量、类 型或函数。在C++语言中,标识符可以由字母、数字和 下划线组成,并且标识符的第一个字符只能是英文字母 或下划线。 age,name,_ab,DAY_23,A123,T-3,123d,#as… 定义标识符时应注意字母的大小写 例如,int number 和int Number在C++中就是两个不同的标 识符。 定义标识符时还应该尽量选择能够反映其用途的单词或缩 写,这样可以提高程序的可读性。例如,在为年龄的整型 变量命名时,可以命名为age,要比命名为nl、a可读性高。 C++语言关键字如表2-1所示。
8
关键字 __asm else main struct __assume enum __multiple_inheritance switch
auto __except __single_inheritance template __based explicit __virtual_inheritance this bool extern mutable thread break false naked throw case __fastcall namespace true catch __finally new try __cdecl float noreturn __try char for operator typedef class friend private typeid const goto protected typename const_cast if public union continue inline register unsigned __declspec __inline reinterpret_cast using declaration, using directive default int return uuid delete __int8 short __uuidof dllexport __int16 signed virtual dllimport __int32 sizeof void do __int64 static volatile double __leave static_cast wmain dynamic_cast long __stdcall while
9
内容 基本语法成分 基本数据类型 变量和常量 运算符和表达式 综合案例分析
10
数据类型 类型是对数据的抽象。程序中的所有数据必属于某种类型。 在程序设计语言中,每个数据对象都要具有确 定的数据类型。 数据类型决定了:
在程序设计语言中,每个数据对象都要具有确 定的数据类型。 数据类型决定了: 1、数据的表现形式 2、数据的存储方式(取值范围) 3、对其可进行的操作 类型是对数据的抽象。程序中的所有数据必属于某种类型。
11
基本知识 数据在计算机中以二进制形式存储 位、字节和地址 1 1 字节byte 位bit 寻址空间 数据空间
12
数据类型
13
基本数据类型 数 据 类 型 说 明 所 占 字 节 取 值 范 围 char 字符型 1 -128~127 int 整型 4
说 明 所 占 字 节 取 值 范 围 char 字符型 1 -128~127 int 整型 4 ~ float 单精度实型 1.2e-38~3.4e38 double 双精度实型 8 2.2e-308~1.8e308 void 无值型 无取值范围 signed char 有符号字符型 unsigned char 无符号字符型 0~255 short [int] 短整型 2 ~32 767 signed short [int] 有符号短整型 unsigned short [int] 无符号短整型 0~65 535 signed [int] 有符号整型 ~ unsigned [int] 无符号整型 0~ long [int] 长整型 signed long [int] 有符号长整型 unsigned long [int] 无符号长整型
14
内容 基本语法成分 基本数据类型 变量和常量 运算符和表达式 综合案例分析
15
程序设计中的常量 常量是程序的基本组成要素
16
常量 整型常量 实型常量 在程序运行过程中其值一直保持不变的量 常量 字符型常量 字符串常量 符号常量
17
整型常量 问:123;0175;0x1AF分别表示什么进制的整型常量? 整型常量,不含小数部分,占 4个字节,范围:-231~(231-1)
由数字0~9和正负号表示;为 默认方式,例如: 43;1345 1 十进制 由数字0开头,后跟数字0~7表示 例如: 043;056 整型常量 八进制 2 由0x开头,后跟0~9, A~F表示; 例如:0x12,0xdf; 3 十六进制 问:123;0175;0x1AF分别表示什么进制的整型常量?
18
实型常量 实型常量,由整数部分和小数部分构成,只能用十进制。 小数表示法 例如: 6.45; 0.235 实型常量 科学计数法
1 小数表示法 例如: 6.45; 0.235 实型常量 科学计数法 2 例如: 2.2e e-5 2.2×103 -12.3×10-5 注意:字母e(或E)之前必须有数字,且e后面的指数必须为整数!
19
字符型常量 字符型常量,单引号括起来的一个字符 计算机内部以ASCII码的形式表示所有字符 一个字节的容量(8位)表示一个字符。
例: ‘A’ 字符的ASCII码为0x41或65,在内存中表示: ‘A’ 字符的ASCII码
20
ASCII字符代码表
21
字符型常量—转义字符 转义序列 表示ASCII码表中 的不可显示字符 \’ \’’ \? \\ \a \b \f \n \h \t \v
说明 \’ 39 单引号 \’’ 34 双引号 \? 63 问号 \\ 92 反斜杠 \a 7 响铃 \b 8 退格 \f 12 走纸接页 \n 10 换行 \h 13 回车 \t 9 水平制表 \v 11 垂直制表 转义序列 表示ASCII码表中 的不可显示字符
22
字符串常量 双引号括起来的字符序列 存储方式——每个字符占一个字节,在串尾自动 添加一个‘\0’作为字符串结束标志。 例如:“China”
1 1 i n 1 1 a \0 1
23
字符型常量和字符串常量的区别 字符串类型的数据是由双引号括起来的字符序列。‘a’是字符,“a”是字符串
区别1 字符串在存储时有字符串结束标志“\0”,以便系统判断字符串是否结束。 区别2 当字符串输出时,字符一个一个地输出,直到“\0”结束。 区别3 .
24
例: ‘a’ 字符 随机 a 长度占1个字节 “a” 字符串 a ‘\0’ 随机 随机 随机 随机 随机 长度占2个字节
25
符号常量 符号常量—用自定义的符号表示常量 使用#define语句来定义符号常量 #define 常量名 值
例如: #define N 100 #define M 200+N 使用const定义符号常量 const 类型名 符号常量名 = 常量值; 例如: const int N = 100; const int M = 200;
26
#define与const的区别 C++中推荐使用 const定义常量! 二者区别 #define是在预处理阶段展开的宏 编译器处理方式不同
类型和安全检查不同 C++中推荐使用 const定义常量! const有具体的类型,在编译阶段会执行类型检查
27
高级语言编译过程 编译预处理 C语言提供的编译预处理的功能有以下三种: 宏定义 文件包含 条件编译 库文件 (各种函数) 可执行文件
(二进制文件) *.EXE 源程序 (文本文件) *.CPP 目标文件 (二进制文件) *.OBJ 编译 连接 C语言提供的编译预处理的功能有以下三种: 宏定义 文件包含 条件编译
28
编译预处理 #define A 100 宏定义 #include <iostream> 文件包含
#if( defined(DEBUG) || defined(LOG) ) //do something #endif 条件编译
29
例1: #define和const N*M=100*100+100 = 10100 N*M=100*(100+100) = 20000
#include<iostream.h> # define N 100 # define M 100+N void main(void) { int result; result=N*M; cout<<result<<endl; } #include<iostream.h> const int N = 100; const int M = 100+N; void main(void) { int result; result=N*M; cout<<result<<endl; } N*M=100* = 10100 N*M=100*( ) = 20000
30
变量 程序运行过程中其值可以被改变的量称为变量。 变量主要用于存储数据。 变量必须先定义后使用。
31
变量 定义格式: 变量名要求符合C++语言标识符命名规则; 2.3.2 变量 (1)变量的定义 数据类型 变量1[,变量2,…,变量n];
变量 (1)变量的定义 定义格式: 数据类型 变量1[,变量2,…,变量n]; 变量名要求符合C++语言标识符命名规则; 理解: 变量名 变量的值 变量的存储单元
32
变量 变量 (2)变量的赋值和初始化 赋值格式: 变量名 = 变量值; 初始化格式: 数据类型 变量名=初始值;
33
整型变量 分为有符号型与无符号型。 有符号型:最高位表示符号位 无符号型:最高位不表示符号位
short 在内存中占两个字节,范围为-215~(215-1) int 在内存中占四个字节,范围为-231~(231-1) long在内存中占四个字节,范围为-2-31~231-1 无符号型:最高位不表示符号位 unsigned short 在内存中占两个字节,范围为0~216-1 unsigned int 在内存中占四个字节,范围为0~232-1 unsigned long在内存中占四个字节,范围为0~232-1
34
例1: 不同类型的整型数据间的赋值归根到底就是一条:按存储单元中的存储形式直接传送。 unsigned short a a b
#include <iostream.h> void main() { unsigned short a; short int b= -1; a=b; cout<<"a="<<a<<endl; } 不同类型的整型数据间的赋值归根到底就是一条:按存储单元中的存储形式直接传送。 unsigned short a a 1 结果:65535 b 1
35
例2: #include<iostream.h> const int PRICE=30; void main(void) { int num, total; num=10; total=num*PRICE; cout<<“total=“<<total; } //常量,在程序中保持不变 //定义变量,在内存中开辟区间 //变量赋值,10为常量 //输出结果 num PRICE total 10 30 300
36
例3: #include<iostream.h> void main(void) { int int10,int8,int16;
int16=0x10; cout<<"int10="<<int10<<endl; cout<<"int8="<<int8<<endl; cout<<"int16="<<int16<<endl; } //定义3个整型变量 //默认为十进制 //八进制 //十六进制 int10=10 int8=8 int16=16
37
实型变量 实型变量分单精度 float 和双精度 double 两种 形式: float:占四个字节,提供7~8位有效数字。
38
字符型变量 采用ASCII码值进行存储。 可将整数与字符进行转换。 在程序中表示为:
char grade ;//定义一个字符型的变量空间(1个字节) grade=‘A’; //必须用‘ ’表示,否则易与标识符混同
39
例1: #include<iostream.h> void main(void) { int a=65; char grade;
grade=a; cout<<grade<<endl; } 以下的赋值形式均是等同的 grade='A'; grade=65 ; grade=0x41; grade=0101;
40
例2: char c1,c2,c3; c1='A'; c2=65; c3=c1+32; int x=c1;
#include<iostream> void main() { char c1,c2,c3; c1='A'; c2=65; c3=c1+32; cout<<"c1="<<c1<<endl; cout<<"c2="<<c2<<endl; cout<<"c3="<<c3<<endl; int x=c1; cout<<"x="<<x<<endl; }
41
输入输出流 C++中由于面向对象的概念,输入输出将不使用 scanf和printf,而是cin和cout是输入输出流,用 于控制台的输入输出操作。 cin是输入流,负责键盘的输入接受(>>); cout是输出流,负责输到屏幕或外设等(<<)。
42
cin和cout例程: #include <iostream.h> int main () { int x = 0,y = 0; // 打印提示信息到屏幕 cout << "Please input tow number:"; cin >> x >> y; // 接收键盘输入的两个数 cout << "x+y=" << x+y << endl; return 0; }
43
cin的补充说明 cin是istream类型对象。cin对象将标准输入看作 字节流。
44
思考题 以下两段程序分别定义了哪些常量类型? 程序运行的结果分别是什么? 程序1 程序2
网络课程平台
45
内容 基本语法成分 基本数据类型 变量和常量 运算符和表达式 综合案例分析
46
画图程序中的运算符和表达式
47
运算符和表达式的概念 表示某种运算功能的符号 运算符 由运算符和操作数组成 表示某种运算的式子 表达式 运算符的功能、类型
运算符的操作数个数 表示某种运算功能的符号 运算符的优先级 点击添加文本 点击添加文本 运算符的结合性 由运算符和操作数组成 表示某种运算的式子 表达式 表达式的构成 表达式的值
48
运算符及表达式分类 1 2 3 4 5 6 算数运算符及表达式 关系运算符及表达式 赋值运算符及表达式 逗号运算符及表达式
运算符及其表达式 3 赋值运算符及表达式 4 逗号运算符及表达式 5 逻辑运算符及表达式 6 位运算符及表达式
49
算术运算符及其表达式 C++中的算术运算符 运 算 符 优 先 级 名 称 ++ -- - * / % + 高 变量的值增1 变量的值减1
运 算 符 优 先 级 名 称 ++ 2 自增运算符 -- 自减运算符 - 负运算符 * 4 乘运算符 / 除运算符 % 求余运算符 + 5 加运算符 减运算符 高 变量的值增1 变量的值减1 两数相除所得的商 两数相除所得的余数 低
50
++和--运算符及表达式 ++i; i++; i=3; j=++i; cout<<j; i=3; j=i++;
类型:前置和后置 ++i; i++; ++i —— 先将i的值加1,然后再使用 i++ —— 先使用i的值,然后再将i加1 i=3; j=++i; cout<<j; i=3; j=i++; cout<<j; 4 3
51
++和--运算符及表达式 --i; i-- --i —— 先将i的值减1,然后再使用 i++ —— 先使用i的值,然后再将i减1
类型:前置和后置 --i; i-- --i —— 先将i的值减1,然后再使用 i++ —— 先使用i的值,然后再将i减1
52
关系运算符及表达式 用于进行两个数的比较。 结果类型为bool,即true或false。 例:a=3; b=4 运 算 符 名 称 描 述
运 算 符 名 称 描 述 > 大于 a>b,值为false,b>a,值为true < 小于 a<b,值为true,b<a,值为false == 等于 a==b,值为false >= 大于等于 a>=b,值为false;b>=a,值为true <= 小于等于 a<=b,值为true;b<=a,值为false != 不等于 a!=b,值为true
53
bool类型数据 TRUE FALSE bool ret; int var = 3; ret = var; var = ret;
结果通常只有真和假两个值 为真时,结果=1 TRUE FALSE bool ret; int var = 3; ret = var; var = ret; 为假时,结果=0 bool类型可与整型相互赋值。 ret=true var=1
54
赋值运算符和其他运算符组合起来可以简化语句的书写,被称为复合赋值运算符
赋值运算符及表达式 C++中赋值运算符 赋值运算符“=”用来更新变量的值 运 算 符 名 称 描 述 A=B 赋值运算符 B值赋值给A A-=B 减赋值运算符 A-B的值赋值给A A+=B 加赋值运算符 A+B的值赋值给A A*=B 乘赋值运算符 A*B的值赋值给A A/=B 除赋值运算符 A/B的值赋值给A A%=B 求余赋值运算符 A/B的余数赋值给A A<<=B 左位移赋值运算符 B二进制数左移一位赋值给A A>>=B 右位移赋值运算符 B二进制数右移一位赋值给A A&=B 按位与赋值运算符 A与B二进制数按位与后赋值给A A|=B 按位或赋值运算符 A与B二进制数按位或后赋值给A A^=B 按位异或赋值运算符 A与B二进制数按位异或后赋值给A A=A-B 赋值运算符和其他运算符组合起来可以简化语句的书写,被称为复合赋值运算符 A=A+B
55
逗号运算符及表达式 逗号运算符 表达式1,表达式2,…,表达式n 用逗号将两个表达式连接起来 表达式格式: 整体表达式的值 首先求解
其次求解 最后求解
56
逗号表达式 int a; a = (1+2,5*2,4+5,8+5); a=13 a=(3+4, 5*6, 2+1); a=3
逗号表达式的值 a=3*3, a+6, a+7; a=9 16 逗号表达式的值 (a=3*5, a*4), a+5 a=15 20
57
逻辑运算符及表达式 逻辑运算符用于执行逻辑运算,常被作为条件表 达式使用。 逻辑表达式的结果的类型为bool,即只能为true或false
逻辑运算符用于执行逻辑运算,常被作为条件表 达式使用。 运 算 符 名 称 描 述 && 逻辑与 运算符两边都为True时,结果为True,否则为False || 逻辑或 运算符两边都为False时,结果为False,否则为True ! 逻辑非 运算数为True时,结果为False,否则为True 逻辑表达式的结果的类型为bool,即只能为true或false
58
位运算符及表达式 位运算符 对操作数按二进制的形式逐位运算 操作数都应是整型常量,不能是实型常量 ~(取反) >> (右移)
& (按位与) << (左移) 位运算符 ^(按位异或) |(按位或) 对操作数按二进制的形式逐位运算 操作数都应是整型常量,不能是实型常量
59
例: 计算13&14 13 1 14 & 12 1 1 13&14=12
60
强制转换类型 y的值没有改变,仍是单精度浮点型 x=5 y=5.8 (类型名)(表达式)
(double) a (int) (x+y) (int) 6.2%4=2 在强制类型运算后原变量不变,但得到一个所需 类型的中间变量。 如:int x; float y=5.8; x=(int) y; y的值没有改变,仍是单精度浮点型 x=5 y=5.8
61
表达式的值 逗号表达式:顺序求出表达式的值,结果 是最右边的表达式的值。
逗号表达式:顺序求出表达式的值,结果 是最右边的表达式的值。 赋值表达式:将“=”右边表达式的值赋给 左边的变量,结果为赋值后的变量值。 条件表达式:根据前面表达式的值判断执 行后面两个表达式中的哪一个。 指针表达式:对指针类型的数据进行运算, 结果是指针类型。
62
C++运算符和结合性
63
思考题 该代码中能找出多少种运算符和表达式?
int ParseUpdateFile(char* szfileName) if( (keyWordStart != string::npos) && (keyWordEnd != string::npos) && (keyWordEnd > keyWordStart) ) { int iRet = -1; if(NULL == szfileName) string strKeyWord = strGbk.substr(keyWordStart+7,keyWordEnd - keyWordStart -7); return iRet; fstream fs(szfileName); cout << strKeyWord << endl; stringstream ss ; // 创建字符串流对象 ss << fs.rdbuf(); // 把文件流中的字符输入到字符串流中 keyWordStart = strGbk.find("<div class=\"cv-title\">"); fs.close(); keyWordEnd = strGbk.find("</div>",keyWordStart+1); string str = ss.str(); // 获取流中的字符串 if( (keyWordStart != string::npos) && (keyWordEnd != string::npos) && (keyWordEnd > keyWordStart) ) string strGbk; int i = UTF8Str2GBK(str,strGbk); if(strGbk.size() == 0 || i != 0) string strKeyWord = strGbk.substr(keyWordStart+22,keyWordEnd - keyWordStart -22); { cerr << "transfer utf8 to gbk error" << endl; } iRet = 0; basic_string <char>::size_type keyWordStart = return iRet; strGbk.find("<title>"); } basic_string <char>::size_type keyWordEnd = strGbk.find("</title>",keyWordStart+1); 该代码中能找出多少种运算符和表达式? 网络课程平台
64
内容 基本语法成分 基本数据类型 变量和常量 运算符和表达式 综合案例分析
65
总结 基本语法成分 基本数据类型 变量和常量 运算符和表达式 综合案例分析
66
作业 课本P44页2.5、2.6题 要求:每题一个程序 程序中算出各题结果,依次输出,要求在输出结果 之前先要输出表达式
程序中算出各题结果,依次输出,要求在输出结果 之前先要输出表达式 作业提交不迟于规定时间节点 注意命名规则
Similar presentations