C++知识点(整理版)_第1页
C++知识点(整理版)_第2页
C++知识点(整理版)_第3页
C++知识点(整理版)_第4页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、一、 C+标识符的命名规则1. 所有标识符必须由一个字母 (az 或 AZ) 或下划线 (_)开头;2.标识符的其它部分可以用字母、下划线或数字(09) 组成;3.大小写字母表示不同意义 , 即代表不同的标识符,如前面的cout 和 Cout ;二、如何正确地声明变量及其初始化2. C+中变量定义的格式 :类型名变量名 1,变量名 2, ,变量名 n ; 如: int num1, num2;( 2.1)在 C+中,每个变量在使用前必须被定义,以便编译器检查变量使用的合法性。变量定义只是给变量分配相应的空间。( 2.2) C+允许在定义变量的同时给变量赋初值。变量未被赋值前,值为未知格式: 类型

2、名 变量名 = 初值;或者:类型名 变量名(初值);如: int count = 0; 或 int count(0); 都是定义整型变量 count ,并为它赋初值0。可以给被定义的变量中的一部分变量赋初值,如:int sum = 0, count = 0, num;( 2.3)一旦定义了一个变量,可以将一个常量赋给该变量。变量赋值过程是“覆盖 ”过程,用新值去替换旧值如 int a;a=123; 或 a = 0x123; 都是正确的( 2.4)在 C+中, 定义变量时没有赋初值,然后直接引用该变量是危险的!3. 数据类型 (data type) :数据的编码方式、值域和可执行的操作。数据类型

3、包括两个方面:数据的取值范围、可用的操作。C/C+ 中的数据类型分为两大类:基本数据类型:整型、浮点型、字符型和布尔型构造数据类型:字符串、数组、结构、联合和枚举( 3.1)整型 (int) :以补码形式存储。基本型 int ;长整型 long: long / long int( )整数运算时要注意数据的表示范围。如整数用两个字节表示,正整数 32767 加 1 的结果为 -32768 。这称为整数运算的溢出,系统不检查这样的错误,程序员必须自己保证程序中不出现这样的错误。()在某些应用中,不可能出现负数,则整型数中有一半的数值范围是被浪费的。因此在 C/C+ 中可以将所有的数都看成正整数,称

4、为无符号数。无 符 号 数 的 定 义 : 在 各 种 整 数 类 型 前 加 上 关 键 词 unsigned , 变 成 unsigned int, unsigned short, unsigned long( 3.2) 实型:以浮点表示,操作类似于整型,浮点数无法精确表示。( )浮点类型的分类:单精度 float ;双精度 double( 3.3)字符型( char ):存放一个字母或符号,占一个字节,存放的是字符的内码。可执行比较、连接等运算。具有双重属性:整数属性和字符属性,整数属性:字符类型即单字节的整数类 ,字符属性:数据值即为相应字符的 Ascii 码。字符类型名: char

5、。可分为可打印字符:小写字母、大写字母、数字、标点符号、空格等;非打印字符:换行和报警字符或响铃等控制字符( 3.4 ) 布 尔 型 (bool) :只 有 “真 ”、 “假 ”两 个 值 。 可 执 行 判 断 运 算 。如 bool flag=true;( 3.5)字符串( string ):是类类型,用双引号 “”表示,可执行字符串比较 ,连接应用时要加 #include <string> 如 string str= “dfhdsf ”;三、如何声明常量4.常量:值的直接表示。如1、 3、1.57 、“A?等 ,又称直接量。( 4.1) 整型常量可用十进制、八进制和十六进制表

6、示:如十进制: 123, -234;八进制:0123 十六进制: 0x123, 0x3a2f( 4.2)浮点数常量有两种表示法:( 1)十进制表示: 1.23 , 3.14;( 2)科学计数法:尾数 e 指数 123e2=12300 2.25e-3=0.00225 ; 注意:尾数不能为空,指数必须为整数( 4.3)字符常量: ”a?, “S?, ”2?等用一对单引号括起来的数据。字符串常量用双引号( 4.4)命名常量:为值指定一个描述性的文字,增加程序的可读性。在 C+语言中,用 const 修饰,如 const double PI =3.14; 见 PI 即知 3.14。注意一般变量名需大写

