C++编程基础知识ppt课件.ppt

上传人:小飞机 文档编号:2002336 上传时间:2022-12-30 格式:PPT 页数:74 大小:2.13MB
返回 下载 相关 举报
C++编程基础知识ppt课件.ppt_第1页
第1页 / 共74页
C++编程基础知识ppt课件.ppt_第2页
第2页 / 共74页
C++编程基础知识ppt课件.ppt_第3页
第3页 / 共74页
C++编程基础知识ppt课件.ppt_第4页
第4页 / 共74页
C++编程基础知识ppt课件.ppt_第5页
第5页 / 共74页
点击查看更多>>
资源描述

《C++编程基础知识ppt课件.ppt》由会员分享,可在线阅读,更多相关《C++编程基础知识ppt课件.ppt(74页珍藏版)》请在三一办公上搜索。

1、第2章 C+编程基础,第2章 C+编程基础,2.1 数据类型与表达式2.2 程序的控制结构2.3 函数 2.4 数组2.5 指针2.6 构造数据类型,C语言与面向对象的C+,C语言是七十年代初贝尔实验室的Dennis Richie 等人在B语言基础上开发出来的。C最初是作为UNIX操作系统的开发语言为人们所认识。七十年代末,随着微型计算机的发展,C语言开始移植到非UNIX环境中,并逐步脱离UNIX系统成为一种独立的程序设计语言。C 语言版本很多,为了让开发出来的代码能够在多种平台上运行,1988年美国国家标准协会ANSI对C语言进行了标准化,产生了ANSI C。C语言是一个面向过程的编程语言。

2、,C语言与面向对象的C+,C+包括C的全部特征、属性和优点。C+支持面向对象程序设计。通过类和对象的概念把数据和对数据的操作封装在一起,通过派生、继承、重载和多态性等特征实现了软件重用和程序自动生成,使得大型复杂软件的构造和维护变得更加有效和容易。C+与C完全兼容。但由于与C兼容,使得C+不是纯正的面向对象的语言,它既支持面向对象程序设计,也支持面向过程程序设计。C+编译环境有许多版本,国内较为流行的有Visual C+和C+ Builder。,一个简单的C+程序,/ 表示注释行,# 引导一个预处理语句;main 表示主函数,void 表示无返回值cin为输入流,类似C语言的scanf;cou

3、t为输出流,类似C语言的printf;其对应的头文件为iostream.hendl 是换行函数;n 为换行符;函数体用括起来。注意与C的区别。它没有用到类的概念。,#include /包含头文件,称为编译预处理行void main() /main()函数,程序入口 /程序体开始 int x; /定义变量 cinx;/由键盘输入值并赋值给变量x cout n x= xendl; /输出字符串内容和x的值并换行 /程序体结束运行结果:x=6,2.1 数据类型与表达式,程序设计主要包括数据结构(数据类型)和算法(操作步骤)的设计。运行程序,要先描述算法。而描述算法应先说明算法要用的数据。数据以变量或

4、常量的形式来描述,每个变量或常量都有数据类型。,C+语言的命名原则,C+语言的字符集由下述字符构成: 英文字母:AZ,az 数字字符:09 特殊字符:空格、!、#、%、.、( ) 、 、 C+的命名原则,C+中的数据类型分为基本类型(C+编译系统内置)和非基本类型(用户自定义类型)。,说明: 在不同的系统中,每个变量类型所占的字节数可能有所不同,这里列出的是在VC+编译环境中的情况。,2.1.1 常量,1整型常量,2实型常量浮点小数,只使用十进制表示两种表示形式一般形式:16.5,-13.5 ,3.1415926F,0.1f ,0.0 ,2.指数形式: 3e1 1.0e-3默认为double型

