




已阅读5页,还剩69页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第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语言是一个面向过程的编程语言。,C语言与面向对象的C+,C+包括C的全部特征、属性和优点。 C+支持面向对象程序设计。通过类和对象的概念把数据和对数据的操作封装在一起,通过派生、继承、重载和多态性等特征实现了软件重用和程序自动生成,使得大型复杂软件的构造和维护变得更加有效和容易。 C+与C完全兼容。但由于与C兼容,使得C+不是纯正的面向对象的语言,它既支持面向对象程序设计,也支持面向过程程序设计。 C+编译环境有许多版本,国内较为流行的有Visual C+和C+ Builder。,一个简单的C+程序,/ 表示注释行,# 引导一个预处理语句;main 表示主函数,void 表示无返回值 cin为输入流,类似C语言的scanf;cout为输出流,类似C语言的printf;其对应的头文件为iostream.h endl 是换行函数;n 为换行符;函数体用括起来。 注意与C的区别。它没有用到类的概念。,#include /包含头文件,称为编译预处理行 void main() /main()函数,程序入口 /程序体开始 int x; /定义变量 cinx; /由键盘输入值并赋值给变量x cout “n x=“ xendl; /输出字符串内容和x的值并换行 /程序体结束 运行结果:x=6,2.1 数据类型与表达式,程序设计主要包括数据结构(数据类型)和算法(操作步骤)的设计。 运行程序,要先描述算法。而描述算法应先说明算法要用的数据。 数据以变量或常量的形式来描述,每个变量或常量都有数据类型。,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型,如果后缀为F(或f)则为float型。,20(十进制表示),0x14,024,0若干07的数字, 0x若干09的数字及AF的字母,3字符常量 单引号括起来的一个字符 如A , 2(非数字) , (空格),?,4字符串常量 简称字符串,用一对双引号括起来的字符序列 例如“China“,5布尔常量 两个:false(假) true(真),不可显示字符 无法通过键盘输入,如响铃、换行、制表符、回车等 C+预定义的转义序列,2.1.2 变量,在程序的执行过程中值可变的量。 变量在使用之前需要首先声明其类型和名称。 声明形式: 变量名1,变量名2,变量名n; 命名规则:由字符、数字和下划线组成,且只能由字符和下划线开头。 声明一个变量的同时,也可以给它赋初值。 在组成变量名的元素中,大小写字母含义不同。 作为保留字的单词不能再作为其他名字使用。,C+中常用的保留字,2.1.3 引用,引用是别名 建立引用时,程序用另一个变量或对象(目标)的名字初始化它 引用作为目标的别名而使用,对引用的改动实际是对目标的改动 引用的声明形式为 &引用名=目标名 或 & 引用名=目标名,引用型变量的名字,必须遵循变量的命名规则,引用,例如,引用一个整型变量: int someInt; int 声明rInt是对整数的引用,初始化为引用someInt。 注意:在这里,要求someInt已经声明或定义。 引用不是值,不占存储空间,声明引用时,目标的存储状态不会改变。 引用在声明时必须初始化。,#include /输入输出头文件 void main() int someInt; /定义变量 int ,someInt:6 rInt:6 someInt:7 rInt: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. 引用在定义时必须初始化, 即为一已定义对象的别名。指针可在使用时初始化, 可以重新赋值。,引用的作用: 1. 引用可象地址一样完成对所代表的对象的操作。 2. 对引用的操作不同于对指针的操作, 它可直接作用于变量, 所以更方便, 更易于理解。,引用的缺点: 引用不能为空, 即必须代表某一对象。 指针灵活性较好, 但使用较不方便。,2.1.4 表达式,表达式由运算符、运算对象和括号组成。 1运算符 C+语言定义了丰富的运算符,如算术运算符、关系运算符、逻辑运算符等 分为单目运算符和双目运算符 使用形式为 运算符 ,运算符优先级,算术运算符,关系运算符,运算结果: 1=真; 0=假,常用复合赋值运算符,与单目 同级. 与=同级,2; 5 2; 6,例: int i=1, j=5; cout + i “; “ j+ endl; cout i “; “ j endl;,输出结果,2表达式 表达式是程序最基本的组成部分 由运算符(如+、-、*、) 、运算对象(也称操作数,可以是常量、变量等等)和括号组成 执行表达式所规定的运算,所得到的结果值是表达式的值。,表达式的类型转换,当表达式中出现了多种类型数据的混合运算时,首先需要进行类型转换,再计算表达式的值。 表达式中的类型转换分为两种 隐含转换 强制转换, 隐含转换:若参加运算的操作数类型不一致,则系统自动对数据进行转换 具体规则如下: 算术运算和关系运算转换:将低类型数据转换为高类型数据。 char short int unsigned long unsigned-long float double 低 高 逻辑运算符:要求必须为bool型;系统自动将其转换为bool型。转换方法是:非0数据转换为true,0转换为false。 位运算:要求必须是整数;若是不同类型的整数时,编译系统会自动进行类型转换。 赋值运算:要求左值(赋值运算符左边的值)与右值(赋值运算符右边的值)的类型相同。, 强制类型转换。又称为显式转换,是通过类型标识符和括号来实现的,其语法形式有两种: (表达式) 或 (类型标识符),2.2 程序的控制结构,2.2.1 选择结构,C+语言支持下列基本的条件语句: if语句 if else语句 if elseif语句 ?条件语句 可简化条件表达式的表达形式,语法为: expression1? Expression2:expression3,if (expression1) statement1; else statement2;,2.2.2 switch语句,多次判断选择 判断的是同一个表达式的值,switch(表达式) case 常量表达式1:语句1 case 常量表达式2:语句2 case 常量表达式n:语句n default: 语句n+1 ,只能是整型、字符型和枚举型,值不能相同,且次序不影响执行结果,每个case分支可以有多条语句,但不用,while循环(特别适合处理字符串和其他指针类型) do while循环 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语句内跳出或结束循环,继续执行逻辑上的下一条语句。 2continue语句 仅用于循环体中,作用是结束本次循环,接着开始判断循环条件,决定是否继续执行下一次循环。,2.3 函 数,2.3.1 函数定义,由两部分组成:函数头与函数体。 函数定义的一般语法形式为:, (形式参数表) 说明性语句序列; 实现函数功能的语句系列; ,类型标识符: 返回值类型。返回值是返回给主调函数的处理结果,由函数体部分的return语句带回。 形式参数表:简称形参表,内容如下: (类型l 形参名1,类型2 形参名2,类型n 形参名n),2.3.2 调用函数,调用函数先定义后调用,否则,需要在调用函数之前在主调函数中声明函数原型。 函数原型声明形式: (含类型说明的形参表); 函数调用形式: (实参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) void 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; else return b; ,void main() int a,b,c,d; a=210; b=150; c=20; d=max(a,b); d=max(d,c); cout“The biggest of“ setw(5)a setw(5)b setw(5)c“ is “dendl; ,运行结果:,The biggest of 210 150 20 is 210,内联函数,注意: 内联函数体内一般不能有循环语句和switch语句。 内联函数不能实现递归操作。 内联函数的定义必须出现在第一次被调用之前。 一般,简单且使用频率很高的函数才说明为内联函数。,2.3.5 系统函数的使用,系统函数的原型声明已经全部由系统提供,并且已分类存于不同的头文件中。 使用系统函数:用include指令嵌入相应的头文件,再使用。 如:include 常用的函数库有(C语言): math.h -数学运算,如sqrt(x),sin(x) stdio.h - 输入输出函数 stdlib.h - 类型转换,存储分配等 time.h - 时间和日期 string.h - 字符串处理 assert.h - 用于调试程序,2.4 数组,数组是一种构造数据类型,是具有一定顺序关系的若干相同类型变量的集合体,它占用连续内存单元进行存储。组成数组的变量称为该数组的元素。 如:int c7; 引用数组中的特定位置或元素, 要指定数组中的特定位置或 元素的位置号 数组名是数组首元素的内存地址。 数组名是一个常量,不能被赋值。,2.4.1 一维数组,数组使用前必须先声明。 声明一维数组的形式: 数组长度 数组中的每个元素可以当成普通的变量使用。 访问一维数组元素的形式: 下标 引用 只能逐个引用数组元素,而不能一次引用整个数组 例如: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,未指定长度,由初始化的个数决定数组长度,一维数组的初始化,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;,二维数组的存储顺序,如: 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“ “ai“n“; ,2.4.3 数组应用,例2-3 已知一个一维数组中的元素为1、7、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) 字符串的连接,2.5 指 针,2.5.1指针变量的概念,指针:一个变量的地址, 用于间接访问变量 指针变量:用于存放另一个变量的地址的变量 声明,例: int i; int *i_pointer=,指向整型变量的指针,指针变量的初始化,形式: 数据类型 *指针名初始地址; 例: int *p= 注意事项 用变量地址作为初值时,该变量必须在指针初始化之前已说明,且变量类型应与指针类型一致。 可以用一个已赋初值的指针去初始化另一 个指针变量。,指针变量的赋值运算,指针名=地址 “地址”中存放的数据类型与指针类型必须相符。 向指针变量赋的值必须是地址常量或变量,不能是普通整数。 指针的类型是它所指向变量的类型,而不是指针本身数据值的类型,任何一个指针本身的数据值都是unsigned long int型。,与地址相关的运算-*和&,*: 指针运算符, 一元操作符,表示指针所指向的变量的值。 &: 取地址运算符, 一元操作符,得到一个对象的“地址”。 注意:,int a,b; int *p= /输出指针P所指向的内容。,指针变量的算术运算,指针与整数的加减运算 指针 p 加上或减去 n ,其意义是指针当前指向位置的前方或后方第 n 个数据的地址。 运算的结果值取决于指针指向的数据类型。 指针加一,减一运算 指向下一个或前一个数据。 例如:y=*px+ 相当于 y=*(px+) (*和+优先级相同,自右向左运算),指向数组元素的指针,声明与赋值 例: 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) /形参intpart、 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.7 Integer Part is 4 Fraction Part is 0.7 8.913 Integer Part is 8 Fraction Part is 0.913 -4.7518 Integer Part is -4 Fraction Part 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*型指针变量重写字符串的复制。,#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 teacher. I am a teacher.,C+提供了许多操作字符串数据的标准库函数,如 比较字符串strcmp 字符串连接strcat 确定字符串长度等strlen 使用操作字符串数据的库函数前,必须在应用程序的开头添加 #include “string.h“ #include ,C+字符串处理库(标准库)中常用的字符串操作函数,2.6 构造数据类型,结构体类型struct 共用体类型union 枚举类型enum 类型自定义语句typedef,2.6.1 结构体,将某些相关的具有不同类型的数据组织到一个数据类型中的复合数据类型称为结构体。 结构体为处理复杂的数据结构提供了手段。 定义的一般形式为: struct 结构体名 数据类型 成员名1; 数据类型 成员名2; : 数据类型 成员名n; ;,结构体变量,必须定义结构体类型的变量,才能使用该结构体。 变量说明形式: 定义结构体类型的同时定义变量 定义结构体类型后定义变量 struct 结构名 结构变量名;,struct student int No; /学生学号 char Name20; /学生姓名 int Age; /学生年龄 ;,结构体变量,注意: 结构变量的存储类型概念、寿命、可见性及使用范围与普通变量、数组等完全一致。 结构变量占内存大小可用 sizeof 运算求出: sizeof(运算量) 例: coutsizeof(int)“,“sizeof(stu1)“,“sizeof(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 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)的结果为?,声明共用体变量的形式: 变量名 注意:共用体变量不允许给其赋初值。 共用体变量中成员的访问形式: .,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, 枚举元素2, , 枚举元素n变量列表;,enum personMan, Womanx;,enum weekdaySun, Mon, Tue, Wed, Thu, Fri, Sat workday, weekend;,e
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 江苏省泰州市2025届高三第一次调研测试数学试题(解析版)
- 美国税人心得体会
- 室内设计的发展方向
- 招标代理委托居间合同
- 办公区域大型活动策划方案与指南
- 工业污水处理可行性报告
- 中医护理学(第5版)课件 望诊1
- 食品行业质量安全追溯与智能仓储管理方案
- 二零二五年度办公室新风系统智能化升级改造合同
- 工作效率提升策略实施计划
- 第二单元 焕发青春活力 大单元教学设计-2024-2025学年统编版道德与法治七年级下册
- 共赢未来餐饮行业合作新篇
- 2025年江苏农林职业技术学院单招职业适应性考试题库及参考答案1套
- 2025年辽宁省交通高等专科学校单招职业倾向性测试题库汇编
- 2025年陕西延长石油集团有限责任公司招聘笔试参考题库含答案解析
- 三八妇女节模板
- 10kV配电站房工程施工方案与技术支持
- 2024上海市招聘社区工作者考试题及参考答案
- 《招标投标法》考试题库200题(含答案)
- 《求职与面试技巧》课件
- 《人体按摩穴位示意》课件
评论
0/150
提交评论