7、,如 PI。二、算术运算符号及其运行规则a) 整数除整数b) % 求模运算5.算术运算符: +(加) -(减)*(乘)/ (求商)%(求余)( 5.1) “-”可为二元运算符,也可为一元运算符,其余所有的算术运算符都是二元运算符。( 5.2)优先级:高 * / % , 低 + -( 5.3)整型与整型数运算,结果为整型,如5 / 2 = 2 ;整型与浮点数运算,结果为浮点数,如5 / 2.0 = 2.5 ;字符与整型数运算,结果为整型;字符与浮点数运算,结果为浮点数。浮点数与浮点数运算,结果为浮点数。“%”运算符:取余,其两边都必须是整型数。6.关系运算符:>,>=,=,<=

8、,<,!=( 6.1) 优先级:高于赋值运算符,低于算术运算符。关系运算符内部:=和 ! =较低( 6.2)关系表达式:用关系运算符将二个表达式连接起来称为关系表达式。关系表达式的结果是 true 或 false。 “等于 ”运算符是由两个等号组成。常见的错误是在比较相等时用一个等号。 =( 相等 ), =(赋值)7. 逻辑运算符:&& (and)| (or)!(not)( 7.1)优先级:! 高于 关系运算符 高于 && 高于 |( 7.2)逻辑表达式:由逻辑运算符连接起来的表达式,其结果为 “真 (true) ”或 “假(false) ”逻辑表达式在执

9、行时,先处理左边。如左边已能决定此逻辑表达式的结果,则右边不执行。因此,在&& 逻辑表达式中,应把false 可能性较大的条件放在左边,在 | 表达式中,应把 true 可能性较大的条件放在左边,这样可以减少程序执行的时间8赋值运算符: = 的优先级比算术运算符低( 8.1)赋值语句:把一个值赋给一个变量。如x = y + z; x = 3.14; 赋值语句的左边是变量,右边是表达式。( 8.2)赋值表达式格式:<变量 > = <表达式 >如 x = x + 2。作用:将右边的表达式的值存入左边的变量,整个表达式的值是右边的表达式的结果。 赋值运算符是右

10、结合的( 8.3)左值 (lvalue) : 在 C+中,能出现在赋值运算符左边的表达式称为左值右值( rvalue ):赋值运算符右边的表达式的值( 8.4)赋值语句:赋值表达式后面加上分号。( 8.5)将赋值表达式作为更大的表达式的一部分。如: a = (x = 6) + (y = 7) 等价于分别将 x 和 y 的值设为 6 和 7,并将 6 和 7 相加,结果存于变量a( 8.6)其他运算符与赋值运算符结合的运算符称为复合赋值运算符。格式:变量 op= 表达式 ; 等价于:变量 = 变量 op 表达式 ;常用的复合赋值运算符有:+=,=,*=,/=,%= 如: balance += d

11、eposit; balance -= surcharge; x /= 10; salary *=2;( 8.7)赋值和运算时的自动类型转换,在进行赋值操作时,会发生类型转换,将取范围小的类型转为取值范围大的类型是安全的反之是不安全的,如果大类型的值在小类型能容纳的范围之内,则平安无事强制类型转换: (类型名)(表达式);或类型名 (表达式);如 z = (double)x / y; 静态转换 (static_cast) :用于编译器隐式执行的任何类型转换格式:转换类型 <类型名 > (表达式 ) 如 z = static_cast<double>(x) / y;1. 单

12、个分号组成的语句成为空语句2. 用 括起来的一组语句称为复合语句。在逻辑上看成一个语句。 v 复合语句可以放在任何单语句出现的地方。3. 在复合语句中可以定义变量,但必须定义在最前面。4. 逗号表达式语句格式:表达式 1,表达式 2,,表达式 nv 逗号运 算符的优 先级 是所有 运算 符中最 低的 如 a 的初值为 0 , 则表达式 a += 1, a += 2, a += 3, a += 4, a += 5的结果为 155. 前置+i, -i ( 先执行 i+1 或 i-1 ,再使用 i 值)6.后置 i+, i-( 先使用 i 值 ,再执行 i+1 或 i-1 )If 语句c) 形式d)