5、,如果后缀为F(或f)则为float型。,20(十进制表示),0 x14,024,0若干07的数字, 0 x若干09的数字及AF的字母,3字符常量单引号括起来的一个字符如A , 2(非数字) , (空格),?,4字符串常量简称字符串,用一对双引号括起来的字符序列例如China,5布尔常量两个:false(假) true(真),不可显示字符无法通过键盘输入,如响铃、换行、制表符、回车等C+预定义的转义序列,2.1.2 变量,在程序的执行过程中值可变的量。变量在使用之前需要首先声明其类型和名称。声明形式: 变量名1,变量名2,变量名n;命名规则:由字符、数字和下划线组成,且只能由字符和下划线开头。

6、声明一个变量的同时,也可以给它赋初值。在组成变量名的元素中,大小写字母含义不同。作为保留字的单词不能再作为其他名字使用。,C+中常用的保留字,2.1.3 引用,引用是别名建立引用时,程序用另一个变量或对象(目标)的名字初始化它引用作为目标的别名而使用,对引用的改动实际是对目标的改动引用的声明形式为 &引用名=目标名 或& 引用名=目标名,引用型变量的名字,必须遵循变量的命名规则,引用,例如,引用一个整型变量:int someInt;int声明rInt是对整数的引用,初始化为引用someInt。注意:在这里,要求someInt已经声明或定义。引用不是值,不占存储空间,声明引用时,目标的存储状态不

7、会改变。引用在声明时必须初始化。,#include /输入输出头文件void main() int someInt; /定义变量int,someInt:6rInt:6someInt:7rInt:7,例2-1 如何建立和使用引用,输出结果,引用与指针关系的分析,void Swap(int ,void Swap(int *a, int *b) /指针调用 int t; t=*a; *a=*b; *b=t; ,void Swap(int a, int b) /传值调用 int t=a; a=b; b=t; ,区别: 1. 引用是某一对象的别名, 指针是某一变量的地址变量。2. 引用在定义时必须初始化

8、, 即为一已定义对象的别名。指针可在使用时初始化, 可以重新赋值。,引用的作用: 1. 引用可象地址一样完成对所代表的对象的操作。 2. 对引用的操作不同于对指针的操作, 它可直接作用于变量, 所以更方便, 更易于理解。,引用的缺点: 引用不能为空, 即必须代表某一对象。指针灵活性较好, 但使用较不方便。,2.1.4 表达式,表达式由运算符、运算对象和括号组成。1运算符C+语言定义了丰富的运算符,如算术运算符、关系运算符、逻辑运算符等分为单目运算符和双目运算符使用形式为运算符 ,运算符优先级,算术运算符,关系运算符,运算结果:1=真; 0=假,常用复合赋值运算符,与单目 同级.与=同级,2;

9、52; 6,例:int i=1, j=5;cout + i ; j+ endl;cout i ; j endl;,输出结果,2表达式表达式是程序最基本的组成部分由运算符(如+、-、*、) 、运算对象(也称操作数,可以是常量、变量等等)和括号组成执行表达式所规定的运算,所得到的结果值是表达式的值。,表达式的类型转换,当表达式中出现了多种类型数据的混合运算时,首先需要进行类型转换,再计算表达式的值。表达式中的类型转换分为两种隐含转换强制转换, 隐含转换:若参加运算的操作数类型不一致,则系统自动对数据进行转换具体规则如下:算术运算和关系运算转换:将低类型数据转换为高类型数据。 char short

10、int unsigned long unsigned-long float double 低 高逻辑运算符:要求必须为bool型;系统自动将其转换为bool型。转换方法是:非0数据转换为true,0转换为false。位运算:要求必须是整数;若是不同类型的整数时,编译系统会自动进行类型转换。赋值运算:要求左值(赋值运算符左边的值)与右值(赋值运算符右边的值)的类型相同。, 强制类型转换。又称为显式转换,是通过类型标识符和括号来实现的,其语法形式有两种:(表达式)或(类型标识符),2.2 程序的控制结构,2.2.1 选择结构,C+语言支持下列基本的条件语句: if语句 if else语句 if e

