版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1第第2章章基本基本C+语言语言 2.1 C+程序结构程序结构 2.2 数据类型和基本输入输出数据类型和基本输入输出 2.3 运算符和表达式运算符和表达式 2.4 基本语句基本语句 2.5 函数和预处理函数和预处理 2.6 构造类型构造类型 2.7 指针和引用指针和引用 上机训练上机训练22.1C+程序结构程序结构 2.1.1几个几个C+程序程序 例例11 在屏幕上输出一个由星号形成的三角形。/ 输出星号的三角形阵列#include void DoDraw(int num); / 声明一个全局函数void main()int num=5; / 定义并初始化变量DoDraw(num);/ 函数的
2、调用void DoDraw(int num)/ 函数的定义for (int i=0; inum; i+)/ 循环语句for (int j=0; j=i; j+)cout*;coutn; 32.1C+程序结构程序结构 例例Ex_Simple2Ex_Simple2 用类的概念重写例Ex_Draw。/ 输出星号的三角形阵列#include class CDrawArray/ 定义一个类public:void DoDraw(int num);/ 声明类的公有成员函数;void CDrawArray:DoDraw(int num)/ 成员函数的实现for (int i=0;inum;i+)for (in
3、t j=0;j=i;j+)cout*;coutn;void main()int num=5;CDrawArray myDraw;/ 定义类的一个对象myDraw.DoDraw(num);/ 调用此对象的成员函数 42.1C+程序结构程序结构2.1.2C+程序的基本组成程序的基本组成 C+程序往往由预处理命令、语句、函数、变量和对象、输入与输出以及注释等几个基本部分组成的。(1)(1)预处理命令在程序的一开始出现含有以“#”开头的命令,它们是预处理命令。三类预处理命令:宏定义命令、文件包含命令和条件编译命令。(2)(2)语句可以是用来判断的条件语句,可以是用来反复运行的循环语句等。(3)(3)函
4、数一个程序由若干个函数组成。有的是系统中所提供的库函数,有的是根据自己需要自己编制设计的函数。程序中必须有一个且只能有一个主函数main。(4)(4)变量和对象变量的类型有整型(int)、字符型(char)以及浮点型(float)等。对象通常是指“类”的实例(具有该“类”类型的变量),如myDraw是类CDrawArray的对象。(5)(5)输入与输出使用输入与输出可以要求键入一些数值或把计算的结果显示在屏幕上。(6)(6)注释程序的目的不仅在于实现某种功能、解决某个问题,而且还在于数据结构和算法的交流。注释能提高程序的可读性,帮助用户对程序的理解。52.1C+程序结构程序结构2.1.3C+程
5、序的书写风格程序的书写风格 标识符命名标识符命名 用来标识变量名、函数名、数组名、类名、对象名、类型名、文件名等的有效字符序列。标识符命名的好坏也会影响程序的可读性,命名时注意: (1)(1)合法性标识符由大小写字母、数字字符(09)和下划线组成,第一个字符必须为字母或下划线。任何标识符中都不能有空格、标点符号及其他字符。注意注意,标识符的大小写是有区别的。用户定义的标识符不能和系统的关键字同名。(2)(2)有效性标识符的长度(组成标识符的字符个数)是任意的,最好不超过32个,因为有的编译系统只能识别前32个字符,也就是说前32个字符相同的两个不同标识符被有的系统认为是同一个标识符。(3)(3
6、)易读性在定义标识符时,若能做到“见名知意”就可以达到易读性的目的。 62.1C+程序结构程序结构缩进和注释缩进和注释 缩进是指程序在书写时不要将程序的每一行都由第一列开始,在适当的地方加进一些空行或空格。它同注释一样,也是为了提高程序的可读性。注释要注意的是:(1)(1)注释应在编程的过程中同时进行,不要指望程序开发完成后再补写注释。那样只会多花好几倍的时间,更为严重的是,时间长了以后甚至会读不懂自己写的程序。(2)(2)必要的注释内容应包含:源程序的总体注释(文件名、作用、创建时间、版本、作者及引用的手册、运行环境等)、函数注释(目的、算法、使用的参数和返回值的含义、对环境的一些假设等)及
7、其他的少量注释。千万不要陈述那些一目了然的内容,否则会使注释的效果适得其反。 72.2数据类型和基本输入输出数据类型和基本输入输出 2.2.1基本数据类型基本数据类型使用基本数据类型时需要注意:(1)(1)无符号和有符号的区别在于数值最高位的含义。对signed类型,最高位是符号位,其余各位表示数值大小;unsigned类型的各个位都用来表示数值大小;相同基本数据类型的signed和unsigned的数值范围是不同。(2) (2) char、short、int和long可统称为整型。缺省时,char、short、int和long本身是有符号(signed)的。 82.2数据类型和基本输入输出数
8、据类型和基本输入输出2.2.2常量常量 整型常量整型常量 (1)(1)十进制整型常量:即十进制整数,如34、128等。(2)(2)八进制整型常量:以0开头的数,由0至7的数字组成。(3)(3)十六进制整型常量:以0 x或0X开头的数,由0至9、A至F或a至f组成。需要注意的是: 整型常量中的长整型(long)要以L或小写字母l作为结尾。 整型常量中的无符号型(unsigned)要以U或u作为结尾。 浮点型常量浮点型常量 (1)(1)十进制数形式:由整数部分和小数部分组成。(2)(2)指数形式:采用科学表示法,能表示出很大或很小的浮点数。若浮点型常量是以F(或f)结尾的,则表示单精度类型(flo
9、at),以L(或小写字母l)结尾的,表示长双精度类型(long double)。若一个浮点型常量没有任何说明,表示双精度类型(double)。 92.2数据类型和基本输入输出数据类型和基本输入输出字符常量字符常量 字符常量是用单引号括起来的一个字符。 102.2数据类型和基本输入输出数据类型和基本输入输出字符串常量字符串常量 字符串常量是一对双引号括起来的字符序列。可以包含空格、转义序列符或其他字符。由于双引号是字符串的分界符,因此如果需要在字符串中出现双引号则必须用“”表示。例如:“Please press ”F1” to help!”这个字符串被解释为:Please press “F1”
10、to help!字符串常量必须在同一行书写,若一行写不下,则需要用来连接,不要将字符常量和字符串常量混淆不清,它们主要的区别如下:(1)(1)字符常量用单引号括起来,占一个字节;字符串常量是用双引号括起来,至少占用两个字节。例如a是字符常量,占有的一个字节用来存放字符a的ASCII码值,而“a”是字符串常量,它的长度不是1而是2,除了字符a之外,它的末尾还有个0字符。每个字符串的末尾都有一个这样的字符。(2)(2)字符常量实际上是整型常量的特殊形式,它可以参与常用的算术运算;而字符串常量则不能。例如:int b= a+3;/ 结果b为100,这是因为将a的ASCII码值97参与运算 112.2
11、数据类型和基本输入输出数据类型和基本输入输出符号常量符号常量 例例Ex_PI1Ex_PI1 用#define定义符号常量。#include #define PI 3.14159void main()double r = 100.0, area;area = PI * r * r;cout圆的面积是:area n; 122.2数据类型和基本输入输出数据类型和基本输入输出2.2.3变量变量 变量的定义变量的定义 定义变量是用下面的格式语句进行定义的: ; 需要说明的是:(1)(1)在同一个程序块中,不能有两个相同的变量名。(2)(2)没有字符串变量类型,字符串是用字符类型的数组或指针来定义的。 (
12、3)(3)与其他语言相比,C+变量的定义比较自由。 变量的初始化变量的初始化程序中常需要对一些变量预先设置初值,这一过程称为初始化。可以在定义变量时同时使变量初始化,也可以在多个变量的定义语句中单独对某个变量初始化。需要注意的是,一个未初始化的变量不是没有数值,而是取决于变量在系统中的存储形式,它可能是系统的缺省值或无效值。 132.2数据类型和基本输入输出数据类型和基本输入输出2.2.4基本输入输出基本输入输出 输出流输出流(cout) 通过cout可以输出一个整数、实数、字符及字符串,cout中的插入符“ .其中,提取符“”可以连续写多个,每个后面跟一个表达式,该表达式通常是获得输入值的变
13、量或对象。 142.3运算符和表达式运算符和表达式 2.3.1算术运算符算术运算符 算术运算符如下所示:+(正号运算符,如+4,+1.23等)-(负号运算符,如-4,-1.23等)*(乘法运算符,如6*8,1.4*3.56等)/(除法运算符,如6/8,1.4/3.56等)%(模运算符或求余运算符,如40%11等)+(加法运算符,如6+8,1.4+3.56等)-(减法运算符,如6-8,1.4-3.56等) 注意:注意:(1)除法运算两个整数相除,结果为整数,如7/5的结果为1,它是将小数部分去掉,而不是四舍五入;若除数和被除数中有一个是浮点数,则进行浮点数除法,结果是浮点型。如7/5.0、7.0
14、/5、7.0/5.0的结果都是1.4。(2)求余运算 求余运算要求参与运算的两个操作数都是整型,结果是两个数相除的余数。例如40%5的结果是0,40%11的结果是7。要理解负值的求余运算,例如40%-11结果是7,-40%11结果是-7,-40%-11结果也是-7。 152.3运算符和表达式运算符和表达式(3)(3)优先级和结合性 将表达式的求值中多种运算之间的先后关系(即运算符之间的优先关系)用运算符的优先级表示,优先级的数值越小优先级越高。在算术运算符中,单目运算符的优先级最高,其次是乘、除和求余,最后是加减。 优先级相同的运算符,则按它们的结合性进行处理。运算符的结合性是指运算符和操作数
15、的结合方式,有“从左至右”和“从右至左”。“从左至右的结合”指运算符左边的操作数先与运算符相结合,再与运算符右边的操作数进行运算;自右至左的结合次序是将运算符右边的操作数先与运算符相结合。 在算术运算符中,除单目运算符外,其余运算符的结合性都是从左至右的。(4)(4)关于书写格式 在使用运算符进行数值运算时,若书写时没有在双目运算符两边加上空格,则有时编译系统会做出与自己想象中不同的理解。 书写时,有时有意识地加上一些括号。这样不仅增强程序的可读性,而且,尤其当对优先关系犹豫时,加上括号是保证正确结果的最好方法。(5)(5)溢出处理某数除以0或当其它浮点溢出时,编译系统将报告错误并终止程序运行
16、。但对整数溢出,系统却不认为是一个错误。 162.3运算符和表达式运算符和表达式2.3.2赋值运算符赋值运算符 复合赋值复合赋值10种复合赋值运算符:+=,-=,*=,/=,%=,=,|=,=,= 注意:注意:(1)(1)在复合赋值运算符之间不能有空格,例如 += 不能写成 + = 。(2) (2) 所有运算符高于逗号运算符,复合赋值运算符的结合性是从右至左的。多重赋值多重赋值 指在一个赋值表达式中出现两个或更多的赋值符(“=”),例如:nNum1 = nNum2 = nNum3 = 100;赋值符的结合性是从右至左,上述赋值的过程:首先对nNum3 = 100求值,将100赋值给nNum3,
17、同时该赋值表达式取得值100;然后将该值赋给nNum2,该赋值表达式也取得值100;最后将100赋给nNum1。 172.3运算符和表达式运算符和表达式2.3.3数据类型转换数据类型转换自动转换自动转换将数据类型从低到高进行转换,例如:10 + a + 2*1.25 - 5.0/4L运算:(1)(1)2*1.25的运算,将2和1.25都转换成double型,结果为double型的2.5。(2) (2) 长整型4L和5.0转换成double型,5.0/4L结果为double型,值为1.25。(3)(3)进行10 + a 的运算,先将a转换成整数97,运算结果为107。(4)(4)整数107和2.
18、5相加,先将整数107转换成double型,值为109.5。(5)(5)进行109.5-1.25的运算,结果为double型的108.25。强制转换强制转换 强制类型有下列两种格式:()、() 。整型(int)无符号整型(unsigned)长整型(long)无符号长整型(unsignedlong)双精度浮点型(double)短整型,字符型(short,char)单精度浮点型(float)图2.1类型转换的顺序182.3运算符和表达式运算符和表达式2.3.4关系运算符关系运算符 是比较两个操作数是否符合给定的条件。若符合条件,则关系表达式的值为“真”,否则为“假”。在编译系统中,往往将“真”表示
19、为“true”或1,将“假”表示为“false”或0。而任何不为0的数被认为是“真”,0被认为是“假”。由于关系运算需要两个操作数,所以关系运算符都是双目运算符。提供了6种关系运算符:(小于),(大于),=(大于等于),= =(相等于), ! =(不等于)其中,前4种的优先级相同且高于后面的两种。例如:a = b c等效于a = ( b c )但关系运算符的优先级低于算术运算符(其他可参见表2.6)。例如:a = b c等效于a = ( b c ) 192.3运算符和表达式运算符和表达式2.3.5逻辑运算符逻辑运算符 将多个关系表达式或逻辑量组成一个逻辑表达式。提供了3种逻辑运算符:!逻辑非(
20、单目):指将“真”变“假”,“假”变“真”。&逻辑与(双目):指两个操作数都是“真”时,结果为“真”,否则为“假”。|逻辑或(双目):指两个操作数中有一个是“真”时,结果为“真”,只有它们都为“假”时,结果才为“假”。“逻辑非”、“逻辑与”和“逻辑或”的优先级依次从高到低,且“逻辑非”的优先级还比算术运算符和关系运算符高,而“逻辑与”和“逻辑或”的优先级却比关系运算符要低。例如:0| 2 4 - !0表达式的运算过程是这样的:(1)(1)进行“!0”的运算,结果为1(“真”)。(2)(2)进行“8 4-1”的运算,即“8 3”,结果为0(“假”)。(3)(3)进行“0|0” 的运算,结果为0(
21、“假”)。表达式的值为0。 202.3运算符和表达式运算符和表达式2.3.6 位运算符位运算符 是对操作数按其在计算机内表示的二制数逐位地进行逻辑运算或移位运算,参与运算的操作数只能是整型常量或变量。提供了六种位运算符:(按位求反,单目运算符):将一个二进制数的每一位求反,即0变成1,1变成0。(右移,双目运算符):将左操作数的二进制值向右移动指定的位数,右移后,移出的低位舍弃。无符号数高位补0;有符号数高位补符号位。&(按位与,双目运算符):将两个操作数对应的二进制位进行逻辑与操作。(按位异或,双目运算符):将两个操作数对应的二进制位进行异或操作。|(按位或,双目运算符):将两个操作数对应的
22、二进制位进行逻辑或操作。说明:说明:(1)(1)左移和右移运算可替代乘和除以2的n次方运算,n为移位的位数。(2) (2) 当多个位运算符出现在同一个表达式中时,要注意它们的优先级别。 212.3运算符和表达式运算符和表达式2.3.7 三目运算符三目运算符 C+中唯一的三目运算符是条件运算符,其格式如下: ? :“条件表达式”是C+中可以产生“真”和“假”结果的任何表达式,如果条件表达式的结果为“真”,则执行表达式1,否则执行表达式2。例如:nNum = (a b) ? 10 : 8;注意,注意,只有在表达式2后面才能出现分号结束符,“表达式1”和“表达式2”中都不能有分号。 222.3运算符
23、和表达式运算符和表达式2.3.8增增1和减和减1运算符运算符 +和-既可放在变量的左边也可以出现在变量的右边,称为前缀运算符和后缀运算符。例如:i+; 或 +i;(等效于i = i + 1; 或i += 1;)i-; 或 -i;(等效于i = i - 1; 或i -= 1;)若前缀运算符和后缀运算符仅用于某个变量的增1和减1,这两都是等价的,如果将这两个运算符和其他的运算符组合在一起,在求值次序上就会产生根本的不同: 如果用前缀运算符对一个变量增1(减1),在将该变量增1(减1)后,用新的值在表达式中进行其他的运算。 如果用后缀运算符对一个变量增1(减1),用该变量的原值在表达式进行其他的运算
24、后,再将该变量增1(减1)。例如:a = 5;b = +a - 1; / 相当于 a = a + 1; b = a 1;和a = 5;b = a+ -1; / 相当于 b = a 1; a = a + 1; 虽然它们中的a值的结果都是6,但b的结果却不一样,前者为5,后者为4。 232.4基本语句基本语句2.4.2选择语句选择语句 条件语句条件语句 条件语句if具有下列形式:if () else (1)(1)条件语句中的表达式一般为逻辑表达式或关系表达式。表达式的类型也可以是任意的数值类型(包括整型、浮点型、字符型等)。 (2)(2)适当添加花括号(“ ”)来增加程序的可读性。 (3)(3)条
25、件语句中的语句1和语句2也可是if条件语句,这就形成了if语句的嵌套。(4)(4)else总是和其前面最近的if配套的。 242.4基本语句基本语句开关语句开关语句 具有下列形式:switch ( )case :语句1case :语句2.case :语句n default :语句n+1 注意:注意:(1)(1)switch后面的表达式可以是整型、字符型或枚举型的表达式,而case后面的常量表达式的类型必须与其匹配。(2)(2)多个case可以共有一组执行语句。(3)(3)若同一个case后面的语句是复合语句,即有两条或两条以上的语句,则这些语句可以不用花括号(“”)括起来。(4) (4) 由于
26、case语句起标号作用,因此每一个case常量表达式的值必须互不相同,否则会出现编译错误。 252.4基本语句基本语句2.4.3循环语句循环语句 while循环语句循环语句while循环语句具有下列形式:while()do.while循环语句循环语句do.while循环语句具有下列形式:do while()for循环语句循环语句 for循环语句具有下列形式:for (表达式1;表达式2;表达式3) (1) 表达式1、表达式2、表达式3都可以省略,但分号“;”不能省略。 (2) 表达式1和表达3可以是一个简单的表达式,也可以是逗号表达式,即包含两个或两个以上的简单表达式,中间用逗号分隔。 (3)
27、 由于循环体是由任何类型的语句组成的,因此在循环体内还可以包含前面的几种循环语句,这样就形成了循环的嵌套。 262.4基本语句基本语句2.4.4break和和continue语句语句 若需跳出循环结构或重新开始循环,就得使用break和continue语句,格式:break;从一个循环体跳出,即提前终止循环,也可以跳出switch结构。continue;用于那些依靠条件判断而进行循环的循环语句。对于for语句来说,目的是将流程转到for语句的表达2和表达式3。例如: 例例Ex_Continue Ex_Continue 把1100之间的不能被7整除的数输出。#include void main(
28、)for (int nNum=1; nNum=100; nNum+)if (nNum%7 = 0) continue;coutnNum ;coutn;当nNum能被7整除时,执行continue语句,流程转到for 语句中的nNum=100; nNum+,并根据表达式nNum=100的值来决定是否再做循环。而当nNum不能被7整除时,才执行coutnNum” ”语句。 272.5函数和预处理函数和预处理 2.5.1函数的定义和调用函数的定义和调用函数的定义函数的定义 定义一个函数的格式如下: ( ) 函数体函数类型决定了函数所需要的返回值类型。函数名后面必须跟一对圆括号“( )”,以区别于变量
29、名及其他用户定义的标识名。函数的形式参数写在括号内,参数表中参数个数可以是0,一个或多个参数,圆括号不能省略。函数体由在一对花括号中的若干条语句组成,用于实现这个函数执行的动作。 函数的声明函数的声明 声明一个函数可按下列格式进行: ( ); int sum(int x, int y);和 int sum(int , int);是等价的。 282.5函数和预处理函数和预处理函数的调用函数的调用 函数调用的一般形式为:( );所谓“实际参数”(简称“实参”),它与“形参”相对应,是实际调用函数时所给定的常量、变量或表达式,且必须有确定的值。例如:int a5 = 7, 9, 6, 3, 4;su
30、m(a0, 6);或sum(a0*a1, a2+a3);等都是合法的调用。需要注意的是:实参与形参的个数应相等,类型应一致,且按顺序对应,一一传递数据。C+中,调用一个函数的方式可以有很多,例如:sum(3, 4);/ Aint c = 2 * sum(4,5);/ Bc = sum(c, sum(c,4);/ C其中,A是将函数作为一个语句,不使用返回值,只要求函数完成一定的操作;B把函数作为表达式的一部分,将返回值参与运算,结果c = 18;C是将函数作为函数的实参,等价于“c = sum(18, sum(18,4);”,执行sum(18,4)后,等价于“c = sum(18,22) ;”
31、,最后结果为c = 40。 2.5函数和预处理函数和预处理2.5.2函数的参数传递函数的参数传递 函数的参数传递有两种方式,一种是按值传递,另一种是地址传递或引用传递。 例例Ex_SwapValue Ex_SwapValue 交换函数两个参数的值。#include void swap(float x, float y)float temp;temp = x; x = y; y = temp;coutx = x, y = yn;void main()float a = 20, b = 40;couta = a, b = bn;swap(a, b);couta = a, b = bn;运行结果为:
32、a = 20, b = 40 x = 40, y = 20a = 20, b = 40值传递的最大好处是保持函数的独立性。在值传递的情况下,函数只有通过return来返回某个类型的值。 2.5函数和预处理函数和预处理2.5.3作用域和存储类型作用域和存储类型 作用域作用域 (1)(1)块作用域在块中声明的标识符,作用域从声明处开始,一直到结束块的花括号为止。具有块作用域的标识符称作局部标识符,块作用域也称作局部作用域 标识符的作用域完全相同时,不允许出现相同的标识符名。标识符具有不同的作用域时,允许标识符同名。 在for语句中声明的标识符,其作用域是包含for语句的那个内层块,而不是仅仅作用于
33、for语句。 (2)(2)函数原型作用域在声明函数原型所指定的参数标识符的作用范围。这个作用范围是在函数原型声明中的左、右括号之间。在函数原型中声明的标识符可以与函数定义中说明的标识符名称不同。由于所声明的标识符与该函数的定义及调用无关,所以可以在函数原型声明中只作参数的类型声明,而省略参数名。(3)(3)函数作用域C+语言中,只有goto语句中的标号标识符具有函数作用域。具有函数作用域的标识符在声明它的函数内随处可见,但在此函数之外不可见。goto语句的滥用导致程序流程无规则、可读性差。 2.5函数和预处理函数和预处理变量的存储类型变量的存储类型 存储类型的声明格式: ; (1)(1)自动类
34、型(auto)一般说,自动存储类型声明的变量都是限制在某个程序范围内使用的。从系统角度来说,自动存储类型变量是采用堆栈方式分配内存空间。程序执行到超出该变量的作用域时,就释放它所占用的内存空间,其值也随之消失了。声明一个自动存储类型的变量是在变量类型前面加上关键字auto若自动存储类型的变量是在函数内或语句块中声明,可省略auto,(2)(2)静态类型(static)它和自动存储类型的变量的最大不同之处在于:静态类型变量在内存中是以固定地址存放的,而不是以堆栈方式存放的。只要程序还在继续执行,静态类型变量的值就一直有效,不会随它所在的函数或语句块的结束而消失。 静态类型的变量均有确定的初值,当
35、声明变量时没有指定其初值,则编译器将其初值置为0。在程序中声明的全局变量总是静态存储类型,若在全局变量前加一个static,使该变量只在这个源程序文件内使用,称之为全局静态变量或静态全局变量。 静态函数也是在某个函数声明前加上static,它的目的也是使该函数只在声明的源文件中使用,对于其他源文件则无效。 2.5函数和预处理函数和预处理(3)(3)寄存器类型(register)使用关键字register声明寄存器类型的变量的目的是将所声明的变量放入寄存器内,从而加快程序的运行速度。但有时,在使用这种声明时,若系统寄存器已经被其他数据占据时,寄存器类型的变量就会自动当作auto变量。(4)(4)
36、外部类型(extern)用关键字extern声明的变量称为外部变量。某个变量被声明成外部变量时,不必再次为它分配内存就可以在本程序中引用这个变量。只有在两种情况下要使用外部变量:第一种情况,在同一个源文件中,若定义的变量使用在前,声明在后,这时在使用前要声明为外部变量。 第二种情况,当由多个文件组成一个完整的程序时,在一个源程序文件中完全定义的变量要被其他若干个源文件引用时,引用的文件中要使用extern声明外部变量。 332.5函数和预处理函数和预处理2.5.4函数的重载函数的重载 函数重载是指C+允许多个同名的函数存在,但同名的各个函数的形参必须有区别:形参的个数不同,或者形参的个数相同,
37、但参数类型有所不同。需要说明的是:(1)(1)重载函数必须具有不同的参数个数或不同的参数类型,若只有返回值的类型不同是不行的。(2)(2)当函数的重载带有默认参数时,应该注意避免二义性。例如:int fun(int a, int b = 0);int fun(int a);是错误的。因为如果有函数调用fun(2)时,编译器无法准确地确定应调用哪个函数。 342.5函数和预处理函数和预处理2.5.3预处理预处理 宏定义命令宏定义命令 #define PI 3.141593 (1)(1)#define、PI和3.141593之间一定要有空格,且一般将宏名定义成大写,以与普通标识符相区别。(2)(2
38、)宏被定义后,一般不能再重新定义,而只有当使用如下命令才可以:#undef 宏名(3) (3) 一个定义过的宏名可以用来定义其它新的宏,但要注意其中的括号。(4)(4)上述宏定义是简单的一种形式,实际上它还可以带参数,例如:#defineMAX(a,b) (a)(b)?(a):(b) 文件包含命令文件包含命令有下列两种格式:#include #include “文件名” 在使用#include命令需要注意的是,一条#include命令只能包含一个文件,若想包含多个文件须用多条文件包含命令。 352.5函数和预处理函数和预处理条件编译命令条件编译命令 (1)第一种形式#ifdef #else #
39、endif 例例Ex_UseIfdef Ex_UseIfdef 使用#ifdef条件编译命令。#include #define A -1void main() #if A0cout0n;#elif A0couta0n;#elsecouta=0n;#endif运行结果:a0362.5函数和预处理函数和预处理(2)(2)第二种形式#ifndef #else #endif这与前一种形式的区别仅在于,如果标识符没有被#define命令定义过,则编译,否则就编译。(3)(3)第三种形式#if #elif .#else#endif 372.5函数和预处理函数和预处理 例例Ex_UseIf Ex_UseIf
40、 使用#if条件编译命令。#include #define A -1void main()#ifA0cout0n;#elif A0couta0n;#elsecouta=0n;#endif运行结果为:a0若将#define A -1改为#define A 0则结果为:a=0 382.6构造类型构造类型2.6.3结构体结构体 定义结构体定义结构体 结构体定义的格式为:struct ;.; 结构变量名表;注意:注意:(1)(1)在定义结构体时,不要忘记最后一个花括号后面的分号“;”。(2)(2)结构体的成员变量可以是基本数据类型,也可以是其他合法的类型。例如:struct STUDENTPERSON
41、one;/ 用已定义的结构体类型声明成员float eng, phy, math, poli;/ 英语、物理、数学和政治的成绩; 392.6构造类型构造类型结构体变量的初始化和引用结构体变量的初始化和引用 结构体变量的初始化的一般形式是在变量后面加上:= ;当一个结构体变量定义之后,就可引用这个变量。使用时,遵循下列规则:(1)(1)只能引用结构体变量中的成员变量,并使用下列格式:. (2)(2)若成员本身又是一个结构体变量,引用时需要用多个成员运算符一级一级地找到最低一级的成员。 (3)(3)结构类型相同的变量之间可以直接赋值,这种赋值等效于各个成员的依次赋值。例如:struct PERSO
42、N int age;/ 年龄 char name25;/ 姓名;PERSON one = 30, LiMing;PERSON another = one;n;/ 输出LiMing其中,another = one等效于:another.age = one.age;strcpy(, ); 402.6构造类型构造类型2.6.4传递结构体参数传递结构体参数 例例Ex_StructValueEx_StructValue 将结构体的值作为参数传给函数。#include struct PERSON int age; / 年龄float
43、weight;/ 体重 char name25;/ 姓名; void print(PERSON one) one.age one.weightn;PERSON all4 = 20, 60, Zhang,28, 50, Fang , 33, 78, Ding ,19, 65, Chen ;void main()for (int i=0; i4; i+)print(alli);运行结果为:Zhang 20 60Fang 28 50Ding 33 78Chen 19 65 412.7指针和引用指针和引用 2.7.1指针和指针变量指针和指针变量 程序中定义了一个变量,编译时系统会给这个变量分配内存单元,根据程序中定义的变量类型,分配一定长度的内存空间,每个内存单元中存放着变量的值。系统为每一个内存单元分配一个地址。这个“地址”称为“指针”。 指针变量(pointer)是存放内存地址的变量,一般情况下该地址是另一个变量存储在内存中的首地址,又称该指针变量“指向”这个变量。 一旦一个变量初始化后,该变量在内存中的地址也就确定下
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度年福建省高校教师资格证之高等教育法规真题练习试卷B卷附答案
- 2024年光学纤维面板系列项目资金需求报告代可行性研究报告
- 第七章 面谈课件
- “双减”背景下小学数学作业设计的策略研究实施方案范文
- 2024年适用职工劳动协议格式文件
- 2024年专业期货交易中介服务协议
- 扬州大学封志明老师预测《导游基础知识》模拟试题参考答案
- 设备设施运行维护管理方案5篇
- 2024年化工业品买卖协议
- 2024阁楼房屋销售协议模板
- 2024-2030年中国危化品行业发展趋势与投资前景展望报告
- 中国企业投资缅甸光伏发电市场机会分析及战略规划报告2024-2030年
- 2024年广东省深圳市中考历史试题
- 化工(危险化学品)企业主要负责人、安管员安全生产管理专项培训考核试卷(附参考答案)
- 2024年人教版小学三年级语文(上册)期中考卷及答案
- 《信息化项目验收工作规范》
- 2024年全国软件水平考试之高级网络规划设计师考试重点黑金模拟题(详细参考解析)
- 经济学题库(200道)
- 2024年巴西私人安保服务市场机会及渠道调研报告
- 课《闻王昌龄左迁龙标遥有此寄》跨学科公开课一等奖创新教学设计
- 2024年江苏省连云港市中考英语真题(含解析)
评论
0/150
提交评论