13、 三种 If 语句的执行流程9. 控制语句 : 改变程序中语句的执行次序。(9.1)if 语句 : 两个分支:条件测试为 true 时所执行的程序块叫做 then 子句,条件为 false 时执行的语句叫做 else 子句。格式( 1 )if (条件测试)语句;即 else 语句可省略( 2)if (条件测试)语句 1; else语句 2;eg. if (grade >= 60)cout << “passed”;eg. if (grade >= 60)cout << “passed”;elsecout <<“failed ”;格式( 3)多分支语

14、句:条件 1 为 true 时所执行的程序块 1,条件 1 为 false 但满足条件 2 时执行的语句块 2,。依次类推,条件 n-1 为 false 但满足条件 n 时执行 else 语句。常见的有 3 分支语句: if else ifelse。eg. if(grade >= 90)cout << “A”;else if(grade >= 80)cout << “B”;else if(grade >= 70)cout << “C”;else if(grade >= 60)cout << “D”;elsecout <

15、;<”E”;( 9.2)条件语句使用注意 条件的结果值应该是true 或 false,它们是 C+中 bool 类型的值 条件可为任意表达式,不一定是关系表达式。0 为 false,非 0 为 true 。 if 语句可以没有else 子句。合理的缩排。 if 语句的 then 子句和 else 子句含有 if 语句,称为 if 语句的嵌套。 eg if (x < 100)if (x < 90)语句 1;else if (x<80)语句 2;else语句 3;else 语句 4; 歧义性:如最后一个else 跟哪个 if 配对 .。egif (y != 0)if (x

16、!= 0)result = x / y;elsecout<<“error :y = 0 ”<<endl;配对原则:每个else 子句是和在它之前最近的一个没有else 子句的 if 语句配对。 在每个 if-else 语句后加一对大括号是一种良好习惯,特别是有两个以上的复合语句需要执行时。( 9.2)条件表达式: 作用:更加简练的用来表达条件执行的机制?:运算符 :问号冒号运算符形式 : (条件 ) ? 表达式 1 : 表达式 2 eg: max = x > y ? x :y;循环语句e) 形式f) 三种循环语句的区别g) 三种循环语句的执行流程10.循环语句:一

17、个完整的循环结构一般由四部分组成:( 10.1)For 语句:主要用于计数循环v 格式: for (表达式 1;表达式 2;表达式 3) 语句; or 语句快 ;可以理解为 :for( 循环变量赋初值;循环条件;循环变量增值 )符合循环条件时的执行语句v 循环体可以是复合语句或空语句。v 循环里所有语句的一次完全执行称为一个循环周期。v 执行过程:先执行表达式1,再执行判断表达式2,如果为true ,执行一次循环体(即一个循环周期),接着执行表达式3,然后重新执行判断表达式2,若为true,又执行一次循环体,重复直至判断表达式2 为 false,,最后跳出整个循环。若开始执行条件表示2 为 f

18、alse, 循环体一次也不执行。v For 循环的三个表达式可以是任意表达式。三个表达式都是可选的。v 如果循环不需要任何初始化工作,则表达式1 可以缺省。如循环前需要做多个初始化工作,可以将多个初始化工作组合成一个逗号表达式,作为表达式1。如 for (int i=0,; i<=10; +i) ;v 表达式2 也不一定是关系表达式。它可以是逻辑表达式,甚至可以是算术表达式。当表达式 2 是算术表达式时,只要表达式的值为非0,就执行循环体,表达式的值为 0 时退出循环。v 如果表达式2 省略,即不判断循环条件,循环将无终止地进行下去。无终止的循环称为 “死循环 ”,最简单的死循环是for

19、 ( ;);( 10.2)While 语句: 与 for 循环等价,可相互代替。v 格式: while (表达式)语句; or 语句块; v 执行过程:先计算出条件表达式的值。如果是false,循环终止;如果是true ,整个循环体将被执行,而后又回到 while 语句的第一行,再次对条件进行检查,若为 true, 接着执行循环体,重复直到条件为 false,,跳出整个循环。v 用途:用于循环次数不定的循环。循环是否结束取决于某一个变量的值(标记控制重复)v 在 for 和 while语句之后一般没有分号,有分号表示循环体就是分号之前的内容(空循环体)( 10.3)Do- While 语句v

