版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C C语言程序设计基础语言程序设计基础 数据类型数据类型 1 1基本数据类型基本数据类型 基本数据类型不可以再分解为其它类型基本数据类型不可以再分解为其它类型: :intint 整型整型; ; char char 字符型字符型; ; float float 单精度浮点型单精度浮点型; ; double double 双精度浮点型双精度浮点型。 2 2构造数据类型构造数据类型 数组数组类型类型 结构结构类型类型 联合联合类型类型 3 3指针类型指针类型 用来表示某个量在用来表示某个量在内存中的地址内存中的地址。 4 4空类型空类型 调用后不需要向调用者返回值的函数调用后不需要向调用者返回值的函数
2、为为“空类型空类型”。其类型说明符为。其类型说明符为voidvoid。 基本运算符和表达式基本运算符和表达式 1 1运算符的种类运算符的种类 丰富的运算符和表达式使丰富的运算符和表达式使C C语言功能十分完善。这也是其主要特语言功能十分完善。这也是其主要特点之一。点之一。 C C语言的运算符不仅具有不同的优先级,而且还具有结合性。在语言的运算符不仅具有不同的优先级,而且还具有结合性。在表达式中,各运算量参与运算的先后顺序不仅要遵守运算符优先级别表达式中,各运算量参与运算的先后顺序不仅要遵守运算符优先级别的规定,还要受运算符结合性的制约,以便确定是自左向右进行运算的规定,还要受运算符结合性的制约
3、,以便确定是自左向右进行运算还是自右向左进行运算。还是自右向左进行运算。C C语言的运算符可分为以下几类:语言的运算符可分为以下几类: 算术运算符算术运算符:用于各类数值运算。包括加(:用于各类数值运算。包括加(+ +)、减()、减(- -)、乘)、乘()、除()、除(/ /)、求余(或称模运算,)、求余(或称模运算,% %)、自增()、自增(+)、自减()、自减(-)共七种。共七种。 关系运算符关系运算符:用于比较运算。包括大于(:用于比较运算。包括大于( )、小于()、小于( =)、小于等于()、小于等于(=)和不等于()和不等于(!=!=)六种。)六种。 逻辑运算符逻辑运算符:用于逻辑运
4、算。包括与(:用于逻辑运算。包括与(&)、或()、或(|)、非()、非(! !)三种。三种。 位操作运算符位操作运算符:参与运算的量,按二进制位进行运算。包括位与:参与运算的量,按二进制位进行运算。包括位与(& &)、位或()、位或(| |)、位非()、位非( )、位异或()、位异或( )、左移()、左移()六种。)六种。 赋值运算符赋值运算符:用于赋值运算,分为简单赋值(:用于赋值运算,分为简单赋值(= =)、复合算术赋值)、复合算术赋值(+=+=,-=-=,* *= =,/=/=,%=%=)和复合位运算赋值()和复合位运算赋值(&=&=,|=|=,=,=,=)三类共十一种。三类共十一种。
5、条件运算符条件运算符:这是一个三目运算符,用于条件求值(:这是一个三目运算符,用于条件求值(?:?:)。)。 逗号运算符逗号运算符:用于把若干表达式组合成一个表达式(,)。:用于把若干表达式组合成一个表达式(,)。 指针运算符指针运算符:用于取内容(:用于取内容(* *)和取地址()和取地址(& &)二种运算。)二种运算。 求字节数运算符求字节数运算符:用于计算数据类型所占的字节数(:用于计算数据类型所占的字节数(sizeofsizeof)。)。 特殊运算符特殊运算符:有括号:有括号( )( ),下标,下标 ,成员,成员(,.).)等几种。等几种。2. 2. 优先级和结合性优先级和结合性 C
6、C语言中,运算符的语言中,运算符的运算优先级共分为运算优先级共分为1515级级。1 1级最高,级最高,1515级最低。在表达式中,优先级较高的先于优先级较低的级最低。在表达式中,优先级较高的先于优先级较低的进行运算。而在一个运算量两侧的运算符优先级相同时,进行运算。而在一个运算量两侧的运算符优先级相同时, 则按运算符的结合性所规定的结合方向处理。则按运算符的结合性所规定的结合方向处理。 C C语言中各语言中各运算符的结合性分为两种,即左结合性(自左至右)和右运算符的结合性分为两种,即左结合性(自左至右)和右结合性(自右至左)。例如算术运算符的结合性是自左至结合性(自右至左)。例如算术运算符的结
7、合性是自左至右,即先左后右。如表达式右,即先左后右。如表达式x-y+zx-y+z,则则y y应先与应先与“-”“-”号结合,号结合, 执行执行x-yx-y运算,然后再执行运算,然后再执行+ +z z的运算。这种自左至右的结合的运算。这种自左至右的结合方向就称为方向就称为“左结合性左结合性”。而自右至左的结合方向称为。而自右至左的结合方向称为“右结合性右结合性”。 最典型的右结合性运算符是赋值运算符。最典型的右结合性运算符是赋值运算符。如如x=y=z,x=y=z,由于由于“=”“=”的右结合性,应先执行的右结合性,应先执行y=zy=z再执行再执行x=(y=z)x=(y=z)运算。运算。 3. 3
8、. 算术运算符和算术表达式中基本的算术运算符算术运算符和算术表达式中基本的算术运算符 加法运算符加法运算符“+”“+”:加法运算符为双目运算符,即应有:加法运算符为双目运算符,即应有两个量参与加法运算。如两个量参与加法运算。如a+b,4+8a+b,4+8等。具有右结合性。等。具有右结合性。 减法运算符减法运算符“-”“-”:减法运算符为双目运算符。但:减法运算符为双目运算符。但“-”“-”也可作负值运算符,此时为单目运算,如也可作负值运算符,此时为单目运算,如- -x x,-5-5等具有左结等具有左结合性。合性。 乘法运算符乘法运算符“* *”:双目运算,具有左结合性。:双目运算,具有左结合性
9、。 除法运算符除法运算符“/”“/”:双目运算具有左结合性。参与运算:双目运算具有左结合性。参与运算量均为整型时,结果也为整型,舍去小数。如果运算量中有量均为整型时,结果也为整型,舍去小数。如果运算量中有一个是实型,则结果为双精度实型。一个是实型,则结果为双精度实型。 求余运算符(模运算符)求余运算符(模运算符)“%”“%”:双目运算,具有左结:双目运算,具有左结合性。要求参与运算的量均为整型。合性。要求参与运算的量均为整型。 求余运算的结果等于求余运算的结果等于两数相除后的余数。两数相除后的余数。 4. 4. 自增,自减运算符自增,自减运算符 自增自增1 1运算符记为运算符记为“+”“+”,
10、其功能是使变量的值自增,其功能是使变量的值自增1 1。自减自减1 1运算符记为运算符记为“-”“-”,其功能是使变量值自减,其功能是使变量值自减1 1。自增。自增1 1,自减,自减1 1运算符均为单目运算,都具有右结合性。可有以运算符均为单目运算,都具有右结合性。可有以下几种形式:下几种形式: +i i:i i自增自增1 1后再参与其它运算。后再参与其它运算。 - -i i:i i自减自减1 1后再参与其它运算。后再参与其它运算。 i i+:i i参与运算后,参与运算后,i i的值再自增的值再自增1 1。 i- i-:i i参与运算后,参与运算后,i i的值再自减的值再自减1 1。5. 5.
11、算术表达式算术表达式 算术表达式是由算术运算符和括号连接起来的算术表达式是由算术运算符和括号连接起来的式子,以下是算术表达式的例子:式子,以下是算术表达式的例子: a+b a+b,(a(a* *2)2)c c,(x+r)(x+r)* *8-(a+b)8-(a+b)7 7,+i+i,sin(x)+sin(y)sin(x)+sin(y),(+i)-(j+)+(k-)(+i)-(j+)+(k-)。 6. 6. 赋值运算符和赋值表达式赋值运算符和赋值表达式 简单赋值运算符和表达式,简单赋值运算符记为简单赋值运算符和表达式,简单赋值运算符记为“=”“=”。由。由“= ”“= ”连接的式子称为赋值表达式。
12、其一般形式为:变量连接的式子称为赋值表达式。其一般形式为:变量= =表达式。表达式。例如:例如: x=a+b x=a+b w=sin(a)+sin(b) w=sin(a)+sin(b) 如果赋值运算符两边的数据类型不相同,系统将自动进行类型如果赋值运算符两边的数据类型不相同,系统将自动进行类型转换,即把赋值号右边的类型换成左边的类型。具体规定如下:转换,即把赋值号右边的类型换成左边的类型。具体规定如下: 实型赋予整型,舍去小数部分。整型赋予实型,数值不变,但实型赋予整型,舍去小数部分。整型赋予实型,数值不变,但将以浮点形式存放,即增加小数部分将以浮点形式存放,即增加小数部分( (小数部分的值为
13、小数部分的值为0)0)。 字符型赋予整型,由于字符型为一个字节,而整型为二个字节,字符型赋予整型,由于字符型为一个字节,而整型为二个字节,故将字符的故将字符的ASCIIASCII码值放到整型量的低八位中,高八位为码值放到整型量的低八位中,高八位为0 0。 整型赋予字符型,仅把低八位赋予字符量。整型赋予字符型,仅把低八位赋予字符量。7. 7. 复合赋值符及表达式复合赋值符及表达式 在赋值符在赋值符“=”“=”之前加上其它二目运算符可构成之前加上其它二目运算符可构成复合复合赋值符赋值符。如:。如: += +=,-=-=,* *= =,= =,%=%=,=,&=&=,=,|=|= 构成复合赋值表达式
14、的一般形式为:构成复合赋值表达式的一般形式为: 变量变量 双目运算符双目运算符= =表达式表达式 它等效于:它等效于: 变量变量= =变量变量 运算符运算符 表达式表达式 例如:例如:a+=5a+=5等价于等价于a=a+5a=a+5,x x* *=y+7=y+7等价于等价于x=xx=x* *(y+7)(y+7),r%=p r%=p 等价于等价于r=r%pr=r%p等。复合赋值符这种写法,对初学者等。复合赋值符这种写法,对初学者可能不习惯,可能不习惯, 但十分有利于编译处理,能提高编译效率但十分有利于编译处理,能提高编译效率并产生质量较高的目标代码。并产生质量较高的目标代码。8. 8. 逗号运算
15、符逗号运算符 C C语言中逗号语言中逗号“,”也是一种运算符,称为逗号运也是一种运算符,称为逗号运算符。其功能是把两个表达式连接起来组成一个表达式,算符。其功能是把两个表达式连接起来组成一个表达式,称为逗号表达式。其一般形式为:称为逗号表达式。其一般形式为: 表达式表达式1 1,表达式,表达式2 2; 其求值过程是分别求两个表达式的值,并以表达式其求值过程是分别求两个表达式的值,并以表达式2 2的值作为整个逗号表达式的值。的值作为整个逗号表达式的值。 C C语言程序设计语言程序设计 从程序流程的角度来看,程序可以分为三种基从程序流程的角度来看,程序可以分为三种基本结构,即:本结构,即: 顺序结
16、构顺序结构 分支结构分支结构 循环结构循环结构 这三种基本结构可以组成所有的各种复杂程序。这三种基本结构可以组成所有的各种复杂程序。语言提供了多种语句来实现这些结构。语言提供了多种语句来实现这些结构。1. 1. 分支结构程序分支结构程序 (1 1)ifif语句语句 用用ifif语句可以构成分支结构。它根据给定的条件进行判断,语句可以构成分支结构。它根据给定的条件进行判断,以决定执行某个分支程序段。以决定执行某个分支程序段。C C语言的语言的ifif语句有三种基本形式。语句有三种基本形式。 第一种形式为基本形式:第一种形式为基本形式: if (if (表达式表达式) ) 语句语句 其语义是:如果
17、表达式的值为真,则执行其后的语句,否则其语义是:如果表达式的值为真,则执行其后的语句,否则不执行该语句。不执行该语句。 第二种形式为:第二种形式为:if-elseif-else if(if(表达式表达式) ) 语句语句1 1; else else 语句语句2 2; 其语义是:如果表达式的值为真,则执行语句其语义是:如果表达式的值为真,则执行语句1 1,否则执行,否则执行语句语句2 2 。 第三种形式为:第三种形式为:if-else-ifif-else-if 前二种形式的前二种形式的ifif语句一般都用于两个分支的情况。当有多个分支选择语句一般都用于两个分支的情况。当有多个分支选择时,可采用时,
18、可采用if-else-ifif-else-if语句,其一般形式为:语句,其一般形式为: if( if(表达式表达式) ) 语句语句1 1; else if( else if(表达式表达式2)2) 语句语句2 2; else if( else if(表达式表达式3)3) 语句语句3 3; else if( else if(表达式表达式m)m) 语句语句m m; else else 语句语句n n; 其语义是:依次判断表达式的值,当出现某个值为真时,则执行其对其语义是:依次判断表达式的值,当出现某个值为真时,则执行其对应的语句。然后跳到整个应的语句。然后跳到整个ifif语句之外继续执行程序。如果所
19、有的表达式均为语句之外继续执行程序。如果所有的表达式均为假,则执行语句假,则执行语句n n。然后继续执行后续程序。然后继续执行后续程序。(2 2)switchswitch语句语句 C C语言还提供了另一种用于多分支选择的语言还提供了另一种用于多分支选择的switchswitch语句,其一般语句,其一般形式为:形式为: switch(switch(表达式表达式) ) case case常量表达式常量表达式1: 1: 语句体语句体1;1; case case常量表达式常量表达式2: 2: 语句体语句体2;2; case case常量表达式常量表达式n: n: 语句体语句体n;n; default:
20、 default: 语句体语句体n+1;n+1; 其语义是:计算表达式的值,并逐个与其后的常量表达式值其语义是:计算表达式的值,并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时,即执行其相比较,当表达式的值与某个常量表达式的值相等时,即执行其后的语句体。一般语句体中包含后的语句体。一般语句体中包含breakbreak语句,所以执行完语句体后,语句,所以执行完语句体后,不再进行判断其他的不再进行判断其他的casecase语句,直接执行语句,直接执行switchswitch语句后面的程序。语句后面的程序。如表达式的值与所有如表达式的值与所有casecase后的常量表达式均不
21、相同时,则执行后的常量表达式均不相同时,则执行defaultdefault后的语句体。后的语句体。 2. 2. 循环结构程序循环结构程序 循环结构是程序中一种很重要的结构。其特点是,循环结构是程序中一种很重要的结构。其特点是,在给定条件成立时,反复执行某程序段,直到条件不成在给定条件成立时,反复执行某程序段,直到条件不成立为止。给定的条件称为循环条件,反复执行的程序段立为止。给定的条件称为循环条件,反复执行的程序段称为循环体。语言提供了多种循环语句,可以组成各称为循环体。语言提供了多种循环语句,可以组成各种不同形式的循环结构。种不同形式的循环结构。 (1 1)whilewhile语句语句 wh
22、ile while语句的一般形式为:语句的一般形式为: while(while(表达式表达式) ) 语句;语句; 其中表达式是循环条件,语句为循环体。其中表达式是循环条件,语句为循环体。 while while语句的语义是:计算表达式的值,当值为真语句的语义是:计算表达式的值,当值为真(非(非0 0)时,)时, 执行循环体语句。执行循环体语句。 (2)2)dodowhilewhile语句语句 do-while do-while语句的一般形式为:语句的一般形式为: dodo 语句;语句; while( while(表达式表达式) ); 其中语句是循环体,表达式是循环条件。其中语句是循环体,表达式
23、是循环条件。 do-while do-while语句的语义是:先执行循环体语句一次,再判别表语句的语义是:先执行循环体语句一次,再判别表达式的值,若为真(非达式的值,若为真(非0 0)则继续循环,否则终止循环。)则继续循环,否则终止循环。 do-while do-while语句和语句和whilewhile语句的区别在于语句的区别在于do-whiledo-while是先执行后判是先执行后判断,因此断,因此do-whiledo-while至少要执行一次循环体。而至少要执行一次循环体。而whilewhile是先判断后执是先判断后执行,如果条件不满足,则一次循环体语句也不执行。行,如果条件不满足,则一
24、次循环体语句也不执行。whilewhile语句和语句和do-whiledo-while语句一般都可以相互改写。语句一般都可以相互改写。(3) 3) forfor语句语句 for for语句是语句是C C语言所提供的功能更强,使用更广泛的一种循环语句。其一般语言所提供的功能更强,使用更广泛的一种循环语句。其一般形式为:形式为: for(for(表达式表达式1 1;表达式;表达式2 2;表达;表达3)3) 语句;语句; 其中,表达式其中,表达式1 1通常用来给循环变量赋初值,一般是赋值表达式。也允许在通常用来给循环变量赋初值,一般是赋值表达式。也允许在forfor语句外给循环变量赋初值,此时可以省
25、略该表达式。语句外给循环变量赋初值,此时可以省略该表达式。 表达式表达式2 2通常是循环条件,一般为关系表达式或逻辑表达式。通常是循环条件,一般为关系表达式或逻辑表达式。 表达式表达式3 3通常可用来修改循环变量的值,一般是赋值语句。通常可用来修改循环变量的值,一般是赋值语句。 这三个表达式都可以是逗号表达式,这三个表达式都可以是逗号表达式, 即每个表达式都可由多个表达式组成。即每个表达式都可由多个表达式组成。三个表达式都是任选项,都可以省略。三个表达式都是任选项,都可以省略。 一般形式中的一般形式中的“语句语句”即为循环体语句。即为循环体语句。forfor语句的语义是:语句的语义是: 1.
26、1.首先计算表达式首先计算表达式1 1的值。的值。 2. 2.再计算表达式再计算表达式2 2的值,若值为真(非的值,若值为真(非0 0)则执行循环体一次,否则跳出循环。)则执行循环体一次,否则跳出循环。 3. 3.然后再计算表达式然后再计算表达式3 3的值,转回第的值,转回第2 2步重复执行。在整个步重复执行。在整个forfor循环过程中,循环过程中,表达式表达式1 1只计算一次,表达式只计算一次,表达式2 2和表达式和表达式3 3则可能计算多次。循环体可能多次执行,则可能计算多次。循环体可能多次执行,也可能一次都不执行。也可能一次都不执行。3. 3. 转移语句转移语句 程序中的语句通常总是按
27、顺序方向,或按语句功能程序中的语句通常总是按顺序方向,或按语句功能所定义的方向执行的。如果需要改变程序的正常流向,所定义的方向执行的。如果需要改变程序的正常流向,可以使用转移语句。在语言中提供了可以使用转移语句。在语言中提供了4 4种转移语句:种转移语句: goto,break,continuegoto,break,continue和和returnreturn。 其中的其中的returnreturn语句只能出现在被调函数中,用于返语句只能出现在被调函数中,用于返回主调函数。回主调函数。 (1 1)gotogoto语句语句 gotogoto语句也称为无条件转移语句,其一般格式如下:语句也称为无条
28、件转移语句,其一般格式如下: gotogoto 语句标号;语句标号; 其中语句标号是按标识符规定书写的符号,放在某一语句行的前面,其中语句标号是按标识符规定书写的符号,放在某一语句行的前面,标号后加冒号标号后加冒号( (:) )。语句标号起标识语句的作用,与。语句标号起标识语句的作用,与gotogoto语句配合使用。语句配合使用。 (2 2)breakbreak语句语句 break break语句只能用在语句只能用在switch switch 语句或循环语句中,其作用是跳出语句或循环语句中,其作用是跳出switchswitch语句或跳出本层循环,转去执行后面的程序。由于语句或跳出本层循环,转去
29、执行后面的程序。由于breakbreak语句的转移方向是语句的转移方向是明确的,所以不需要语句标号与之配合。明确的,所以不需要语句标号与之配合。breakbreak语句的一般形式为:语句的一般形式为: break break; 使用使用breakbreak语句可以使循环语句有多个出口,在一些场合下使编程更加语句可以使循环语句有多个出口,在一些场合下使编程更加灵活、方便。灵活、方便。 (3 3)continuecontinue语句语句 continue continue语句只能用在循环体中,其一般格式是:语句只能用在循环体中,其一般格式是: continue continue; 其语义是:结束本
30、次循环,即不再执行循环体中其语义是:结束本次循环,即不再执行循环体中continue continue 语句之后的语句之后的语句,转入下一次循环条件的判断与执行。应注意的是,本语句只结束本语句,转入下一次循环条件的判断与执行。应注意的是,本语句只结束本层本次的循环,并不跳出循环。层本次的循环,并不跳出循环。函数函数 C C语言程序是由函数组成的。函数是源程序的基本语言程序是由函数组成的。函数是源程序的基本模块,通过对函数模块的调用实现特定的功能。模块,通过对函数模块的调用实现特定的功能。语言语言中的函数相当于其它高级语言的子程序。语言不仅提中的函数相当于其它高级语言的子程序。语言不仅提供了极为
31、丰富的库函数,还允许用户建立自己定义的函供了极为丰富的库函数,还允许用户建立自己定义的函数。用户可把自己的算法编成一个个相对独立的函数模数。用户可把自己的算法编成一个个相对独立的函数模块,然后用调用的方法来使用函数。可以说程序的全块,然后用调用的方法来使用函数。可以说程序的全部工作都是由各式各样的函数完成的,所以也把语言部工作都是由各式各样的函数完成的,所以也把语言称为函数式语言。由于采用了函数模块式的结构,语称为函数式语言。由于采用了函数模块式的结构,语言易于实现结构化程序设计。使程序的层次结构清晰,言易于实现结构化程序设计。使程序的层次结构清晰,便于程序的编写、阅读、调试。便于程序的编写、
32、阅读、调试。1 1函数定义的一般形式函数定义的一般形式 (1 1)无参函数的一般形式)无参函数的一般形式 类型说明符类型说明符 函数名函数名()() 类型说明;类型说明; 语句;语句; 其中类型说明符和函数名称为函数头。类型说明符指明了本其中类型说明符和函数名称为函数头。类型说明符指明了本函数的类型,函数的类型实际上是函数返回值的类型。函数名是函数的类型,函数的类型实际上是函数返回值的类型。函数名是由用户定义的标识符,函数名后有一个空括号,其中无参数,但由用户定义的标识符,函数名后有一个空括号,其中无参数,但括号不可少。括号不可少。 中的内容称为函数体。在函数体中也有类型说明,中的内容称为函数
33、体。在函数体中也有类型说明,这是对函数体内部所用到的变量的类型说明。在很多情况下都不这是对函数体内部所用到的变量的类型说明。在很多情况下都不要求无参函数有返回值,此时函数类型符可以写为要求无参函数有返回值,此时函数类型符可以写为voidvoid。(2 2)有参函数的一般形式)有参函数的一般形式 类型说明符类型说明符 函数名函数名( (形式参数类型说明表形式参数类型说明表) ) 类型说明;类型说明; 语句;语句; 有参函数比无参函数多了两个内容,其一是形式参数表,其二有参函数比无参函数多了两个内容,其一是形式参数表,其二是形式参数类型说明。在形参表中给出的参数称为形式参数,它们是形式参数类型说明
34、。在形参表中给出的参数称为形式参数,它们可以是各种类型的变量,各参数之间用逗号间隔。在进行函数调用可以是各种类型的变量,各参数之间用逗号间隔。在进行函数调用时,主调函数将赋予这些形式参数实际的值。形参既然是变量,当时,主调函数将赋予这些形式参数实际的值。形参既然是变量,当然必须给以类型说明。然必须给以类型说明。 在程序中是通过对函数的调用来执行函数体的,其过程与其它在程序中是通过对函数的调用来执行函数体的,其过程与其它语言的子程序调用相似。语言中,函数调用的一般形式为:语言的子程序调用相似。语言中,函数调用的一般形式为: 函数名函数名( (实际参数表实际参数表) ); 对无参函数调用时则无实际
35、参数表。实际参数表中的参数可以对无参函数调用时则无实际参数表。实际参数表中的参数可以是常数,变量或其它构造类型数据及表达式。各实参之间用逗号分是常数,变量或其它构造类型数据及表达式。各实参之间用逗号分隔。隔。 2. 2. 函数的参数和函数的值函数的参数和函数的值 (1 1)函数的参数)函数的参数 函数的参数分为形参和实参两种。形参出现在函数函数的参数分为形参和实参两种。形参出现在函数定义中,在整个函数体内都可以使用,离开该函数则不定义中,在整个函数体内都可以使用,离开该函数则不能使用。实参出现在主调函数中,进入被调函数后,实能使用。实参出现在主调函数中,进入被调函数后,实参变量也不能使用。参变
36、量也不能使用。形参和实参的功能是作数据传送。形参和实参的功能是作数据传送。发生函数调用时,主调函数把实参的值传送给被调函数发生函数调用时,主调函数把实参的值传送给被调函数的形参从而实现主调函数向被调函数的数据传送。的形参从而实现主调函数向被调函数的数据传送。(2 2)函数的值)函数的值 函数的值是指函数被调用之后,执行函数体中的程序段所取得的并函数的值是指函数被调用之后,执行函数体中的程序段所取得的并返回给主调函数的值返回给主调函数的值。对函数的值(或称函数返回值)有以下一些说明:。对函数的值(或称函数返回值)有以下一些说明: a. a. 函数的值只能通过函数的值只能通过returnretur
37、n语句返回主调函数。语句返回主调函数。 return return 语句的一般形式为:语句的一般形式为: return return 表达式;表达式; 或者为:或者为: return ( return (表达式表达式) ); 该语句的功能是计算表达式的值,并返回给主调函数。在函数中允该语句的功能是计算表达式的值,并返回给主调函数。在函数中允许有多个许有多个returnreturn语句,但每次调用只能有一个语句,但每次调用只能有一个return return 语句被执行,因语句被执行,因此只能返回一个函数值。此只能返回一个函数值。 b. b. 函数值的类型和函数定义中函数的类型应保持一致。如果两
38、者不函数值的类型和函数定义中函数的类型应保持一致。如果两者不一致,则以函数类型为准,自动进行类型转换。一致,则以函数类型为准,自动进行类型转换。 c. c. 如函数值为整型,在函数定义时可以省去类型说明。如函数值为整型,在函数定义时可以省去类型说明。 d. d. 不返回函数值的函数,可以明确定义为不返回函数值的函数,可以明确定义为“空类型空类型”,类型说明符,类型说明符为为“void”void”。 3. 3. 函数的嵌套调用函数的嵌套调用 语言中不允许作嵌套的函数定义。因此各函数之间是平行的,语言中不允许作嵌套的函数定义。因此各函数之间是平行的,不存在上一级函数和下一级函数的问题。但是不存在上
39、一级函数和下一级函数的问题。但是语言允许在一个函数语言允许在一个函数的定义中出现对另一个函数的调用的定义中出现对另一个函数的调用。这样就出现了函数的嵌套调用。这样就出现了函数的嵌套调用。即在被调函数中又调用其它函数。即在被调函数中又调用其它函数。 4. 4. 函数的递归调用函数的递归调用 一个函数在它的函数体内调用它自身称为递归调用一个函数在它的函数体内调用它自身称为递归调用。这种函数称。这种函数称为递归函数。语言允许函数的递归调用。在递归调用中,主调函数为递归函数。语言允许函数的递归调用。在递归调用中,主调函数又是被调函数。执行递归函数将反复调用其自身。每调用一次就进入又是被调函数。执行递归
40、函数将反复调用其自身。每调用一次就进入新的一层。新的一层。5. 5. 变量的作用域变量的作用域 在讨论函数的形参变量时曾经提到,形参变量只在被调用期间才在讨论函数的形参变量时曾经提到,形参变量只在被调用期间才分配内存单元,调用结束立即释放。这一点表明形参变量只有在函数分配内存单元,调用结束立即释放。这一点表明形参变量只有在函数内才是有效的,离开该函数就不能再使用了。这种变量有效性的范围内才是有效的,离开该函数就不能再使用了。这种变量有效性的范围称变量的作用域。不仅对于形参变量,语言中所有的量都有自己的称变量的作用域。不仅对于形参变量,语言中所有的量都有自己的作用域。变量说明的方式不同,其作用域
41、也不同。语言中的变量,作用域。变量说明的方式不同,其作用域也不同。语言中的变量,按作用域范围可分为两种,按作用域范围可分为两种, 即局部变量和全局变量。即局部变量和全局变量。指针指针 指针是语言中广泛使用的一种数据类型。运用指针编程是语指针是语言中广泛使用的一种数据类型。运用指针编程是语言最主要的风格之一。利用指针变量可以表示各种数据结构;能很方言最主要的风格之一。利用指针变量可以表示各种数据结构;能很方便地使用数组和字符串;并能象汇编语言一样处理内存地址,从而编便地使用数组和字符串;并能象汇编语言一样处理内存地址,从而编出精练而高效的程序。指针极大地丰富了语言的功能。学习指针是出精练而高效的
42、程序。指针极大地丰富了语言的功能。学习指针是学习语言中最重要的一环,能否正确理解和使用指针是我们是否掌学习语言中最重要的一环,能否正确理解和使用指针是我们是否掌握语言的一个标志。握语言的一个标志。 既然既然指针变量的值是一个地址指针变量的值是一个地址,那么,那么这个地址不仅可以是变量的这个地址不仅可以是变量的地址,也可以是其它数据结构的地址地址,也可以是其它数据结构的地址。在一个指针变量中存放一个数。在一个指针变量中存放一个数组或一个函数的首地址有何意义呢?因为数组或函数都是连续存放的。组或一个函数的首地址有何意义呢?因为数组或函数都是连续存放的。通过访问指针变量取得了数组或函数的首地址,也就
43、找到了该数组或通过访问指针变量取得了数组或函数的首地址,也就找到了该数组或函数。这样一来,凡是出现数组、函数的地方都可以用一个指针变量函数。这样一来,凡是出现数组、函数的地方都可以用一个指针变量来表示,只要该指针变量中赋予数组或函数的首地址即可。这样做,来表示,只要该指针变量中赋予数组或函数的首地址即可。这样做,将会使程序的概念十分清楚,程序本身也精练、高效。在语言中,将会使程序的概念十分清楚,程序本身也精练、高效。在语言中,一种数据类型或数据结构往往都占有一组连续的内存单元。用一种数据类型或数据结构往往都占有一组连续的内存单元。用“地址地址”这个概念并不能很好地描述一种数据类型或数据结构,而
44、这个概念并不能很好地描述一种数据类型或数据结构,而“指针指针”虽虽然实际上也是一个地址,但它却是一个数据结构的首地址,它是然实际上也是一个地址,但它却是一个数据结构的首地址,它是“指指向向”一个数据结构的,因而概念更为清楚,表示更为明确。这也是引一个数据结构的,因而概念更为清楚,表示更为明确。这也是引入入“指针指针”概念的一个重要原因。概念的一个重要原因。 在在C C语言中规定,一个函数总是占用一段连续的内存语言中规定,一个函数总是占用一段连续的内存区,而函数名就是该函数所占内存区的首地址。我们可区,而函数名就是该函数所占内存区的首地址。我们可以把函数的这个首地址(或称入口地址)赋予一个指针以
45、把函数的这个首地址(或称入口地址)赋予一个指针变量,使该指针变量指向该函数。然后通过指针变量就变量,使该指针变量指向该函数。然后通过指针变量就可以找到并调用这个函数。我们把这种指向函数的指针可以找到并调用这个函数。我们把这种指向函数的指针变量称为变量称为“函数指针变量函数指针变量”。 函数指针变量函数指针变量定义的一般形式为:定义的一般形式为: 类型说明符类型说明符 ( (* *指针变量名指针变量名)();)(); 其中其中“类型说明符类型说明符”表示被指函数的返回值的类型。表示被指函数的返回值的类型。“(“(* * 指针变量名指针变量名)”)”表示表示“* *”后面的变量是定义的指针后面的变
46、量是定义的指针变量。最后的空括号表示指针变量所指的是一个函数。变量。最后的空括号表示指针变量所指的是一个函数。例如:例如:intint ( (* *pf)();pf)();表示表示pfpf是一个指向函数入口的指针是一个指向函数入口的指针变量,该函数的返回值变量,该函数的返回值( (函数值函数值) )是整型是整型。结构与联合结构与联合 1. 1. 结构类型定义和结构变量说明结构类型定义和结构变量说明 在实际问题中,一组数据往往具有不同的数据类型。例如,在实际问题中,一组数据往往具有不同的数据类型。例如, 在在学生登记表中,姓名应为字符型;学号可为整型或字符型;年龄应为学生登记表中,姓名应为字符型
47、;学号可为整型或字符型;年龄应为整型;性别应为字符型;成绩可为整型或实型。显然不能用一个数组整型;性别应为字符型;成绩可为整型或实型。显然不能用一个数组来存放这一组数据。因为数组中各元素的类型和长度都必须一致,以来存放这一组数据。因为数组中各元素的类型和长度都必须一致,以便于编译系统处理。为了解决这个问题,语言中给出了另一种构造便于编译系统处理。为了解决这个问题,语言中给出了另一种构造数据类型数据类型“结构结构”。 它相当于其它高级语言中的记录。它相当于其它高级语言中的记录。 “ “结构结构”是一种构造类型,它是由若干是一种构造类型,它是由若干“成员成员”组成的。每一个组成的。每一个成员可以是
48、一个基本数据类型或者又是一个构造类型。结构既是一种成员可以是一个基本数据类型或者又是一个构造类型。结构既是一种“构造构造”而成的数据类型,那么在说明和使用之前必须先定义它,也而成的数据类型,那么在说明和使用之前必须先定义它,也就是构造它。如同在说明和调用函数之前要先定义函数一样。就是构造它。如同在说明和调用函数之前要先定义函数一样。 (1 1)结构的定义)结构的定义 定义一个结构的一般形式为:定义一个结构的一般形式为: structstruct 结构名结构名 成员表列;成员表列; ; ; 成员表由若干个成员组成,每个成员都是该结构成员表由若干个成员组成,每个成员都是该结构的一个组成部分。对每个
49、成员也必须作类型说明,其的一个组成部分。对每个成员也必须作类型说明,其形式为:形式为: 类型说明符类型说明符 成员名成员名; ; 成员名的命名应符合标识符的书写规定。成员名的命名应符合标识符的书写规定。例如:例如: structstruct student student intint num; num; char name20; char name20; char sex; char sex; float score; float score; ; ; 在这个结构定义中,结构名为在这个结构定义中,结构名为studentstudent,该结构由该结构由4 4个成员组成。个成员组成。第一个成员为
50、第一个成员为numnum,整型变量;第二个成员为整型变量;第二个成员为namename,字符数组;第三字符数组;第三个成员为个成员为sexsex,字符变量;第四个成员为字符变量;第四个成员为scorescore,实型变量。应注意在实型变量。应注意在括号后的分号是不可少的。结构定义之后,即可进行变量说明。凡说括号后的分号是不可少的。结构定义之后,即可进行变量说明。凡说明为结构明为结构studentstudent的变量都由上述的变量都由上述4 4个成员组成。由此可见,结构是一个成员组成。由此可见,结构是一种复杂的数据类型,是数目固定,类型不同的若干有序变量的集合。种复杂的数据类型,是数目固定,类型
51、不同的若干有序变量的集合。(2 2)结构类型变量的说明)结构类型变量的说明 说明结构变量有以下三种方法。以上面定义的说明结构变量有以下三种方法。以上面定义的studentstudent为例来加以说明。为例来加以说明。a.a.先定义结构,再说明结构变量。先定义结构,再说明结构变量。 如:如: structstruct student student intint num; num; char name20; char name20; char sex; char sex; float score; float score; ; ;structstruct student boy1,boy2; s
52、tudent boy1,boy2; 说明了两个变量说明了两个变量boy1boy1和和boy2boy2为为studentstudent结构类型。结构类型。也可以用宏定义使一个符号常量来表示一个结构类型,例如:也可以用宏定义使一个符号常量来表示一个结构类型,例如: # #define STU define STU structstruct student student STU STU intint num; num; char name20; char name20; char sex; char sex; float score; float score; ; ; STU boy1,boy2;
53、 STU boy1,boy2;b. b. 在定义结构类型的同时说明结构变量。在定义结构类型的同时说明结构变量。 例如:例如: structstruct student student intint num; num; char name20; char name20; char sex; char sex; float score; float score; boy1,boy2; boy1,boy2;c. c. 直接说明结构变量。直接说明结构变量。 例如:例如: structstruct intint num; num; char name20; char name20; char sex;
54、char sex; float score; float score; boy1,boy2; boy1,boy2; 表示结构变量成员的一般形式是:表示结构变量成员的一般形式是: 结构变量名结构变量名. .成员名成员名 例如:例如:boy1.num boy1.num 即第一个人的学号;即第一个人的学号;boy2.sex boy2.sex 即第二个人的即第二个人的性别。如果成员本身又是一个结构则必须逐级找到最低级的成员才性别。如果成员本身又是一个结构则必须逐级找到最低级的成员才能使用。例如:能使用。例如:boy1.birthday.month boy1.birthday.month 即第一个人出生
55、的月份成员即第一个人出生的月份成员可以在程序中单独使用,与普通变量完全相同。可以在程序中单独使用,与普通变量完全相同。(3 3)结构变量的赋值)结构变量的赋值 前面已经介绍,结构变量的赋值就是给各成员赋值。前面已经介绍,结构变量的赋值就是给各成员赋值。可用输入语句或赋值语句来完成。可用输入语句或赋值语句来完成。(4 4)结构变量的初始化)结构变量的初始化 如果结构变量是全局变量或为静态变量,则可对它如果结构变量是全局变量或为静态变量,则可对它作初始化赋值。对局部或自动结构变量不能作初始化赋作初始化赋值。对局部或自动结构变量不能作初始化赋值。值。2. 2. 联合联合 “联合联合”与与“结构结构”
56、有一些相似之处。但两者有本质有一些相似之处。但两者有本质上的不同。在结构中各成员有各自的内存空间,上的不同。在结构中各成员有各自的内存空间,一个结构一个结构变量的总长度是各成员长度之和变量的总长度是各成员长度之和。而。而在在“联合联合”中,各成中,各成员共享一段内存空间,一个联合变量的长度等于各成员中员共享一段内存空间,一个联合变量的长度等于各成员中最长的长度最长的长度。应该说明的是,这里所谓的共享不是指把多。应该说明的是,这里所谓的共享不是指把多个成员同时装入一个联合变量内,而是指该联合变量可被个成员同时装入一个联合变量内,而是指该联合变量可被赋予任一成员值,但每次只能赋一种值,赋入新值则冲
57、去赋予任一成员值,但每次只能赋一种值,赋入新值则冲去旧值。如前面介绍的旧值。如前面介绍的“单位单位”变量,如定义为一个可装入变量,如定义为一个可装入“班级班级”或或“教研室教研室”的联合后,就允许赋予整型值(班的联合后,就允许赋予整型值(班级)或字符串(教研室)。要么赋予整型值,要么赋予字级)或字符串(教研室)。要么赋予整型值,要么赋予字符串,不能把两者同时赋予它。联合类型的定义和联合变符串,不能把两者同时赋予它。联合类型的定义和联合变量的说明一个联合类型必须经过定义之后,才能把变量说量的说明一个联合类型必须经过定义之后,才能把变量说明为该联合类型。明为该联合类型。(1 1)联合的定义)联合的
58、定义 定义一个联合类型的一般形式为:定义一个联合类型的一般形式为: union union 联合名联合名 成员表;成员表; ; ; 成员表中含有若干成员,成员的一般形式为:成员表中含有若干成员,成员的一般形式为: 类型说明符类型说明符 成员名。成员成员名。成员名的命名应符合标识符的规定。例如:名的命名应符合标识符的规定。例如: union union perdataperdata intint class; class; char office10; char office10; ; ; 定义了一个名为定义了一个名为perdataperdata的联合类型,它含有两个成员,一个为整型,成员的联合
59、类型,它含有两个成员,一个为整型,成员名为名为classclass;另一个为字符数组,数组名为另一个为字符数组,数组名为officeoffice。联合定义之后,即可进行联联合定义之后,即可进行联合变量说明,被说明为合变量说明,被说明为perdataperdata类型的变量,可以存放整型量类型的变量,可以存放整型量classclass或存放字符或存放字符数组数组officeoffice。(2 2)联合变量的说明)联合变量的说明 联合变量的说明和结构变量的说明方式相同,也有三种形式。即先定义,联合变量的说明和结构变量的说明方式相同,也有三种形式。即先定义,再说明;定义同时说明和直接说明。以再说明;
60、定义同时说明和直接说明。以perdataperdata类型为例,说明如下:类型为例,说明如下: union union perdataperdata intint class; class; char officae10; char officae10; ; ; union union perdataperdata a,b; / a,b; /* *说明说明a,ba,b为为perdataperdata类型类型* */ / 或者可同时说明为:或者可同时说明为: union union perdataperdata intint class; class; char office10; char o
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 幼儿园安全制度
- 工地生活制度
- 小区监察人制度
- 实验室试剂取用登记制度
- 保健室奖惩制度细则范本
- 修剪大树奖惩制度范本
- 公司如何至尊奖惩制度
- 公司行政人事奖惩制度
- 兼职义务消防队奖惩制度
- 农贸市场考核奖惩制度
- 2026年露天矿山复工复产试卷
- 2026广东广州市中级人民法院招募就业见习人员25人考试参考题库及答案解析
- 2026年扎兰屯职业学院单招职业技能考试题库含答案解析
- 2026年江西旅游商贸职业学院单招职业适应性测试题库含答案解析
- 2026吉林农业大学三江实验室办公室招聘工作人员考试参考题库及答案解析
- 2023年12月英语四级真题及答案-第3套
- 2026年内蒙古商贸职业学院单招职业技能测试题库带答案详解(考试直接用)
- 高职高专学生心理健康教育 第四版 课件 第第五讲 相伴适应路
- 心血管疾病健康知识科普
- 农副产品营销培训课件
- 装饰工程施工质量方案
评论
0/150
提交评论