11、lseif语句 ?条件语句 可简化条件表达式的表达形式,语法为: expression1? Expression2:expression3,if (expression1)statement1;elsestatement2;,2.2.2 switch语句,多次判断选择判断的是同一个表达式的值,switch(表达式) case 常量表达式1:语句1case 常量表达式2:语句2case 常量表达式n:语句ndefault: 语句n+1,只能是整型、字符型和枚举型,值不能相同,且次序不影响执行结果,每个case分支可以有多条语句,但不用,while循环(特别适合处理字符串和其他指针类型)do wh

12、ile循环for循环(通常用于具有固定长度的数据结构),do statement;while(expression);,for(expression1;expression2; expression3) statement; ,注意:对于while语句或for语句,循环体中的语句只有在 while或for语句中的条件为真时,才会被执行;而dowhile语句则总能保证循环体被执行一次。,while(expression) statement; ,2.2.3 循环结构,2.2.4 其他控制语句,1break语句 只用于switch语句或循环体中,作用是使程序从switch语句内跳出或结束循环,继续

13、执行逻辑上的下一条语句。2continue语句仅用于循环体中,作用是结束本次循环,接着开始判断循环条件,决定是否继续执行下一次循环。,2.3 函 数,2.3.1 函数定义,由两部分组成:函数头与函数体。函数定义的一般语法形式为:, (形式参数表)说明性语句序列;实现函数功能的语句系列;,类型标识符: 返回值类型。返回值是返回给主调函数的处理结果,由函数体部分的return语句带回。形式参数表:简称形参表,内容如下: (类型l 形参名1,类型2 形参名2,类型n 形参名n),2.3.2 调用函数,调用函数先定义后调用,否则,需要在调用函数之前在主调函数中声明函数原型。函数原型声明形式: (含类型

14、说明的形参表);函数调用形式:(实参1,实参2,实参n),2.3.3 默认参数的函数,在函数定义中通过赋值运算指定默认参数值。程序调用该函数时:若给出实参,则用实参初始化形参;若没有给出实参,则C+编译系统自动以预先赋值的默认参数值作为传入数值。注意:默认形参值必须按从右向左的顺序定义。在有默认值的形参右面,不能出现无默认值的形参。原因:函数调用时,实参初始化形参按从左向右的顺序。,void try(int j=3,int k)void try(int j,int k=2,int m)void try(int j,int k=7)void try(int j,int k=2,int m=3)v

15、oid try(int j=3,int k=2,int m=3),/非法,/非法,/合法,/合法,/合法,2.3.4 内联函数,内联函数与一般函数不同:不是在调用时发生转移,而是在编译时将函数体嵌入在每一个调用语句处。优势:节省了参数传递、系统栈的保护与恢复等开销。内联函数的定义形式:, (含类型说明的形参表) 函数体,例2-2#include #include inline int max(int a,int b) if(ab)return a; elsereturn b;,void main()int a,b,c,d;a=210;b=150;c=20;d=max(a,b);d=max(d,

16、c);coutThe biggest of setw(5)asetw(5)bsetw(5)c is dendl;,运行结果:,The biggest of 210 150 20 is 210,内联函数,注意:内联函数体内一般不能有循环语句和switch语句。内联函数不能实现递归操作。内联函数的定义必须出现在第一次被调用之前。一般,简单且使用频率很高的函数才说明为内联函数。,2.3.5 系统函数的使用,系统函数的原型声明已经全部由系统提供,并且已分类存于不同的头文件中。使用系统函数:用include指令嵌入相应的头文件,再使用。 如:include 常用的函数库有(C语言):math.h -数学

17、运算,如sqrt(x),sin(x)stdio.h - 输入输出函数stdlib.h - 类型转换,存储分配等time.h - 时间和日期string.h - 字符串处理assert.h - 用于调试程序,2.4 数组,数组是一种构造数据类型,是具有一定顺序关系的若干相同类型变量的集合体,它占用连续内存单元进行存储。组成数组的变量称为该数组的元素。如:int c7;引用数组中的特定位置或元素, 要指定数组中的特定位置或 元素的位置号数组名是数组首元素的内存地址。数组名是一个常量,不能被赋值。,2.4.1 一维数组,数组使用前必须先声明。声明一维数组的形式: 数组长度数组中的每个元素可以当成普通