20、格式:do 语句; or 语句块; while ( 表达式 );v 执行过程:首先执行语句,然后判断表达式的值。如果表达式为0,继续向下执行,否则,再次执行语句,再次判断表达式的值v 用途:用于至少执行一次的循环。注意后面有分号;11 跳转语句:v break 语句:跳出整个循环或switch 语句。若有多重循环,跳出含break最近的循环体。v continue 语句:跳出当前本次循环,接着判断是否执行下次循环周期。12 几种典型的循环。注意格式及应用v 输入验证循环:以下两种等价,右边一个常用 cout <<" 请输入半径 :" / 提示输入do cout

21、<< “请输入半径 :" cin>>radius;area = PI * radius * radius while ( radius < 0);/ 当 radius < 0 ,重复输入,直到2.while(true) /或 while (1)>0for () cout << “输入一个正整数:"/cin >>num;if (num = -1) break; / if (num=sum += num;/ 处理数据提示用户并读入数据标志) 跳出 ;v 查询循环 累加循环 p=0; char ans; / 用于用

22、户响应for(int i=1;i<=N;i+) cout <<" 请输入半径 :" / 提示输入p=p+i;cin >> radius;area = PI * radius * radius 累乘循环 : p=1cout << "area = " <<area <<endl;for(int i=1;i<=N;i+)cout << "do you again?"<<endl; /询问提示p=p*i;cin >>ans; / 询问输

23、入 while(ans = 'Y'| ans = 'y'); /询问循环v 编译( compiler ):将高级语言的程序翻译成机器语言,分为解释执行,编译执行v 连接 (link) :将目标程序与已有的其它目标程序连接起来,产生一个可执行的程序v 输出流是传给显示器的数据流,将变量或表达式的内容显示在显示器上格式? 输出一个变量的值: cout << a;? 输出多个变量的值: cout << a << b << c;? 输出表达式的结果: cout << “Hello worldn ”<<

24、; endl? 上述情况的组合: cout << a << “+”<< b << “=”<< a+b << endl; v 键盘流入的数据流,将键盘输入的数据存入变量格式: cin >>变量 1 >> 变量 2 >> >> 变量 n; 如 cin >> a;当程序执行到 cin 时会停下来等待用户的输入 ,后面一定是变量名,不可加引号 用户可以输入数据,用回车()结束。当有多个输入数据时,一般用空白字符(空格、制表符和回车)分隔。如: a 为整型, d 为 dou

