c++期末总复习-精华篇
- 格式:doc
- 大小:46.50 KB
- 文档页数:17
c语言期末知识点总结c语言考试很难,要伙伴们不要挂科哦。
以下是小编为大家整理的c语言期末知识点总结,希望大家能喜欢。
总体上必须清楚的:1)程序结构是三种:顺序结构,循环结构(三个循环结构),选择结构(if 和switch)2)读程序都要从main()入口,然后从最上面顺序往下读(碰到循环做循环,碰到选择做选择)。
3)计算机的数据在电脑中保存是以二进制的形式.数据存放的位置就是他的地址.4)bit是位是指为0或者1。
byte是指字节,一个字节=八个位.5)一定要记住二进制如何划成十进制。
概念常考到的:1、编译预处理不是c语言的一部分,不再运行时间。
c语言编译的程序称为源程序,它以ascii数值存放在文本文件中。
2、每个c语言程序中main函数是有且只有一个。
3、在函数中不可以再定义函数。
4、算法的是一定要有输出的,他可以没有输入。
5、break可用于循环结构和switch语句。
6、逗号运算符的级别最低。
4.1数组的概念1.问题的提出假设我们将26个数分别存放在26个变量中,要计算26个变量的和,如何做?将26个变量逐个加起来?能否使用循环语句?for(sum=0,i=0;i<26;i++)sum=sum+i;正确吗?2.使用数组解决问题(掌握)定义一个变量,包含26个数据,称为数组变量。
main(){inti,sum=0,a[26];for(i=0;i<26;i++)scanf(“%d”,&a[i]);for( i=0;i<26;i++)sum=sum+a[i];printf("%d"sum);}c语言为这些数据,提供了一种构造数据类型:数组。
所谓数组就是一组具有相同数据类型的数据的有序*。
这些数据被称为数组的元素。
4.2一维数组的定义和引用4.2.1一维数组的定义1、定义一维数组的一般方式:类型说明符指明数组元素的数据类型数组名[常量表达式];指明数组所含的元素个数,下标从0开始常量表达式说明数组元素的个数,必须是大于0的整型常量表达式(包括常量和符号常量)。
总复习课程的全部内容可分为五大模块:(1)基础知识(2)三种基本结构及流程控制(3)函数(4)数据类型(5)文件模块一:基础知识部分需要掌握的知识要点:(1)冯·诺依曼体系结构的计算机组成:运算器、控制器、存储器、输入设备、输出设备,以及各部分的主要功能。
(2)C语言程序的组成:由一个或多个文件组成,每个文件由一个或多个函数组成,函数是C程序的基本单位,一个程序有且只有一个main( )函数,这是程序的入口函数(3)从C的源程序到可执行的文件的全过程:编辑、编译、链接最后才能运行,各阶段生成的文件扩展名分别为:.c、.obj、.exe,头文件的扩展名:.h(4)函数的组成:函数首部和函数体,函数中可有注释行/* …*/(5)编译预处理有三种:文件包含、宏、条件编译:预处理命令行都必须以“#”号开始宏定义#define宏名串也是一种编译预处理,取消宏定义用:#undef 宏名C程序中定义一个符号常量是借助于宏定义实现的,例如: #define NUM 35注意:不在行末加分号,因为在对源程序编译过程中(不是运行时)进行宏替换时,将宏所代表的字符串原样替换进去,有时加了分号是要出错的,例如: int arr[NUM];宏替换因为只在编译时进行,所以不占运行时间,只占编译时间带参数的宏可以完成一些简单函数的功能,例如:#define MUL(x,y) x*y主函数中如果有变量定义如下:int a=2,b=3,c;用形如:c= MUL(a,b);实现求a、b 的乘积。
但是请大家思考,如果用c= MUL(a+2,b+5),则变量c的值为?因此,一般将宏中的参数在所定义的串中打上括号,如:#define MUL(x,y) (x)*(y)再求c= MUL(a+2,b+5)(6)C程序中的六种符号:关键字、标识符、运算符、分隔符、其它符号、数据(包括常量和变量)熟记所有常见关键字,关键字中最多的是流程控制语句中的关键字,如:for、while、do、if、else、switch、case、default、break、continue、goto、return等,还有一大类是变量类型及存储类别的,如:int、short、long、signed、unsigned、char、double、float、enum、union、struct、typedef、static、register、auto、extern,还有一些如:void 、sizeof 等;能正确定义标识符(在程序中,符号常量名、变量名、函数名都是用户自定义标识符),自定义标识符的正确与否可从以下几方面判断:①是否以字母或下划线开头;②是否是只有字母、数字、下划线的序列③是否选用了关键字练习:下列哪一个是合法的用户自定义标识符______。
C语言期末复习知识点C语言是一门广泛应用于编程领域的高级程序设计语言。
掌握C语言的基础知识对于理解其他编程语言和进行程序设计非常重要。
下面将介绍C语言期末复习的一些重要知识点。
1.数据类型:C语言提供了多种数据类型,包括整型、浮点型、字符型和指针等。
这些数据类型在内存中占用的空间大小是不同的,因此在使用时需要合理选择。
例如,int类型通常用于表示整数,float用于表示浮点数,char 用于表示字符。
2.变量和常量:在C语言中,变量用于存储数据,而常量是具有固定值的标识符。
声明变量时需要指定其类型,并且可以对变量进行赋值。
常量可以通过const关键字来声明,并且在声明时就需要为其赋值。
3.运算符:C语言提供了多种运算符,包括算术运算符、关系运算符、逻辑运算符和位运算符等。
了解这些运算符的优先级和使用方法对于编写复杂的表达式和条件语句非常重要。
4.控制语句:C语言的控制语句包括条件语句和循环语句。
条件语句用来根据条件的真假来执行不同的代码块,包括if语句、switch语句等。
循环语句用来重复执行其中一段代码,包括for循环、while循环和do-while循环等。
5.函数:函数是C语言中的基本模块,用于实现特定的功能。
在函数定义中需要指定函数的返回类型、函数名和参数列表,并在函数体中编写具体的代码。
通过函数的调用可以执行相应的功能。
6.数组和指针:数组和指针是C语言中非常重要的概念。
数组用于存储一组相同类型的数据,可以通过下标来访问数组中的元素。
指针是一个变量,它存储了一个内存地址。
通过指针,可以访问和修改内存中的数据。
7.结构体和联合体:结构体和联合体用于组织多个不同类型的数据。
结构体可以将多个不同类型的变量组合成一个整体,方便对这些变量进行管理。
联合体是一种特殊的结构体,它可以在相同的内存空间中存储不同类型的数据。
8.文件操作:C语言提供了用于文件操作的函数,例如打开文件、读写文件和关闭文件等。
C语言期末知识点总结1. 指针指针是C语言中非常重要的概念。
它是一个变量,用来存储内存地址,通过指针可以操作内存中的数据。
使用指针可以实现更高效的内存管理和数据操作。
以下是指针的主要知识点: - 指针的声明和初始化 - 指针的运算(例如,指针的加法和减法) - 指针的解引用操作(通过指针访问内存中的数据) - 指针的比较(例如,指针的大小比较)2. 动态内存分配动态内存分配是程序运行时根据需要分配内存的一种方式。
在C语言中,可以使用标准库函数malloc和free来实现动态内存分配。
以下是动态内存分配的常用知识点: - malloc函数用于分配内存,返回值为指向分配内存的指针 - 使用动态分配的内存后,要记得使用free函数释放内存 - 可以使用sizeof关键字获取数据类型的大小,方便分配内存3. 结构体和联合体结构体和联合体是C语言中用于组织和管理不同类型数据的重要机制。
结构体允许将多个不同类型的数据组合成一个整体,而联合体只能同时存储一个成员。
以下是结构体和联合体的主要知识点: - 结构体的定义和初始化 - 使用.运算符来访问结构体中的成员 - 联合体的定义和初始化 - 使用union关键字设置联合体当前使用的成员4. 文件操作在C语言中,可以通过文件操作来读取和写入文件。
文件操作是处理文件数据的重要手段。
以下是文件操作的主要知识点: - 使用FILE类型的指针来操作文件 - 使用fopen函数打开文件,并返回一个指向FILE类型的指针 - 使用fclose函数关闭文件 - 使用fread和fwrite函数读写文件数据 - 使用fseek函数设置文件指针的位置5. 函数指针函数指针是指向函数的指针。
这样可以将函数作为参数传递给其他函数或者将函数作为返回值。
以下是函数指针的主要知识点: - 函数指针的声明和初始化 - 使用函数指针调用函数并传递参数 - 可以使用函数指针作为参数来实现回调函数6. 递归递归是一种算法设计技术,指在算法中自己调用自己。
C语言复习第一章:总结:(1) C程序是由函数构成的。
这使得程序容易实现模块化。
(2) 一个函数由两部分组成:函数的首部:例1.3中的max函数首部int max(int x,int y )函数体:花括号内的部分。
若一个函数有多个花括号,则最外层的一对花括号为函数体的范围。
函数体包括两部分:声明部分:int a,b,c; 可缺省执行部分:由若干个语句组成。
可缺省注意:函数的声明部分和执行部分都可缺省,例如:void dump ( ){}这是一个空函数,什么也不做,但是合法的函数(3) C程序总是从main函数开始执行的,与main函数的位置无关。
(4) C程序书写格式自由,一行内可以写几个语句, 一个语句可以分写在多行上,C程序没有行号。
(5) 每个语句和数据声明的最后必须有一个分号。
(6) C语言本身没有输入输出语句。
输入和输出的操作是由库函数scanf和printf 等函数来完成的。
C对输入输出实行“函数化”第二章:算法的特性1.有穷性:一个算法包含有限的操作步骤2.确定性:算法中的每一个步骤是确定的,含义是唯一的3.有零个或多个输入4.有一个或多个输出5.有效性:算法中每一个步骤应能有效运行三种基本结构顺序结构、选择结构、循环结构第三章:一、数据类型1.标识符(identifier)定义:用来标识变量、常量、函数等的字符序列组成: 只能由字母、数字、下划线组成,且必须是字母或下划线开头,C 语言中大小写敏感(如count ,Count ,COUNT 是三个不同的标识符。
)不能使用关键字长度:最长32个字符命名原则:见名知意 不宜混淆 如l 与I, o 与0 顺序结构选择结构当型(While 型)循环结构直到型(Until 型)循环2.常量定义:程序运行时其值不能改变的量(即常数)分类:(符号常量,直接常量)符号常量:用标识符代表常量定义格式:#define3.变量概念:其值可以改变的量变量名与变量值变量定义的一般格式:数据类型变量1[,变量2,…,变量n];二、整型变量的分类:分为四种:基本型、短整型、长整型、无符号型1.基本型:用“int”表示2.短整型:用“short int”或“short”表示3.长整型:用“long ”或“long int ”表示4.无符号型:(修饰符:unsigned)不存放符号,则不带符号数.又分无符号整型,无符号短整型, 无符号长整型。
C语言程序设计期末复习
一、基础知识
1、变量和运算符
变量就是程序中用来保存信息的抽象容器,可以用来记录用户输入、
程序执行时间以及中间结果等信息
C语言允许使用者定义变量,分为基本类型变量和指针变量。
其中基本类型变量有:整型int,浮点型float,字符型char,双精
度型double,无符号整型unsigned等。
运算符是对变量进行运算的符号,C语言中的运算符大致可分为三大类:算术运算符,关系运算符和逻辑运算符。
其中算术运算符包括:+、-、*、/和%;关系运算符包括:>、>=、<、<=、==和!=;
逻辑运算符包括:&&,和。
2、流程控制
程序的流程控制是应用程序中最重要的结构,在C语言中可以通过控
制语句来控制程序的执行流程。
常用的控制语句有:if、goto、while、for、switch-case等。
if语句可以根据执行条件跳过执行部分语句,节省程序执行的时间。
goto语句可以跳转到指定的语句,实现循环执行流程。
while语句可以不固定有多少次操作,根据执行条件决定是否继续执行。
for语句可以更精确的表示循环次数,避免无意识的多次循环操作,从而提高程序运行效率。
switch-case语句可以根据变量的变化值,执行不同的操作,实现复杂的逻辑判断。
3、函数。
C语言程序设计期末总复习一、基本概念※所谓词法记号,是指程序中具有独立含义的不可进一步分割的单位,具体地说,C语言的词法记号可分成5类:关键词、标识符、常量、运算符、分隔符。
※关键词是C语言中预定义的符号,他们有固定的含义,用户所定义的任何名字都不得与它们冲突。
※标识符是用户自行定义的符号。
用来标识常量、变量、函数、标号等。
C语言要求,所有标识符必须先定义/说明后使用。
ANSI规定,标识符是由字母或下划线(_)开头,后跟零个或多个字母、下划线和数字中任何一个符号所组成的符号序列。
※C语言是区分大小写的,因此,int是关键词,而Int则是标识符。
※分隔符用于分隔各种词法记号,常用的分隔符有:[] () {} * . : = ; #。
※C语言中,为解决具体问题,要采用各种类型的数据,数据类型不同,它们所能表达的数据范围、精度和所占据的存储空间均不相同。
※有符号整数在内存中以补码表示,其最高位为1时表示负数,最高位是0时表示非负数。
※浮点型用来表示实型数据。
浮点型分为两种:单精度和双精度,分别以float和double表示。
※字符型用char表示,一般用8位来存放一个字符,实际上存放的是该字符的ASCII码值。
在整型常数后跟有字母l或L时,表示该整型常量是长整型常量。
※字符型常量是用单引号括起来单一字符,一个字符常量的值就是该字符的ASCII码值。
※字符串常量是双引号括起来的零个、一个或多个字符的序列。
编译程序自动地在每一个字符串末尾添加串结束符’\0’。
一个字符串常量在程序正文中出现,即代表此字符串常量的首地址。
※一个变量由一个名字来标识,变量在内存中占据一定的存储单元,该存储单元存放变量的值。
变量名与内存中的某一存储单元相联系,而变量值是指存放在该存储单元的数据的值。
变量被说明后,根据其类型的不同,拥有大小不同的存储单元。
没有定义/说明的变量,就没有存储单元,因而不能使用。
※对于除法运算符(‘/’),若除数和被除数均为整数,则商只取整数部分,舍弃小数部分,如6/4=1;而若除数或被除数中,只要有一个为实数,则结果是double型的。
c期末考点总结C语言是一门非常重要的编程语言,是许多计算机科学与软件工程专业的基础必修课。
期末考试是对学生学习成果的一次综合性考核,下面将总结C语言期末考点,帮助大家复习备考。
一、基础知识1. 数据类型:包括基本类型和派生类型,如int、float、char、数组、结构体等。
2. 变量和常量:如何定义变量、常量,变量的作用域和生命周期。
3. 运算符:算术运算符、关系运算符、逻辑运算符、位运算符等,以及它们的优先级和结合性。
4. 控制语句:条件语句(if-else、switch)、循环语句(while、do-while、for)。
5. 输入输出:如何从键盘获取输入,如何将数据输出到屏幕上。
6. 函数:如何定义函数、函数的参数传递和返回值。
7. 数组:如何定义和使用数组,多维数组。
8. 字符串:如何定义和使用字符串,字符串的处理函数。
9. 指针:如何定义和使用指针,指针与数组的关系。
10. 结构体和联合体:如何定义和使用结构体、联合体,结构体和指针的关系。
二、高级知识1. 动态内存分配:如何使用malloc、calloc、realloc函数进行动态内存分配和释放。
2. 文件操作:如何打开、读写、关闭文件,文件的定位指针。
3. 预处理器:如何使用宏定义、条件编译、文件包含等预处理指令。
4. 头文件:如何编写自定义的头文件并使用。
5. 递归:如何使用递归解决问题,递归的实现原理。
6. 指针与函数:如何使用指针作为函数参数,指针函数、指针数组、指针指针等。
7. 指针与字符串:如何使用指针处理字符串,字符串函数的实现。
8. 指针与结构体:如何定义指向结构体的指针,指针访问结构体成员。
9. 指针与动态内存分配:如何动态分配结构体指针,释放动态分配的内存。
10. 文件操作与结构体:如何将结构体数据保存到文件,从文件读取结构体数据。
三、综合应用期末考试通常会出一些综合性的编程题,要求学生综合运用所学知识进行程序设计。
一、选择题(共22分)1.下列变量名中合法的是____ 。
A) B.C.Tom B) 3a6b C)_6a7b D) $ABC2.C程序的执行是从____开始执行A)第一条语句B)主函数C)命令行D)第一个出现的函数3.已知ch是字符型变量,下面不正确的赋值语句是____。
A)ch=‘a+b’; B) ch=‘\0’; C)ch=‘7’+‘9’; D)ch=5+94. 与语句 while(x);等价的语句是______。
A) while(x==0);B) while(x!=0);C) while(x!=1); D) while(~x);5. 已知 int i;float f;下列语句正确的是______。
A)(int f)%i B) int(f)%i C) int(f%i) D) (int)f%i6.若int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;,则数值为6的表达式为_____ 。
A) *(p+6) B)*p+6 C)*p+=5 D)p+67.以下为一维整型数组a的正确说明是_________.A)int a(10); B)int n=10,a[n];C)int n; D)#define SIZE 10scanf("%d",&n); int a[SIZE];int a[n];8.温度华氏和摄氏的关系是: C=5/9(F-32)。
已知:float C,F;由华氏求摄氏的正确的赋值表达式是____。
A)C=5/9(F-32) B)C=5*(F-32)/9 C)C=5/9*(F-32) D)三个表达式都正确9.若有以下说明和语句:struct worker{ int no;char *name;}work, *p=&work;则以下引用方法不正确的是____。
A) work.no B)(*p).no C)p->no D)work->no 10.为了判断两个字符串s1和s2是否相等,应当使用____。
C程序设计期末复习知识点1.C语言基础-了解C语言的历史和发展。
-了解C语言的特性,例如:面向过程、可移植性、高效性等。
-理解C语言的编译过程,包括预处理、编译、汇编和链接。
-掌握C语言的基本语法,包括变量定义、标识符命名规则、注释、运算符等。
2.数据类型-理解C语言的基本数据类型,包括整型、浮点型、字符型和布尔型。
-知道各种数据类型的取值范围和存储大小。
-理解数据类型之间的转换规则。
3.控制结构- 掌握条件语句,包括if语句、switch语句。
- 掌握循环结构,包括for循环、while循环和do-while循环。
- 了解循环控制语句,包括break和continue语句。
4.数组和指针-理解一维和多维数组,包括如何定义、初始化和访问数组元素。
-掌握指针的概念,包括如何定义和使用指针变量。
-理解指针和数组的关系,包括指针和数组之间的相互转换。
5.函数-理解函数的概念和作用,包括函数的定义、声明和调用。
-理解参数传递的方式,包括传值和传引用。
-理解局部变量和全局变量的作用域和生命周期。
-理解递归函数的原理和应用。
6.文件操作-了解文件的概念和类型。
-掌握文件的打开、关闭、读取和写入操作。
-知道如何创建文件、删除文件和改变文件属性。
-理解文件指针的使用,包括定位文件读写位置等。
7.结构体和联合体-理解结构体的概念,包括如何定义和使用结构体。
-掌握结构体成员的访问方式。
-了解联合体的概念和用途。
-知道结构体和联合体的区别。
8.动态内存分配- 了解动态内存分配和释放的方法,包括malloc、calloc和realloc函数。
-理解内存泄漏和内存溢出的概念和原因。
-知道如何使用指针来管理动态分配的内存。
9.字符串处理-理解字符串的概念,包括如何定义和使用字符串变量。
- 掌握字符串的输入和输出操作,包括fgets、fputs和printf函数。
- 掌握字符串的处理函数,包括strlen、strcpy、strcat、strcmp 等。
c++复习摘要第一部分——简单的程序设计一、标识符(包括变量名命名规则)1、定义:由数字、大小写字母和下划线组成2、例子:合法:Int(大小写不一样,不是关键字int)、_ab不合法:new和friend(不能与关键字相同)、a+b(不能有+)、2b(开头不能是数字)二、基本数据类型存储空间位数存储形式double 8 64 补码int 4 32 补码float 4 32 补码char 1 8 ASCII码特殊:指针*p 4(固定为long int类型)string 16(固定大小)注1:精度低—>自动转换—>精度高注2:int a;a=8/3—>a=2(int整型)三、常量与变量1、八进制—>正负号和0开头,例:012、-057十六进制—>正负号和0x或0X开头,例:0x34、-0X68 2、字符常量(1)普通字符:‘A’、‘0’、‘#’、‘’(空格)(2)转义字符:‘\n’、‘\\’(表示\)、‘\0’(3)‘a’—>一个字节,“a”—>两个字节(包括‘/0’),长度为1注:‘\ddd’—>表示八进制字符‘\xdd’—>表示十六进制字符例:strlen(“abc\\\120\0a s\0d”)和sizeof(“abc\\\120\0a sd”)的值—>分析1:其中有a、b、c、\\、\120(八进制)、\0(碰到第一个则终止,且不计入长度),所以结果为5—>分析2:算上所有的字符(包括\0,注意有个空格在a 与s之间),结果为11(char字符占一个字节)3、指数:2e-6、-1.5E2(结尾加一个f(F),表示结果为float 型)注:e(E)后(即指数)必须是整数四、运算符和表达式1、算术运算符+、-、/(不是\)、*(不可省略)、%(取余)注1:++()、--(),其中()中必须是变量,不能是常量和表达式例:5++、(a+b)++、++(2*i)——不合法注2:int i=5,b;b=i++;—>b=5;i=6int i=5,c;c=++i;—>c=6;i=62、赋值运算符(1)区分“=”和“==”(2)a+=b—>a=a+b3、关系运算符和逻辑运算符(1)结果总为1或0例1:t=5>4—>t=(5>4)—>5>4为真,则结果为1—>t的值为1例2:a=1&&2—>a=(1!=0)&&(2!=0)—>a=1(&&运算优先级高)4、逗号运算符:表达式结果为最后一个逗号后的结果例:a=3*5,a+5—>表达式结果为20五、语句1、if(a)—>if(a!=0)2、do whlie语句—>至少执行一次例:do{ int i=1;j=0}while(a=b)分析:先循环一次,由于条件为i=j—>(i=bj)!=0(不是a==b),则结果是无限循环3、switch语句不一定每个case后都有break(跳出当前循环语句,而不是if语句),default至多一个。
例:switch(a){case 1:cout<<’A’;break;case 2:cout<<’B’case 3:cout<<’C’;break;}若输入a=2,则输出的结果为BC,程序从第二个开始执行,因为没有break跳出当前程序,会继续执行下面的程序,直到break跳出等。
4、for循环:注意是否会无限循环(循环条件的正确性)例:for(int x=0;x<=0;x--)—>无限循环六、补充1、continue—>跳过剩余语句(继续循环,不会跳出)2、const int a=5—>a的值不会再变(即a=6—>错误)3、运算符优先级逻辑运算符(!>&&>||)>条件运算符(A?B:C) >值运算符(=、+=、*=)4、条件运算符—>A?B:C例:5>4?3:2—>若A为真,则输出B,否则输出C,所以答案为3第二部分——构造数据类型一、数组1、数组下标只能是常量(a[n]、a[]—>不合法)2、int a[20][20]—>数组未初始化,则元素的值不确定(除了静态数组未初始化时,默认是0)int a[20][20]={0}—>元素全部为0,且每个元素都必须是int型的注:a(5)—>a=5,上述数组最后一个元素为a[19][19]3、部分初始化:a[5]={1,2,3}—>a[5]={1,2,3,0,0}二、指针1、’*’—>取内容,’&’—>取地址int a[5]={0} , *p , p=&a[0](或p=a)—>取出a中的首地址(即a[0])放在p中,则p中所存内容就是a[0]的首地址(*p—>即读取p中地址的内容—>就是a[0])(1)cout<<p—>p本身的首地址(2)cout<<&p—>取p中所存的地址,再输出—>a的首地址(3)cout<<*p—>取p所存首地址的内容—>输出a[0](4)cout<<*(p+1)—>指针往后移动一位—>输出a[1]注:*(p++)—>*(p+1)2、动态内存分配(1)int *p=new float[N]—>一维数组(这里N为变量)int (*p)[4]=new float[3][4]—>二维数组最后—>delete []p三、引用1、int r,&rv=r—>别名与目标名(即rv和r)共用内存2、类型必须一致,必须立即初始化(int &rv;—>错误)例:int a;double &b=a;—>错误3、不能中途换名例:int a,c;int &b=a,&c=b;—>错误4、数组引用:int a[5]={0};(&rv)[5]=a;四、字符串1、char s[20]=”c++程序设计”,*p=s;(1)sizeof(s)—>一共可存放20个元素,每个都是char(占一个字节)—>结果为20(2)sizeof(p)—>p是指针,一定为4个字节—>结果为4(3)Strlen(s)—>”c++”为三个字节,”程序设计”(汉字是两个字节)为8个字节(不含’\0’)—>结果为11注:char a[5]=”12345”—>错误(必须有一个位置放’\0’)2、String(1)string a=”man”,b=”kind”;—>a[1]=’e’—>a=”men”—>可以当作数组看(2)可以连接:c=a+b—>c=”mankind”(3)可以相互赋值:a=b—>a=”kind”注:(2)和(3)都是char字符型数组所不能实现的例:char a[5]=”c++”,b[6]=”hello”;a=b;—>错误五、其他类型1、枚举类型:enum例:enum seasoon {spring,summer,autumn,winter};season s=winter—>s=3;分析:spring相当于0,后面逐次递增(可以对spring进行默认值设定,令spring=1,后面依次递增)2、结构体:struct—>类比——类与对象3、共用体:union注:若干个成员中,其中占用内存最大的,作为共用体类型的大小(不是相加)例:union a{int x;char s;}—>显然占4个字节(int),而不是char的1个字节六、补充1、char name[20]—>cout<<name—>输出为字符数组的内容int name[20]—>cout<<name—>输出首地址2、char *p=”hello”(类比数组)(1)cout<<*p—>h (2)cout<<p—>hello(3)cout<<p+1—>ello—>指针向后移动一位,指向e,再输出后面的内容3、strcmp(s1,s2)—>进行大小比较Strcpy(s1,s2)—>s1=s2(将s2的内容赋给s1)S=strcat(s1,s2)—>将s1与s2的内容进行连接,再给S第三部分——函数一、认识函数1、声明:int add(int a,int b);—>形参不占用空间,可省略为int add(int,int);(注意要有”;”)调用:z=add(a,b)—>a,b均为实参(有内容)例:z=swap(a+b,max(c),v)—>swap函数实参为3个(两个逗号)2、c++的程序总是从main函数开始执行的3、函数不允许嵌套定义,但是可以相互调用4、有默认值的形参右边都要有默认值例:int(int a,int b=0)—>合法int(int a=0,int b)—>不合法5、引用传递:swap(int &x);—>x的值与函数结果有关swap(int x);—>swap函数只是利用了x的值去运算,而未改变x本身的值二、简单函数1、递归函数(可简化程序,但时间和空间需求大)例:阶乘—>int f(int n){if(n==1)return0;else return n*f(n-1);} 2、内联函数(提高程序执行效率,以空间换时间):inline 例:inline int add(int a,int b){}—>只能包含一些简单的语句3、系统函数例:sqrt(2)—>开方,fabs(-9)—>绝对值,rand()—>随机函数4、函数重载——功能相似(1)同名函数,但函数的参数类型、个数或者顺序不同(2)函数的返回值类型不能作为函数重载的区分条件(3)不能把功能不同的函数放在一起重载三、其他1、int a就相当于auto int a—>auto为自动变量,存放于动态存储区,可省略2、extern—>外部变量(属于全局变量),定义在函数体(包括mian函数)之外—>全局寿命3、static—>静态变量(未初始化时,就默认为0)—>有记忆功能(记住上一次运行结果)第四部分——类与对象一、类与对象的认识1、c++通过类来实现封装2、面向对象程序设计的三个特征:封装性、多态性和继承性3、在类体内不能对数据成员进行初始化(因为没定义对象)例:Class A{private:int data=2;}—>错误二、类成员1、private(私有成员)—>若开头省略,则默认为私有成员,只有该类的成员才能进行访问私有成员(派生类和对象都不能访问)2、protected(保护成员)—>允许派生类访问,不允许对象访问3、public(共有成员)—>定义了类的外部接口,允许派生类访问,并可以被对象进行调用4、成员函数类内声明—>settime(int a=0,int b=0){}—>类外定义—>void Clock::settime(int a=0,int b=0){}三、对象1、对象所占据内存只用于存放数据成员(如a、b等),类中函数代码在内存中只占据一份空间2、访问类型:Clock c,*time=&c,则有c.showtime()或(*time).showtime或time->showtime()四、构造函数与析构函数1、构造函数—>对象的初始化(1)它是一个与类同名的成员函数,没有返回值,定义为公有函数,只能在定义对象是被系统内自动调用(2)类中可以有多个构造函数,构造函数可以被重载,可以是内联函数(3)带默认参数的构造函数例:构造函数Clock(int a=0,int b=0)—>Clock c1,c2(1),c3(1,1)—>均是正确的,如c2(1)等价于c2(1,0) (4)复制构造函数:Clock(Clock &c)例:Clock c1;Clock c2(c1)—>Clock c2=c1注1:Clock *p—>不会调用构造函数Clock *p=&a—>出现对象a,则调用构造函数注2:Clock a[4]={c1,c2,c3,c4}—>由于有4个元素都被类定义,故调用4次构造函数,程序结束时调用4次析构函数五、析构函数:~Clock()—>()中不能有参数1、析构函数属于公有成员,不能重载,但可以是虚函数2、当对象被删除或者程序结束时,自动调用析构函数例:Clock *p=new Clock a;delete []p—>申请的空间被删除,则对象也消失,故调用一次析构函数3、一般情况下,调用几次构造函数,结束时就相反顺序调用几次析构函数六、友元:friend1、实现不同类之间的数据共享,但破坏了类的封装性和隐蔽性2、友元函数—>不属于类的成员函数,可以访问类的所有成员(包括私有成员)3、友元类:如Class A{...friend Class B;...}—>意味着B类是A类的友元类—>B类的所有成员函数都可以访问A类的所有成员4、友元关系不能传递且是单向的(A是B的友元函数,但B 不是A的友元函数),友元关系不会被继承七、其他1、this 指针:存在于类的成员函数中,用于区分数据成员(除静态数据成员外)2、静态成员:static(1)不属于某个对象,属于整个类(只能通过类名进行访问)(2)类外初始化,同样具有”记忆功能”3、const可用于对函数重载的区分4、类别对象是否可以访问派生类是否可以访问private 否否protected 否是public 是是5、类别可以重载或内联数量是否可以有形参构造函数是一或多是析构函数否一否注:均无返回类型(如int、double),析构函数可以是虚函数第五部分——继承与派生一、继承1、若省略继承方式,则默认为私有继承例:Class A:B—>Class A:private B2、派生类继承了基类除去构造函数和析构函数之外的全部数据成员和函数成员—>派生类中也有和基类一样的函数3、同名覆盖—>派生类中的新的同名函数覆盖基类的函数4、继承方式—>基类中的成员将在派生类中有的访问权限例:Class B:protected A—>A中的成员在派生类中的访问权限是protected(故派生类的对象不能访问,派生类可以访问)注:A中的public和protected在B中的访问权限都变成protected注1:派生类的对象可以访问基类的public注2:即使基内的private在派生类不可访问却仍然存在注3:private属于”传递一代”,protected可以”多代传递”二、派生1、派生类的构造函数和析构函数(1)例:Clock(int a,char b):Point(b)注:派生类构造函数既要初始化派生类新增的成员,也要为他的基类的构造函数传递数据—>引用了基类的构造函数(2)派生类定义对象时,构造函数调用顺序:先基类—>内嵌对象—>最后派生类例:Class B:public A{piblic:A a;}—>故先调用两次A的构造函数,在调用B的构造函数一次—>析构函数则反向执行注:若为多继承Class C:public A,protected B—>则顺序执行A的构造函数,再是B的构造函数,最后是C的构造函数2、虚基类(1)消除多继承引起的二义性,消除数据冗余(2)通过虚基类继承,最后建立对象的类(称之为最远派生类),才调用虚基函数的构造函数—>保证对虚基类的对象只初始化一次三、其他1、若基类的构造函数有默认值,则派生类就不必给基类传递数据例:Class A{A(int x=1){}};Class B{B(int y=1){}}—>而不必写成Class B{B(int y,int x):A(x){}}2、积累与派生类的赋值兼容(1)派生类的对象可以赋值给基类对象—>就是派生类将基类的那部分赋值给基类—>反之不行(2)同一基类的不同派生类对象不能相互赋值(只是交集,不是包含关系)总结:派生类可以对基类进行操作—>即(基类)=(派生类)的操作是对的,反之都是错的例:Class A—>Class B:public A—>A a;B b;a=b(对)—>b=a(错误)3、判断是否可以访问类别基本身派生类派生类的对象基的私有成员是否否基的保护成员是是否基的公有成员是是是第六部分——多态性一、编译时的多态:函数重载、运算符重载运行时的多态:虚函数二、运算符重载:operator1、成员函数——=、[]、()、—>(这些只能为成员函数)例:加法—>类中声明:Complex operator+(Complex &c)—>类外定义:Complex::Complex operator+(Complex &c)—>函数的实现:c3=c1+c2注:成员函数隐藏一个this指针,故参数比非成员函数少一个2、非成员函数:friend 函数返回值类型operator运算符(形参表)例:friend Complex operator+(Complex &c1,Complex &c2)注:”>>”和”<<”只能重载为非成员函数3、规则和限制(1)只能对已有的c++运算符进行重载例:ab、+++则是非法的(2)下列运算符不能重载.(成员运算符)、*、::、?:、sizeof(3)重载不改变运算符的优先级、结构、操作个数—>只改变功能(4)重载函数不能有默认参数,且必须至少有一个类的对象例1:Complex operator+(Complex &c=2)—>不合法例2:Complex operator+(int &c)—>至少一个Complex类对象(5)operator =(无形参)—>前缀一元运算符(6)对于++a,重载为成员函数—>a.operater++()重载为非成员函数—>operator++(a)对于a++,重载为成员函数—>a.operater++(0)重载为非成员函数—>operator++(a,0)注1:可知,成员函数的形参比非成员函数少一个(this的作用)注2:某一填空题—>bool Bounce operator!(Bounce)三、虚函数1、例:A a,*p;B b;—>则基类对象的指针在指向派生类时,只会指向派生类中的基类部分(谁定义你,你就只与谁有关)—>虚函数可以使基类中的函数”隐藏起来”,从而使指针指向派生类的同名函数2、只有类的成员函数才能是虚函数(构造函数不行,析构函数可以),非成员函数都不行,内联函数不行,静态函数不行3、必须为public继承,由”基类对象的指针或引用”去掉用基函数,才能实现动态绑定四、纯虚函数和抽象类1、纯虚函数:virtual void hello(int x)=0;2、一个类包含了纯虚函数,则为抽象类—>抽象类不能定义对象,只能为基类3、派生类若没给出基类的纯虚函数的函数实现(即定义一个与纯虚函数同名的有实际作用的函数)—>仍不能定义对象,还是一个抽象类(没有同名函数覆盖纯虚函数)4、虚析构函数—>使派生类的析构函数先执行,再执行基类的析构函数—>否则可能有内存泄漏(只执行了基类的析构函数)。