《2022年C语言程序设计课件版.docx》由会员分享,可在线阅读,更多相关《2022年C语言程序设计课件版.docx(53页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、2022年C语言程序设计课件版程序设计语言一般分为机器语言、汇编语言和高级语言三大类。1 1 机器语言 对于计算机来说,一组机器指令就是程序,称为机器语言程序。2 2 汇编语言 为了便于理解与记忆,人们采纳能帮助记忆的英文缩写符号(称为指令助记符)来代替机器语言指令代码中的操作码,用地址符号来代替地址码。3 3 高级语言 机器语言和汇编语言都是面对机器的语言,一般称为低级语言。 例 例 2.1编写一个 C C 程序,其功能是显示字符串 ‚How do you do! 。其 其 C C 程序如下:#include s tdio.h main() printf(How do you d
2、o! n) ; 下面针对一般的 C C 程序作几点说明:(1 1的 )一个完整的 C C 语言程序可以由多个函数组成,但必需包含一个且只能包含一个名为n main 的函数(主函数)。程序总是从 n main 函数起先执行。(2 2 )在一个 C C 函数模块中,由左右花括号 括起来的部分是函数体,其中的语句系列实现函数的预定功能。(3 3 )C C 程序中的每一个语句必需以 ‚ ; 结束,但书写格式是自由的。(4 4 )e #include 是编译预处理吩咐,其作用是将双引号或尖括号括起来的 文件内容读到该吩咐的位置处。(5 5 )在 C C 程序的任何位置处都可以用 /* . *
3、/ 作注释,以提高程序的可读性。2.2.1整型常量及其变量的定义 1 1 整型常量 在 在 C C 语言中,有 3 3 。种类型的整型常量:基本整型常量、长整型常量、无符号整型常量。在 C C 语言中,不管是哪种类型的整型常量,都可以用 3 3 种数制表示。 (1 1 )十进制整型常量。 (2 2 )十六进制整型常量。 (3 3 )八进制整型常量。 2 2 整型变量的定义 在 在 C C 程序中,用于存放整型数据的变量称 为整型变量。在 在 C C 语言中,可以定义基本整型、长整型、短整型和无符号整型等 4 4 种类型的整型变量。它们的定义方式如下。(1 1 )基本整型变量 定义基本整型变量的
4、形式如下: int变量表列; (2 2 )长整型 定义长整型变量的形式如下: longint变量表列;(3 3 )短整 型 定义短整型变量的形式如下: shortint变量表列; (4 4 )无符号整型 定义无符号基本整型变量的形式如下: unsignedint变量表列;一个类型说明语句可以同时定义多个同类型的变量,各变量之间用逗号 ‚ , 分隔。 用类型说明语句定义的变量只是说明白为这些变量安排了存储空间,以便用 于存放。与之相同类型的数据,在未对这些变量赋值前,这些变量中(即存储空间中)的值是随机的。 C C 语言允许在定义变量的同时为变量赋初值。 在为整型变量初始化或赋值时,
5、C C 编译系统自动将被赋数据转换成与相应变量的类型一样。 由于各种整型变量所占的字节数有限,因此,它们所能存放的整数有肯定的范围。实型常量及其变量的定义1 1 实型(浮点型)常量 (1 1 )十进制数形式 (2 2 )指数形式(科学记数法)2 2 实型变量的定义 在 在 C C 程序中,用于存放实型数据的变量称为实型变量。在 在 C C 语言中,实型变量有单精度与双精度两种。 单精度float 双精度double字符型常量及其变量的定义1 1 字符型常量 n 换行 r 回车 b 退格 t 制表(横向跳格) 单引号(单撇号) 双引号(双撇号) ddd 1 3 3 位八进制数所代表的 I ASC
6、II 码字符 xhh1 2 2 位十六进制数所代表的 I ASCII 码字符 f 走纸换页 ’ 反斜 杠字符 2 2 字符型变量的定义 字符型变量的定义方式如下:char变量表列;数据的输入与输出应包括以下几项:输入(出)的设备 输入(出)的格式 输入(出)的内容格式输出函数格式输出函数的一般形式如下: printf(*‚ 格式限制 ,输出表) ) ;其中格式限制部分要用一对双撇号括起来,它用于说明输出项目所采纳的格式。 1 1 整型格式说明符 (1 1 )十进制形式 (2 2 )八进制形式 (3 3 )十六进制形式2 2 实型格式说明符假如以十进制 数形式输出实型数据
7、,其格式说明符为 %f 或%m.nf 假如以指数形式输出实型数据,其格式说明符为 %e 或%m.ne 3 3 字符型格式说明符字符型数据的格式说明符为 %c 或%mc (1 1 )输出表中各输出项目之间要用 ‚ , 分隔。 (2 2 )格式限制中的各格式说明符与输出表中的各输出项目在个数、次序、类型等方面必 须一一对应。 (3 3 )格式限制中除格式说明符外的其他字符将按原样输出。 (4 4 )在输出格式说明符中,假如带有宽度说明,则在左边没有数字的位置上用空格填满(即输出的数字是右对齐)。但假如在宽度说明前加一个负号(),则输出为左对齐,即在右边补空格。 格式输入函数格式输入函数
8、的一般形式如下: scanf ( ‚ 格式限制 ,内存地址表);1 1 整型格式说明符 (1 1 )十进制形式 用于输入十进制形式的整型数据。(2 2 )八进制形式 用于输入八进制形式的整型数据。(3 3 )十六进制形式 用于输入十六进制形式的整型数据。2 2 实型格式说明符 用于输入的单精度实型格式说明符为 %f 或%e 用于输入的双精度实型格式说明符为 %lf3 3 字符型格式说明符 用于输入的字符型格式说明符为 %c 或%mc赋值运算赋值运算符为 ‚ 。赋值表达式为 变量名表达式 (1 1 )在 C C 语言中, ‚ 为赋值运算符,而不是等号; (2
9、2 )赋值运算符 ‚ 左边必需是变量名,不能是表达式; (3 3 )赋值运算 符 ‚ 两端的类型不一样时,系统将自动进行类型转换。算术运算在 C C 语言中,基本的算术运算符有以下几个:加法运算符(双目运算符),或正值运算符(单目运算符)。如 x x y y ,x x 。 减法运算符(双目运算符),或负值运算符(单目运算符)。如 a a 3 3 ,x x 。 *乘法运算符(双目运算符)。如 3*x 。 /除法运算符(双目运算符)。如 x/y 。 % 模余运算符(双目运算符)。只适用于整型数据 ,如 4 9%4 的值为 1 1 ,3 11%3 的值为 2 2 等。关系运算
10、在 在 C C 语言中,基本的关系运算符有以下 6 6 个:小于 小于或等于 大于 大于或等于 等于 ! ! 不等于结果只有两个:true或者false执行 int x 2 2 ,y y 3 3 ;后表达式 x x (y y 3 3 )的值是 ( 1 )逻辑运算在 在 C C 语言中,逻辑常量只有两种:值非零表示 ‚ 真 ,值为零表示 ‚ 假 。其基本的逻辑运算符有以下 3 3 个:amp;amp; (逻辑与)两个量都为真 时为真(1 1 ),否则为假(0 0 ) | | (逻辑或)两个量中只要有一个为真时为真(1 1 ),只有都为假时为假(0 0 ) ! (逻辑非)一
11、个量为真时为假(0 0 ),假时为真(1 1 )自增与自减运算符增 1 1 运算符 ‚ 和减 1 1 运算符 ‚ 是两个单目(只有一个运算对象)运算符,它们的运算对象只能是整型或字符型变量。 增 增 1 1 运算符是将运算对象的值增 1 1 ;减 1 1 运算符是将运算对象的值减 1 1 。 假设定义变量int a= 5 ;n in t b ; 前缀自增b = +a ; / a=6 b=6后缀自增b =a+ ; / a=6 b=5f sizeof 运算符f sizeof 运算符有以下两种用法:(1 1 )用于求得表达式计算结果所占内存的字节数。其一般形式为 sizeof
12、表达式 (2 2 )用于求得某种数据类型的量所占内存的字节数。其一般形式为 sizeof (类型名)逗号运算符逗号 ‚ , 是 是 C C 程序中常见的符号。在 在 C C 语言中,逗号除作为 分隔符运用外,还可以作为运算符来运用,称为逗号运算符。逗号表达式的一般形式为 子表达式 1 1 ,子表达式 2 2 , ,子表达式 n n 在运用逗号运算符(逗号表达式)时,要留意以下几点: (1 1 )逗号运算符是全部运算符中级别最低的一种运算符。 (2 2 )一个逗号表达式又可以与另一个表达式(可以是逗号表达式,也可以不是逗号表达式)连接成新的逗号表达式。 (3 3 )在很多状况下,运用
13、逗号表达式的目的仅仅是为了得到各个子表达式的值,而并不肯定要得到或运用整个逗号表达式的值。C C 语言中的宏定义有两种形式 :符号常量定义与带参数的宏定义。符号常量定义在 在 C C 语言中,允许将程序中多处用到的 ‚ 字符串 定义成一个符号常量。在 C C 语言中定义符号常量的一般形式如下:#define符号常量名字符串由于 C C 语言中的全部变量名、函数名等都运用小写字母,因此,符号常量名一般用大写字母表示,以便与 C C 语言中的保留关键字相区分。 C C 编译系统对定义的符号常量的处理只是进行简洁的替换,不作任何语法检查。 #define 是一个吩咐,而不是语句,因此在行
14、末不能加 ‚ ; ,并 且应独立占一行。 #define 吩咐一般应出现在程序中函数的外面,其作用域范围是从 #define 符号常量名字符串 到 #undef符号常量名( ( 或文件末) ) 带参数的宏定义带参数的宏定义的一般形式为 #define 宏名(参数表)字符串其中字符串中应包含在参数表中所指定的参数,并且,当参数表中的参数多于一个时,各参数之间要用逗号分隔。 在运用带参数的宏定义时,应留意以下两个问题。(1 1 )在运用带参数 的宏定义时,一般应将宏定义字符串中的参数都要用括号括起来,否则经过宏绽开后,可能会出现意想不到的错误。(2 2 )在运用带参数的宏定义时,除了应
15、将宏定义字符串中的参数都要用括号括起来,还需。要将整个字符串部分也要用括号括起来,否则经过宏绽开后,还会可能出现意想不到的错误。 书写一个求最大值的宏定义 # define MAX(a , b) (agt;b)? (a) ,(b) 3.1语句与复合语句在 在 C C 语言中,一个表达式后面跟随一个分号就构成了一个语句,这种语句称为表达式语句。 在 C C 语言中,分号(;)是表达式语句的终结符,而不是语句之间的分隔符,也就是说,分号是表达式语句的一个组成部分,只不过它位于表达式的后面。在一个函数体内部,由左、右花括号括起来的语句称为复合语句,它的一般形式为 说明部分;语句部分; 3.2if 语
16、句If 语句的形式为 if(表达式)语句 这种选择结构的流程图如图 1 3.1 所示。 下面对 f if 语句作几点说明:(1 1 )f if 语句中的逻辑表达式(即条件)必需要用一 对圆括号括起来。(2 2 )f if 语句后的语句可以是复合语句。 (3 3 )一个 f if 语句 用 最终须要强调的是,在运用 f if 语句时,肯定要留意逻辑表达式的正确写法,特殊是在连续运用多个 f if 语句时更要留意。e 3.3ifelse 结构在 在 C C 语言中,e ifelse 结构的语句形式为if(表达式)语句 1 1 else语句 2 2下面对 e ifelse 结构作以下几点说明:(1
17、1 )e ifelse 结构中的语句 1 1 与语句 2 2 都可以是复合语 句。(2 2 )在 f if e else 结构中,语句 1 1 与语句 2 2 都可以是空语句。(3 3 )在 f if e else 结构中,假如在 e else 前面有多个 f if 语句,则 e else 与最近的 f if 配对。(4 4 )假如有多个 e ifelse 结构嵌套如下:if( 表达式 1)语句 1 1 else if(表达式 2 2 )语句 2 2 else else if(表达式 n n )语句 n n else语句 n n 1 1 则可简 写成 if(表达式 1 1 )语句 1 1 el
18、se if(表达式 2 2 )语句 2 2 elseif(表达式 n n )语句 n n else语句 n n 1 1在 在 e ifelse 结构中,假如语句 1 1 与语句 2 2 都是单一的赋值语句,并且都是给同一个变量赋值,则可以用条件运算符来进行处理。下面对条件表达式作几点说明:(1 1 )条件运算符优先级要比赋值运算符高。 (2 2 )条件运算符的优先级比关系运算符与算术运算符都要低,因此,条件表达式中的 ‚ 表达式 1 1 、 ‚ 表 达式 2 2 与 ‚ 表达式 3 3 都不必用括号括起来。 (3 3 )条件运算符的结合方向为 ‚
19、 从右到左 。在 在 C C 语言中供应了一个干脆实现多路分支选择的结构,称为 h switch :结构,其一般形式如下:switch( 表达式) ) case常量表达式 1: 语句 1 1 case常量表达式 2: 语句 2 2 case常量表达式 n: 语句 n n default : 语句 n n 1 1 下面对 h switch 结构作几点说明: (1 1 )h switch 结构中的表达式、常量表达式 1 1 、 L 、常量表达式 n n 必需是整型或字符型。这是因为,在 h switch 结构中,其分支数一般是有限的,并且是离散的,因此,其表达式的值也应是有限的,且是离散的。 (2
20、 2 )同一个 h switch 结构中的常量表达式值必需互不相同,否则就会出现冲突的现象,即对于 ‚ 表达式 的同一个值对应多种执行方案,这是错误的。(3 3 )在 h switch 结构中, case 与default 的依次可以随意,各 e case 之间。的依次也可以随意。 (4 4 )在执行 h switch 结构时,当执行完某 case 后的语句 后,将依次执行后面 case 后的语句,直到遇break 语句才退出整个 switch 结构的执行。 (5 5 )在 h switch 结构中,假如没有 default 且 ‚ 表达式 值不等于任何 case 后常
21、量表达式的值,则干脆退出 switch 结构而转到其后的语句执行。 例 例 3.12计算奖金。当企业利润 P P 等于或低于 5 0.5 万元时,奖金为利润的 1% ;当 0.5 P P ≤1 1 万元时,超过 过 5 0.5 万元部分的奖金为利润的 1.5% ,5 0.5 万元以下仍按 1% 计算;当 1 1 P P ≤2 2 万元时,1 1 万元以下部分仍按前面的方法计算, 超过 1 1 万元的部分其奖金按利润的 2% 计算;当 2 2 P P ≤5 5万元时,2 2 万元以下部分仍按前面的方法计算,超过 2 2 万元部分的奖金按利润的 2.5% 计算;当 当 5 5 P
22、 P ≤0 10 万元时,5 5 万元以下部分仍按前面的方法计算,超过 5 5 万元部分的奖金按利润的 的 3% 计算;当 P P 0 10 万元时,0 10 万元以下部分仍按前面的方法计算,超过 0 10 万元部分按3.5% 计算。其中 P P 由键盘输入,计算并输出相应的奖金数 W 。 依据图 5 3.5 所示的流程图,用 f ifelse if 结构写出 C C 程序如下:#includestdio.h main() floatp ,w w ; printf(input p: ) ; scanf(%f , amp;p) ; if (p 0.0)w 0.0 ; else if (p
23、0.5)w 0.01*p ; else if (p 1.0)w 0.005 0.015*(p 0.5) ; else if (p 2.0)w 0.0125 0.02*(p 1.0) ; else if (p 5.0)w 0.0325 0.025*(p 2.0) ; else if (p 10.0)w 0.1075 0.03*(p 5.0) ; elsew 0.2575 0.035*(p 10.0) ; printf(w %f n , w) ; 例 例 3.14求解一元二次方程 Ax 2 2 Bx C C 0 0 。 相应的 C C 程序如下:#includestdio.h #includema
24、th.h main() doublea ,b b ,c c ,d d , x1 , x2 ,p p ; printf(input a ,b b , c: ) ; scanf(%lf%lf%lf , amp;a , amp;b , amp;c) ; if (a 0 0 .0) if (b 0.0)printf(ERR n) ; elseprintf(X %f n , c/b) ; else if (b 0.0) d c/a ; if (d 0.0) printf(X1 %f n , sqrt( d) ; printf(X2 %f n , sqrt( d) ; else printf(X1 j%f
25、 n , sqrt(d) ; printf(X2 j%f n , sqrt(d) ; else if (c 0.0) printf(X1 0.0 n) ; printf(X2 %f n , b/a) ; else d b*b 4*a*c ; if (d 0.0) d sqrt(d) ; if (b 0.0) x1 ( ( b b d)/( 2*a) ; elsex1 ( ( b b d)/(2*a) ; x2 c/(a*x1) ; printf(X1 %f n , x1); printf(X2 %f n , x2) ; else d sqrt( d)/(2*a) ; p p b/(2*a) ;
26、 printf(X1 %f j%f n ,p p ,) d) ; printf(X2 2 %f j%f n ,p p ,) d) ; 4.1.1当型循环结构 当型循环结构的流程图如图 1 4.1 所示。e while 循环实现当型循环结构的 C C 语句形式为 while( 表达式 )循环体语句 功能:当表达式值≠0 0 时,执行循环体,执行完后接着推断表达式值,只有当表达式值0 0 时才退出循环。 例 例 4.2从键盘输入各学生成果,并对 0 90 分以上(包括 0 90 分)的学生人数进行计数,直到输入的成果为负为止,最终输出成果在 0 90 分以 上的学生人数。其流程图如图 3 4
27、.3 所示。其中变量 t count 为整型,用于对 0 90 分以上的学生人数进行计数。相应的 C C 程序如下:#includestdio.h main() intcount ; floatgrade ; count 0 0 ; scanf(%f , amp;grade) ; while (grade 0.0) if (grade 90.0)count count 1 1 ; scanf(%f , amp;grade) ; printf( count %d n , count) ; 直到型循环结构直到型循环结构的流程图如图 4 4.4 所示。do_while 循环 e do_ while
28、循环的执行过程是,首先执行循环体,然后推断条件(即计算逻辑表达式),假如条件满意(即逻辑表达式值为真),则退出循环结构;假如条件不满意(即逻辑表达式值为假),则接着执行循环体。实现直到型循环结构的 C C 语句形式为 do循环体语句while (表达式); 功能:先执行循环体,然后推断表达式值,若表达式值≠0 0 ,则再次执行循环体,如此 循环,直到表达式值0 0 为止。例 例 4.3计算并输出下列级数和: 直到某项的肯定值小于为止 相应的流程图如图 5 4.5 所示。其中 f f 用于变更每一项的符号,因为这是一个各项符号相间的级数。 相应的 C C 程序如下:#includestdi
29、o.h main() intk ; doublesum ,d d ,f f ; sum 1.0 ;k k 1 1 ;f f 1.0 ; do k k k 1 1 ;f f f f ;d d 1.0/(k*(k 1) ; sum sum f*d ; whiled (d 1.0e ) 4) ; printf(sum %lf n , sum) ; 当型循环结构与直到型循环结构的区分与联系当型循环结构与直到型循环结构既有共同之处,又有区分。主要体现在以下几个方面。(1 1 )在 e while 循环中,其循环体可以一次也不执行(即执行 e while 循环结构的一起先,其条件就不满意)。(2 2 )不
30、管是 e while 循环结构还是 do e while 循环结构,在循环体内部必需要有能变更条件( ( 即逻辑表达式值) ) 的语句,否则将造成死循环。(3 3 )对于有些问题既可以用 e while 循环结 构来处理,也可以用 do e while 循环结构来处理。(4 4 )不管是 e while 循环结构还是 do e while 循环结构,其循环体假如包含一个以上的语句,应以复合语句形式出现。C C 语言供应的 r for 循环属于当型循环结构,其一般形式为for (表达式 1 1 ;表达式 2 2 ;表达式 3 3 )循环体语句(组)它等价于下列的当型循环结构:表达式 1 1 ;
31、while (表达式 2 2 ) 循环体语句 表达式 3 3 ; 下面对 r for 循环语句作几点说明: (1 1在 )在 r for 语句中,三个表达式中的任何一个表达式均可省 略,但其中的两个 ‚ ; 不能省略。(2 2 )下列两个循环都是死循环: for( 表达式 1 1 ;表达式 3)循环体 与 for( ; )循环体 式 因为它们都没有用于推断循环是否结束的条件(即表达式 2 2 )。(3 3 )r for 循环本质上也是当型循环结构,只不过它对于事先可以确定循环次数的问题特殊便利。(4 4 )在 r for 循环中,循环体也可以是复合语句(即用一对花括号 。括起来的语
32、句组)。循环的嵌套。所谓循环的嵌套是指一个循环体内又包含了另一个完整的循环结构。C C 语言 允许循环结构嵌套多层。循环的嵌套结构又称为多重循环。例 例 4.6计算并输出 0 10 以内( ( 包括 10) 全部自然数的阶乘值。即计算 ! 1! ,! 2! ,! 3! ,! 4! ,! 5! ,! 6! ,! 7! ,! 8! ,! 9! , 10! 。采纳的方法是,对于 0 10 以内的每一个自然数分别求它们的阶乘值。其流程图如图 7 4.7 所示。明显,这是一个二重循环结构。相应的 C C 程序如下:#includestdio.h main() intn ,k k ; doubles ;
33、for (n 1 1 ;n n 10 ;n n n n ) 1) s 1.0 ; for (k 1 1 ;k k n n ;k k k k 1)s s*k ; printf(%2d! %16.7f n ,n n ,) s) ; break 语句C C 语言中的 k break 语句有以下两个功能:(1 1 )跳出switch 结构; (2 2 )退出当前循环结构,包括while 结构、dowhile 结构和 r for 循环结构。continue 语句e continue 语句的功能是结束本次循环的执行,但不退出循环结构。 下面举两个例子来说明 e continue 语句的运用。例 例 4.1
34、0输出 101 0 200 之间全部能被 7 7 或 或 9 9 整除的自然数。相应的 C C 程序如下:#includestdio.h main() intn ; for (n 101 ;n n 200 ;n n n n ) 1) if (n%7! 0)amp;amp;(n%9! 0)continue ;/* 结束本次循环,接着进行下次循环 */ printf(%d n , n) ; 事实上,上述程序等价于 #includestdio.h main() intn ; for (n 101 ;n n 200 ;n n n n ) 1) if (n%7 0) | | (n%9 0)printf(
35、%d n , n) ; 5.1.1函数的概念在 在 C C 语言中,函数分为以下两种。 (1 1 )标准库函数 这种函数用户不必定义,但可干脆运用。例如 scanf() ,printf() ,fabs() ,sqrt() ,exp() , sin() , cos() 等都是 C C 语言中常用的库函数。 (2 2 )用户自己定义的函数 这种函数用以解决用户的特地问题,一般由用户自己编写。例 例 5.1从键盘输入两个正整数 m m 与 n n ( ( m m ≥ n n ) ) ,求的值(即求)。 其 其 C C 程序如下:#includestdio.h main() /* 主函数 */
36、intm ,n n ; intp() ;/* 说明本函数中要调用的函数 p() 是整型 */ scanf(%d , %d , amp;m , amp;n) ; if (m n)printf(%d n , p(m)/p(m n) ; els eprintf(m n ! n) ; int p(k)/* 计算阶乘值的函数 */ int k ; int s ,i i ; s s 1 1 ; for (i 1 1 ;i i k k ;i i i i 1) s s*i ; return(s) ; 下面对函数作几点说明:(1 1的 )一个完整的 C C 程序可以由若干个函数组成,其中必需有一个且只能有一个主
37、函数main() 。(2 2 )一个完整 C C 程序中的全部函数可以放在一个文件中,也可以放在多个文件中。在编译吩咐行中键入各个函数所在的文件名(各文件名之间 用空格分隔)。在主函数中用#include 语句将各函数所在的文件包含进来。(3 3 )C C 语言中的函数没有从属关系,各函数之间相互独立,可以相互调用。 函数的定义在 在 C C 语言中,函数定义的一般形式为类型标识符函数名(形参表列) 形参类型说明 说明部分 语句部分 在定义 C C 函数时要留意以下几点。(1 1 )函数类型标识符同变量类型说明符,它表示返回的函数值类型。 (2 2 )假如省略函数的类型标识符,则默认为是 t
38、int 型。 (3 3 )C C 语言允许定义空函数。如 dummy() (4 4 )函数中返回语句的形式为 return (表达式); 或 return 表达式; (5 5 )假如 ‚ 形参表列 中有多个形式参数,则它们之间要用 ‚ , 分隔。(6 6 )C C 语言允许在形参表中干脆对形参的类型进行说明。函数的调用函数调用的一般形式为 函数名(实参表列)(1 1 )函数调用可以出现在表达式中(有函数值返回);也可以单独作为一个语句( ( 无函数值返回) ) 。(2 2 )实参表中的各实参可以是表达式,但它们的类型和个数应与函数中的形参一一对应。 (3 3 )在调用函
39、 数中,通常要对被调用函数的返回值类型进行说明(一般在调用函数的函数体中的说明部分),包括函数类型、函数名和一对圆括号。例 例 5.2下列程序的功能是计算输出一个圆台两底面积之和。#includestdio.h main() double r1 , r2 ; double q() ; printf(inputr1 , r2: ) ; scanf(%lf , %lf , amp;r1 , amp;r2) ; printf(s %f n , q(r1 , r2) ; double q(x ,) y) do uble x ,y y ; doubles ; s s 3.1415926*(x*x y*y
40、) ; return(s) ; 但 但 C C 语言规定,在以下几种状况下可以不在调用函数中对被调用函数作类型说明: 被调用函数为整型或字符型,自动按整型处理。 被调用函数的定义出现在调用函数之前。 在调用函数之前已经由别的函数(它可能也要调用该被调用函数)对被调用函数作了类型说明。(4 4 )C C 语言虽不允许嵌套定义函数,但可以嵌套调用函数。形参加实参的结合方式1 1 地址结合 所谓地址结合,是指在一个模块调用另一个模块时,并不是将调用模块中的实参值干脆传送给被调用模块中的形参,而只是将存放实参的地址传送给形参。2 2 数值结合 所谓数值结合,是指调用模块中的实参地址与被调用模块中的形参
41、地址是相互独立的,在一个模块调用另一个模块时,干脆将实参值传送给形参被存放在形参地址中。例 例 5.3分析下列 C C 程序:voidswap(x ,) y) intx ,y y ; int t ; t t x x ;x x y y ;y y t t ; return ; #inc ludestdio.h main() intx ,y y ; scanf(x %d ,y y %d , amp;x , amp;y) ; swap(x ,) y) ; printf(x %d ,y y %d n ,x x ,) y) ; 在这个程序中共有两个函数。在主函数中分别为整型变量 x x 与 与 y y 输入数据,然后调用函数swap(x, ,) y) 。而函数 swap(x, ,) y) 的功能是实现变量 x x 值与 y y 值的交换。但在实际运行该程序时,假如从键盘输入 x x 6 6 ,y y 8¿ 则输出的结果为 x x 6 6 ,y y 8 8即没有达到交换的目的。这是因为在主函数中 调用