25、ble ,则对应于cin >> a >>d,用户的输入可以为12 13.2or12( tab 键) 13.2 or 1213.2如何定义一个带默认值参数的函数如何调用一个带默认值参数的函数h) 参数使用默认值i) 参数不使用默认值函数v 过程单元是程序的基本单位。在过程化的语言中,过程单元就是程序中某个模块的表示。在面向对象的语言中,过程单元说明对象对各种事件是如何响应的。v 每个程序都必须有一个名为main的函数,它是程序的入口。主程序由一个或多个函数组成v 程序主体(主函数main ():主要包含如下模块:(definitioninput-proocess-oupu

26、t)(1) 变量定义:为程序中的数据准备存储空间( declaration or definition)(2) 输入阶段:接受所需输入的信息。它由两部分组成:显示提示信息和接收输入 (input)(3) 计算阶段:完成所需的计算 (process)(4) 输出阶段:输出计算的结果 (output)v 函数的主要构成:函数声明,函数定义,函数调用v 可以把函数想象成数学中的函数。如 f(x)=2x 参数表是一组自变量 x,返回类型是函数值的类型 ; 函数声明就是设函数为 f(x), 函数定义(函数头 +函数体)就是函数表达式如 2x,函数调用就是带值计算如 f(2)=2 ×2。v 函数

27、声明:类似于变量声明,所有函数在使用前必须被声明。又称函数的原型,功能:说明函数和外界的交流,反映函数调用的全部信息。包括下列内容:函数名,函数的参数类型,函数的返回类型它的形式为: 返回类型 函数名(参数表);返回类型:是函数的输出值的类型 , void 函数没有返回值函数名:是函数的名字。程序可以通过函数名执行函数体的语句参数表:是函数的输入 , 无参数列表,可不写,但是括号必须有。参数表中的参数说明之间用 “, ”分开,每个参数说明可以是类型,也可以是类型后面再接一个参数名。如: int max(int, int);int max(int a, int b); int main( ) v

28、函数定义:函数头+函数体,相当于一个小程序。void函数头:说明函数和外界的交流,与函数声明一样,参数表要有形参,除外 函数体: 一系列独立的程序步骤 ; ,必须定义在函数体最前面形式:返回类型函数名(参数表) / 函数头 code here;/ 函数体Eg : int max(int a, int b)/ 函数定义 if (a > b) return(a); else return(b);v 函数调用形式 : 函数名(实际参数表) ;一般出现在主调函数中或其他调用函数中。eg. max( x,y) ;v 函数执行过程:( 1) 在主程序中计算每个实际参数值。( 2) 调用时将实际参数的

29、值赋给对应的形式参数。在赋值的过程中完成自动类型转换。( 3) 进入函数体依次执行函数体的每个语句,直到遇见return 语句或函数体结束( 4) 计算 return 后面的表达式的值,如果表达式的值与函数的返回类型不一致,则完成类型的转换。( 5) 用函数的返回值置换函数,继续主程序的执行。 Eg int max(int a, int b); / 函数声明int main( ) int x, y ;cin >> x >> y;cout << max(x + 5, y - 3);/函数调用 int max(int a, int b) /函数定义 if (a

30、> b) return(a); else return(b); v 注意:(1) 形式参数和实际参数的个数 (number) 、排列次序 (order) 、类型 (type) 要完全相同。(2) 实际参数可以是常量、变量、表达式,甚至是另一个函数调用(3) 传递方式:值传递,执行函数调用时,将实参值传递给形参,并替换形参同名的实体(4) int a=3,b=4; cout<<"a="<<a<<",b= cout<<"a="<<a<<",b=(5) void

31、swap(int *x ,int *y);/(4) 值传递:函数获得了主调程序参数变量值的拷贝。被调程序可以改变这些拷贝,但这对主调程序的环境没有影响。( 5)请注意: C+中不允许函数定义嵌套,即在函数定义中再定义一个函数是非法的。一个函数只能定义在别的函数的外部,函数定义之间都是平行的,互相独立的 。 例 如 : 下 面 的 代 码 在 主 函 数 中 非 法 嵌 套 了 一 个 f ( ) 函 数 定义: void main() void f()/ 函数参数的传递比较:1. 按值传递 以按值传递方式进行参数传递的过程为:首先计算出实参表达式的值,接着给对应的形参变量分配一个存储空间,该空

32、间的大小等于该形参类型的长度,然后把已求出的实参表达式的值一一存入到为形参变量分配的存储空间中,成为形参变量的初值,供被调用函数执行时使用。这种传递是把实参表达式的值传送给对应的形参变量,故称这种传递方式为 “按值传递 ”。这种方式被调用函数本身不对(主调函数中)实参进行操作,也就是说,即使形参的值在函数中发生了变化(主调函数中)实参的值也完全不会受到影响,仍为调用前的值。 例:按值传递。void swap(int,int);/函数定义void main() int a=3,b=4;cout<<"a="<<a<<",b=“<

33、;<b<<endl;swap(a,b); /函数调用cout<<"a="<<a<<",b="<<b <<endl; void swap(int x,int y)/函数定义 int t=x; x=y; y=t; 此程序的运行结果为:a=3,b=4a=3,b=42. 地址传递 如果在函数定义时将形参的类型说明成指针,对这样的函数进行调用时就需要指定地址值形式的实参。这时的参数传递方式即为地址传递方式。这种地址传递与上述的按值传递不同,它把实参的存储地址传送给对应的形参,从而使得形参

34、指针和实参指针指向同一个地址。因此,被调用函数中对形参指针所指向的地址中内容的任何改变都会影响到实参。例:地址传递。函数声明 void main() “ <<b<<endl; swap(&a,&b); 、 “ <<b<<endl; void swap(int *x,int *y) int t=*x; *x=*y; *y=t; 此程序的运行结果为:a=3,b=4a=4,b=33. 引用传递 按值传递方式容易理解,但形参值的改变不能对实参产生影响;地址传递方式虽然可以使得形参的改变对相应的实参有效,但如果在函数中反复利用指针进行间接访

35、问,会使程序容易产生错误且难以阅读。如果以引用作为参数,则既可以使得对形参的任何操作都能改变相应的实参的数据,又使函数调用显得方便、自然。引用传递方式是在函数定义时在形参前面加上引用运算符 “&”。 例引用传递。void swap(int &,int &); void main() int a=3,b=4;cout<<"a="<<a<<",b= “<<b<<endl; swap(a,b);cout<<"a="<<a<<&quo

36、t;,b= “<<b<<endl; void swap(int &x,int &y) int t=x; x=y; y=t; 此程序的运行结果为:a=3,b=4a=4,b=3函数的嵌套调用:函数体 由前述可知, C+函数不能嵌套定义,即一个函数不能在另一个函数体中进行定义。但在使用时,允许嵌套调用,即在调用一个函数的过程中又调用另一个函数。 例如: func1(int a, float b) float c;c=func2(b-1,b+1);/ int func2(float x, float y),func1 /函数体func2/func1和 func2

37、 是分别独立定义的函数,互不从属。如何定义一个递归函数j) 汉诺塔k) 求最大公约数l) 计算阶乘函数的递归调用:一个函数直接或间接地调用自身,这种现象就是函数的递归调用。递归调用有两种方式:直接递归调用和间接递归调用。直接递归调用即在一个函数中调用自身,间接递归调用即在一个函数中调用了其他函数,而在该其他函数中又调用了本函数。利用函数的递归调用,可将一个复杂问题分解为一个相对简单且可直接求解的子问题( “递推 ”阶段);然后将这个子问题的结果逐层进行回代求值,最终求得原来复 杂问 题的 解( “回 归 ”阶 段)。 例: 求 n 的阶乘 。( 函 数递 归调用 的例程。) long f(in

38、t n) if(n<0)cout<< “error! “<<endl;return(-1); else if(n<=1)return(1);elsereturn (n*f(n-1);/自己调用自己void main()long f(int n); int n;cout<<"input n:"<<endl; cin>>n;cout<<"n!="<<f(n)<<endl; 此程序的运行结果为:please input n:5n!=120程序的内存区域:

39、一个程序将操作系统分配给其运行的内存块分为4 个区域。 (1)代码区,存放程序的代码,即程序中各个函数中的代码块。 (2)全局数据区,存放程序全局数据和静态数据。 ( 3)堆区,存放程序的动态数据。( 4)栈区,存放程序的局部数据,即各个函数中的数据。如何使用变量(变量的作用是什么?)2.局部变量。在一个函数内部说明的变量是内部变量,它只在该函数范围内有效。也就是说,只有在包含变量说明的函数内部,才能使用被说明的变量,在此函数之外就不能使用这些变量了。所以内部变量也称 “局部变量 ”。关于局部变量的作用域还要说明以下几点:1主函数 main() 中定义的内部变量,也只能在主函数中使用,其它函数

40、不能使用。同时,主函数中也不能使用其它函数中定义的内部变量。因为主函数也是一个函数,与其它函数是平行关系。这一点是与其它语言不同的,应予以注意。2形参变量也是内部变量,属于被调用函数;实参变量,则是调用函数的内部变量。 3允许在不同的函数中使用相同的变量名,它们代表不同的对象,分配不同的单元,互不干扰,也不会发生混淆。4在复合语句中也可定义变量,其作用域只在复合语句范围内。3.全局变量(1) 在函数外部定义的变量称为外部变量。以此类推,在函数外部定义的数组就称为外部数组。(2) 外部变量不属于任何一个函数,其作用域是:从外部变量的定义位置开始,到本文件结束为止。(3) 外部变量可被作用域内的所

41、有函数直接引用,所以外部变量又称全局变量 对于全局变量还有以下几点说明:( 1)外部变量可加强函数模块之间的数据联系,但又使这些函数依赖这些外部变量,因而使得这些函数的独立性降低。从模块化程序设计的观点来看这是不利的,因此不是非用不可时,不要使用外部变量。定义但不初始化,则自动赋以 " "(整型和实型)或 '0' (字符型)( 2)在同一源文件中,允许外部变量和内部变量同名。在内部变量的作用域内,外部变量将被屏蔽而不起作用。( 3)外部变量的作用域是从定义点到本文件结束。如果定义点之前的函数需要引用这些外部变量时,需要在函数内对被引用的外部变量进行说明。外部

42、变量说明的一般形式为:extern 数据类型外部变量 ,外部变量 2, ;注意:外部变量的定义和外部变量的说明是两回事。外部变量的定义,必须在所有的函数之外,且只能定义一次。而外部变量的说明,出现在要使用该外部变量的函数内,而且可以出现多次。静态局部变量1.定义格式: static 数据类型内部变量表; 2.存储特点(1) 静态局部变量属于静态存储。在程序执行过程中,即使所在函数调用结束也不释放。换句话说,在程序执行期间,静态内部变量始终存在,但其它函数是不能引用它们的。(2) 定义但不初始化,则自动赋以 " " (整型和实型)或 '0' (字符型);且每次

43、调用它们所在的函数时,不再重新赋初值,只是保留上次调用结束时的值!(3) 何时使用静态局部变量§需要保留函数上一次调用结束时的值。变量只被引用而不改变其值。一维数组m) 如何正确地声明一维 “静态 ”数组并初始化i. 初始化列表的长度与数组大小的关系ii. 数组大小必须是整型常量n) 如何使用数组元素i. 通过 “索引值 ”访问数组中的具体元素ii. Const int NumOfElement= 10;ii. 对“索引值 ”的说明(整型值、从 0 开始)o) Josephus 问题p) 筛选质数13.数组:v 数组是一组同类元素,它有两个特征:?数组元素是有序的?数组元素是同类的v