18、的变量使用。访问一维数组元素的形式:下标引用只能逐个引用数组元素,而不能一次引用整个数组例如:a0=a5+a7-a2*3,常量表达式,下标值从0开始,不能超过该维的长度减1,形式1:在声明数组时对数组元素赋以初值 数组长度=第0个元素值,第1个元素值,第n-1个元素值 例如: int a10=0,1,2,3,4,5,6,7,8,9;可以只给一部分元素赋初值。 例如: int a10=0,1,2,3,4;形式2:在对全部数组元素赋初值时,可以不指定数组长度。 =第0个元素值,第1个元素值,第n个元素值 例如: int a =1,2,3,4,5,未指定长度,由初始化的个数决定数组长度,一维数组的初

19、始化,2.4.2 多维数组,多维数组的声明形式: 长度1长度2 长度n访问多维数组中的元素:第1维下标第2维下标第n维下标,二维数组的初始化,形式1:分行给二维数组赋初值 第1维长度第2维长度=第0个第2维数据组,第1个第2维数据组,第n-1个第2维数据组其中,n等于第1维长度。 例如: int a34=1,2,3,4,5,6,7,8,9,10,11,12;形式2:将所有数据写在一个内,按顺序赋值 第1维长度第2维长度=第0个元素值,第1个元素值,第m个元素值其中,m小于或等于第1维长度第2维长度。 例如: int a34=1,2,3,4,5,6,7,8,9,10,11,12;,二维数组的存储

20、顺序,如: float a34;存储顺序:按行存放,上例中数组a的存储顺序为:,列,#include void main() int a6=1,7,3,22,9,5; int i,j,t,flag; for(i=0;i6;i+) / 冒泡次数 flag=0;/每一次循环将最大值移动数组中的最后一个元素 for(j=0;j6-i-1;j+),if(ajaj+1) t=aj; aj=aj+1; aj+1=t; flag=1;if(flag=0) break;cout排序后的数组为:n;for(i=0;i6;i+) cout ain;,2.4.3 数组应用,例2-3 已知一个一维数组中的元素为1、7

21、、3、22、9、5,现要求以递增顺序对这个数组中的元素进行排列,结果为1、3、5、7、9、22。下面给出冒泡排序法的程序代码。,2.4.4 数组作为函数的参数,数组名作参数,形参、实参都应是数组名,类型一致,传送的是数组首地址。对形参数组的改变会直接影响到实参数组。定义形式:形式1: (类型标识符 数组名,int 长度)形式2: (类型标识符 数组名长度),处理固定长度的数组,2.4.5 数组与字符串,1字符数组的初始化字符型数组通常有两种特殊的初始化方法,形式如下:形式1: char =字符串形式2: char =字符串2字符串的基本运算1) 求字符串的长度2) 字符串的复制3) 字符串的连

22、接,2.5 指 针,2.5.1指针变量的概念,指针:一个变量的地址, 用于间接访问变量指针变量:用于存放另一个变量的地址的变量声明,例: int i;int *i_pointer=,指向整型变量的指针,指针变量的初始化,形式: 数据类型 *指针名初始地址;例: int *p=注意事项用变量地址作为初值时,该变量必须在指针初始化之前已说明,且变量类型应与指针类型一致。可以用一个已赋初值的指针去初始化另一 个指针变量。,指针变量的赋值运算,指针名=地址“地址”中存放的数据类型与指针类型必须相符。向指针变量赋的值必须是地址常量或变量,不能是普通整数。指针的类型是它所指向变量的类型,而不是指针本身数据