44、 定义数组要定义三个基本内容:?数组名字?数组元素的类型?数组的大小v 定义格式:类型数组名 元素个数 ;其中,元素个数必须是常量。如:但int n=10; int intarrayn;是错的int intarray10;v常用的方法是将元素个数定义为一个常量。如:int intarrayNumOfElement;相当于 int intarray10;v 声明数组时可以对数组初始化float x5 = -1.1, 0.2, 33.0, 4.4, 5.05 ;v 初始化表的长度短于要被初始化的数组元素数目,那么剩余元素被初始化为0。 v 带有初始化的数组可以不定义长度int a=1,2,3,4,

45、5; 则默认数组大小为5v 数组元素的使用是通过数组名及元素的序号来指定,如 intarray2 。当数组的大小为 n 时,元素的序号为 0 n-1。v 元素的序号称为下标。程序中,下标可为整数、整型变量或结果为整型的任意表达式v 定义数组就是定义了一块连续的空间,空间的大小等于元素数* 每个元素所占的空间大小。v 数组元素按序存放在这块空间中。v C+语言不检查数组下标的超界。如定义数组int intarray10;合法的下标范围是 0 9,但如果你引用intarray10 ,系统不会报错。如数组intarray 的起始地址是 1000 ,则引用 intarray10 ,则系统对1040 号

46、内存进行操作。而1040 可能是另一个变量的地址v 解决方法:由程序员自己控制。在对下标变量进行操作前,先检查下标的合法性。v 由一系列字符组成的一个单元称为字符串v字符串:v 在 C+中,字符串常量用一对双引号括起来。如”Hello,world ”v 字符串变量:用字符类型的数组来表示v 字符串的本质是一系列的有序字符,因此可以用一个字符数组来保存这组字符。用数组名表示这个字符串v 由于数组名是数组的起始地址,因此该字符串从该地址开始存储。但到哪里为止?C+用 0 表示字符串的结束。v 字符串所需的存储空间比实际的字符串长度大v 如要将字符串 ”Hello,world ”保存在一个数组中v

47、Charch= H,e,l,l,o,w ,o,r,l,d,0 ;v char ch = ”Hello,world ”;v char ch = ”Hello,world ”;v 不包含任何字符的字符串称为空字符串。v 空字符串占用的空间为1 个字节,存储 0 v 注意 a和“a”的区别1,该数组的长度为12v 逐个字符的输入输出:这种做法和普通的数组操作一样。v 将整个字符串一次性地用cin 和 cout 输入或输出。v 通过函数 get 和 put 输入输出。v get 函数v 从终端接受一个包含任意字符的字符串。v 格式: cin.get (ch) ch 为 char 型v put 函数v