23、值的类型,任何一个指针本身的数据值都是unsigned long int型。,与地址相关的运算-*和&,*: 指针运算符, 一元操作符,表示指针所指向的变量的值。&: 取地址运算符, 一元操作符,得到一个对象的“地址”。注意:,int a,b;int *p= /输出指针P所指向的内容。,指针变量的算术运算,指针与整数的加减运算指针 p 加上或减去 n ,其意义是指针当前指向位置的前方或后方第 n 个数据的地址。运算的结果值取决于指针指向的数据类型。指针加一,减一运算指向下一个或前一个数据。例如:y=*px+ 相当于 y=*(px+) (*和+优先级相同,自右向左运算),指向数组元素的指针,声明

24、与赋值例: int a10, *pa; pa=通过指针引用数组元素经过上述声明及赋值后:pa+i、a+i 、&ai 都是ai的地址*pa就是a0,*(pa+1)就是a1,. ,*(pa+i)就是ai.ai, pai , *(pa+i), *(a+i)都是等效的。不能写 a+,因为a是数组首地址是常量。,以指针作为函数参数,传址:以地址方式传递数据,可以用来返回函数处理结果。实参是数组名时形参可以是指针。例:读入三个浮点数,将整数部分和小数部分分别输出,#include void splitfloat(float x, int *intpart, float *fracpart) /形参intp