48、将一个字符串(以 0 结束的字符序列)输出到终端v 格式: cout.put ( ch) ch 为 char 型v 字符串不能直接用系统的内置运算符进行操作v C+的函数库中提供了一些用来处理字符串的函数。这些函数在库中 v C+还提供了一个string类来处理字符串函数 作用 strcpy(dst, src)cstring将字符从 src 拷贝到 dst 。函数的返回值是 dst 的地址 strncpy(dst, src, n)至多从 src 拷贝 n 个字符到 dst 。函数的返回值是 dst 的地址 strcat(dst, src) 将 src 接到 dst 后。函数的返回值是 dst

49、的地址strncat(dst, src, n)从 src 至多取 n 个字符接到dst 后。函数的返回值是dst的地址 strlen(s) 返回 s 的长度strcmp(s1, s2)比较 s1 和 s2。如 s1 > s2 返回值为正数, s1=s1 返回值为 0, s1<s2 返回值为负数strncmp(s1, s2, n) 如 strcmp ,但至多比较n 个字符 strchr(s, ch) 返回一个指向s 中第一次出现ch 的地址 strrchr(s, ch) 返回一个指向s 中最后一次出现ch 的地址 strstr(s1, s2) 返回一个指向 s1 中第一次出现 s2

50、的地址如何定义一个函数q) 函数返回类型r) 函数名s) 参数列表i. 一维数组作为参数,该如何处理?ii. 二维数组作为参数,该如何处理?t) return 语句数组作为函数的参数小结:v 可以将数组元素传递给函数,这时实际参数用的是数组元素素数 isprime(ai);函数定义 bool isprime (ai);v 也可以将整个数组传递给函数,这时实际参数用的是数组名。函数调用判断是否为如 函数调用sort(a,n);函数定义 sort(int a, int n);v 数组传递的实质是传递地址。把实际参数中的数组首地址作为形式参数中的数组的首地址 vv 数组在函数中的定义:函数原型应该体

51、现数组参数是一个数组,所以用无数组大小定义的方括号表示数组。你可能希望规定数组的大小,但在C+语言中并不检查数组的界限,所以在函数中也没必要知道数组的大小。数组大小只在数组定义中明确(为了申请内存量) 。v 数组的每一个元素又是数组的数组称为多维数组v 最常用的多维数组是二维数组,又称为矩阵v 二维数组的定义格式:类型说明数组名 常量表达式 1 常量表达式 2v 存放次序:按行存放int a45;v vector类模板是一种更加健壮, 且有许多附加功能的数组v 附加功能例如 :提供下标越界检查 ;提供数组用相等运算和大小比较提供数组间赋值等运算指针u)利用指针移动(指针加法、减法运算) ,处理

52、数组中的不同元素。v) 利用 new/delete 处理一维动态数组指针与引用v 指针就是把地址作为数据,可以把地址存储在内存中v 指针变量:存储地址的变量v 变量的指针:当一个变量存储另一个变量的地址时,那我们说它就是那个变量的指针v 如何定义一个变量是指针? 类型标识符 *指针变量;如: int *intp;double *doublepv 如何把某一变量的地址置入一个指针变量中?因为我们不知道系统分配给变量的真正地址是什么。?用地址运算符“&”解决。如表达式“&x”返回的是变量x 的地址。如: intp = &x;? &运算符后面不能跟常量或表达式。如 &2 是没有意义的,&(m * n + p ) 。也是没有意义的v 如何用指针变量处理和改变它所指向的单元的值??用引用运算符“*”解决。如 *intp 表示的是 intp 指向的这个单元的内容。?在对 intp 使用引用运算之前,必须先对intp 赋值如有: int X, *intp, Y;X=3;Y=4 intp=&X;注意:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论