25、art、 fracpart是指针 *intpart = int(x);/ 取x的整数部分 *fracpart = x - *intpart; /取x的小数部分,void main() int i, n; float x, f;cout x;splitfloat(x,运行结果:,Enter three (3) floating point numbers 4.7Integer Part is 4 Fraction Part is 0.78.913Integer Part is 8 Fraction Part is 0.913-4.7518Integer Part is -4 Fraction P

26、art is -0.7518,2.5.2 指针与字符串,使用字符数组的形式:char pString=I love China!;直接用字符型指针的形式:char *cString=I love China!;注意:char*型指针变量可以在定义时进行初始化,其形式为 char *指针变量名=“字符串”;(2) char*型的指针变量(或函数参数)既可以用于接收字符串常量,也可以接收字符型数组。例如:char pString=I love China!;char *myString=This is a string.;myString=pString;,例2-6 使用char*型指针变量重写字

27、符串的复制。,#include void copy_string(char *from,char *to)for(;*from!= 0;from+,to+)*to=*from;*to=0;/赋值字符串结束标识void main()char pSource=I am a teacher.;char pDestination=you are a student.; /pDestination字符串长度pSource字符串长度copy_string(pSource,pDestination);coutpSourceendl;coutpDestinationendl;,运行结果:I am a teac

28、her.I am a teacher.,C+提供了许多操作字符串数据的标准库函数,如比较字符串strcmp字符串连接strcat确定字符串长度等strlen使用操作字符串数据的库函数前,必须在应用程序的开头添加#include string.h#include ,C+字符串处理库(标准库)中常用的字符串操作函数,2.6 构造数据类型,结构体类型struct 共用体类型union枚举类型enum 类型自定义语句typedef,2.6.1 结构体,将某些相关的具有不同类型的数据组织到一个数据类型中的复合数据类型称为结构体。结构体为处理复杂的数据结构提供了手段。定义的一般形式为: struct 结构

29、体名 数据类型 成员名1; 数据类型 成员名2; : 数据类型 成员名n; ;,结构体变量,必须定义结构体类型的变量,才能使用该结构体。变量说明形式:定义结构体类型的同时定义变量定义结构体类型后定义变量 struct 结构名 结构变量名;,struct student int No; /学生学号 char Name20; /学生姓名 int Age; /学生年龄;,结构体变量,注意:结构变量的存储类型概念、寿命、可见性及使用范围与普通变量、数组等完全一致。结构变量占内存大小可用 sizeof 运算求出: sizeof(运算量)例:coutsizeof(int),sizeof(stu1),siz

30、eof(struct student); 结果:4,28,28结构体成员可以嵌套,即结构体的成员可以是另一个结构体。,结构体变量的初始化在定义结构体变量的同时,对其每个成员赋初值,与数组相似 变量名=表达式1,表达式2,表达式n struct student stu1=10, Computer,26, stu2;结构体变量的引用. stu2.No=110011; strcpy(stu2.Name, Television); /不能用赋值语句stu2.Name=Televsion; 若一个结构体中包含另一个结构体作为成员,则访问该成员中的成员时,要使用如下形式:.,2.6.2 共用体,union

31、 data int i; char ch; u1,u2;,共用体和结构体的区别:结构体变量所占内存长度是各成员所占内存长度之和,每个成员分别占有其自己的内存单元;共用体变量所占的内存长度等于最长的成员的长度。,使几种不同类型的数据类型的变量共占同一段内存单元的结构,也称为联合体。其定义形式为:union 联合名 数据类型 成员名 1; 数据类型 成员名 2; : 数据类型 成员名 n; ;,例:union uarea char c_data; short s_data; long l_data;,sizeof(union uarea)的结果为?,声明共用体变量的形式: 变量名注意:共用体变量不

32、允许给其赋初值。共用体变量中成员的访问形式:.,2.6.3 枚举类型,一种构造类型,允许用符号代表数据的数据类型是一系列有标识名的整型常量的集合,其主要功能是增加程序代码的可读性。定义形式:,1、先定义枚举类型标识符,再定义变量,enum 枚举类型标识符 变量列表;,enum personMan, Woman;,enum person x;,enum weekdaySun, Mon, Tue, Wed, Thu, Fri, Sat;,enum weekday workday, weekend;,2.6.3 枚举类型,定义形式:,2、直接定义枚举变量,enum 枚举类型标识符枚举元素1, 枚举元

33、素2, , 枚举元素n变量列表;,enum personMan, Womanx;,enum weekdaySun, Mon, Tue, Wed, Thu, Fri, Sat workday, weekend;,enum BOOLFALSE, TRUE;,3、说明: Sun、Mon、Sat等称为枚举元素或枚举常量,是用户自定义标识符。,枚举变量的引用,1、在编译时,对枚举元素按常量处理,故称枚举常量。但它们不是常量,不能对它们赋值。,Sun=0;,TRUE=1;,2、枚举元素作为常量,它们是有值的。语言编译时按定义时的顺序使它们的值为0、1、2、,enum weekdaySun, Mon, Tu

34、e, Wed, Thu, Fri, Satworkday;,workday=Mon;,printf(%d, workday);,3、可以在定义时改变枚举元素的值,enum weekdaySun=7, Mon=1, Tue, Wed, Thu, Fri, Satworkday;,enum weekdaySun=7, Mon, Tue, Wed=0, Thu, Fri, Sat;,4、枚举值可以用来做判断比较,if (workday=Mon),if (workdaySun),1、除了可以直接使用提供的标准类型名(int、char、float等)和自己定义的数据类型(结构体、共用体、枚举类型)外,还

35、可以用typedef声明新的类型名来代替已有的类型名。 typedef语句的形式如下: typedef ,typedef int INTEGER,int i, *p;,INTEGER i, *p;,typedef float REAL,float x, y;,2.6.4 类型自定义语句,REAL x, y;,2、定义类型标识符的方法:,、按定义变量的方式写出定义体:,、将变量名换成新的类型标识符:,、在最前面加typedef:,3、例:,类型自定义语句,、定义含有10 个元素的整型数组:,、先按照定义数组的形式书写:int a10;,、将变量名a换成自己指定的类型名:int ARRAY10;,

36、、在前面加上typedef:typedef int ARRAY10;,ARRAY a, b;,、定义字符指针类型:,、char *p;,、char *STRING;,、typedef char *STRING;,STRING p, ps10;,、声明结构体类型:,struct int num; char name20; float score;stu;,struct int num; char name20; float score;STUDENT;,typedef struct int num; char name20; float score;STUDENT;,STUDENT stu30, *p;,类型自定义语句,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号