第5章模块设计
第5章 模块设计
5.,1模块的实现—函数 52模块间的参数传递 53模块的递归调用 54程序举例 5.5编译预处理
5.1 模块的实现——函数 5.2 模块间的参数传递 5.3 模块的递归调用 5.4 程序举例 5.5 编译预处理
5.1模块的实现—函数 511函数的概念 在C语言中,函数分为以下两种。 (1)标准库函数 这种函数用户不必定义,但可直接使用。例如 scant0, printf, fabs, sartO,expO,sinO,cos0等都是C语言 中常用的库函数 (2)用户自己定义的函数 这种函数用以解决用户的专门问题,一般由用户自己编 写 没回日录
5.1 模块的实现——函数 5.1.1 函数的概念 在C语言中,函数分为以下两种。 (1)标准库函数 这种函数用户不必定义,但可直接使用。例如scanf() , printf() , fabs() , sqrt() ,exp(),sin(),cos()等都是C语言 中常用的库函数。 (2)用户自己定义的函数 这种函数用以解决用户的专门问题,一般由用户自己编 写
例51从键盘输入两个正整数m与m(m≥n),求m直(即 求 (m-m)! 其C程序如下: #include 'stdio. h'i mainO/主函数*/ f int m, n int PO;/说明本函数中要调用的函数pO是整型* scanf( %od, % od, &m, &n); s if(m>=n)printf("%d\n",p(m)p(m-n) else printf("m<n!n); intp(k)/*计算阶乘值的函数* int k f int s, i: 1 for(i=l k +1)s=s*i; return(s)
例5.1 从键盘输入两个正整数m与n(m≥n),求 的值(即 求 )。 其C程序如下: #include "stdio.h" main() /*主函数*/ { int m,n; int p(); /*说明本函数中要调用的函数p()是整型*/ scanf("%d,%d",&m,&n); if (m>=n) printf("%d\n",p(m)/p(m-n)); else printf("m<n ! \n"); } int p(k) /*计算阶乘值的函数*/ int k; { int s,i; s=1; for (i=1;i<=k;i=i+1)s=s*i; return(s); } ( )! ! m n m n − Am
下面对函数作几点说明 (1)一个完整的C程序可以由若干个函数组成,其中必 须有一个且只能有一个主函数 maino ,(2)一个完整C程序中的所有函数可以放在一个文件 中,也可以放在多个文件中。 ①在编译命令行中键入各个函数所在的文件名(各文 件名之间用空格分隔)。 ②在主函数中用# include语句将各函数所在的文件包 含进来。 (3)C语言中的函数没有从属关系,各函数之间互相独 立,可以互相调用
下面对函数作几点说明: (1)一个完整的C程序可以由若干个函数组成,其中必 须有一个且只能有一个主函数main()。 (2)一个完整C程序中的所有函数可以放在一个文件 中,也可以放在多个文件中。 ① 在编译命令行中键入各个函数所在的文件名(各文 件名之间用空格分隔)。 ② 在主函数中用 #include 语句将各函数所在的文件包 含进来。 (3)C语言中的函数没有从属关系,各函数之间互相独 立,可以互相调用
512函数的定义 在C语言中,函数定义的一般形式为 类型标识符函数名(形参表列) 形参类型说明 说明部分 语句部分
5.1.2 函数的定义 在C语言中,函数定义的一般形式为 类型标识符 函数名(形参表列) 形参类型说明 { 说明部分 语句部分 }
在定义C函数时要注意以下几点。 (1)函数类型标识符同变量类型说明符,它表示返回 的函数值类型。 (2)如果省略函数的类型标识符,则默认为是int型 (3)C语言允许定义空函数。如 )dummy
在定义C函数时要注意以下几点。 (1)函数类型标识符同变量类型说明符,它表示返回 的函数值类型。 (2)如果省略函数的类型标识符,则默认为是int型。 (3)C语言允许定义空函数。如 dummy(){ }
(4)函数中返回语句的形式为 return(表达式) 或 ,return表达式 (5)如果“形参表列”中有多个形式参数,则它们 之间要用“,”分隔 (6)C语言允许在形参表中直接对形参的类型进行 说明
(4)函数中返回语句的形式为 return(表达式); 或 return 表达式; (5)如果“形参表列”中有多个形式参数,则它们 之间要用“,”分隔。 (6)C语言允许在形参表中直接对形参的类型进行 说明
5.13函数的调用 函数调用的一般形式为 函数名(实参表列) (1)函数调用可以出现在表达式中(有函数值返回);也 可以单独作为一个语句(无函数值返回) (2)实参表中的各实参可以是表达式,但它们的类型和个 数应与函数中的形参一一对应 (3)在调用函数中,通常要对被调用函数的返回值类型进 行说明(一般在调用函数的函数体中的说明部分),包括函 数类型、函数名和一对圆括号
5.1.3 函数的调用 函数调用的一般形式为 函数名(实参表列) (1)函数调用可以出现在表达式中(有函数值返回);也 可以单独作为一个语句(无函数值返回)。 (2)实参表中的各实参可以是表达式,但它们的类型和个 数应与函数中的形参一一对应。 (3)在调用函数中,通常要对被调用函数的返回值类型进 行说明(一般在调用函数的函数体中的说明部分),包括函 数类型、函数名和一对圆括号
例52下列程序的功能是计算输出一个圆台两底面积之和。 #include ' stdio. h'" main( i double rl, r2; double go printf(input rl, r2: ) 99 scanf("%lf, %If"',&rl, &r2); printf("s=%of\",q(rl, r2)) double qlx, y) double x, y i double S; s=3.1415926*(x*x+yxy); return(s)
例5.2 下列程序的功能是计算输出一个圆台两底面积之和。 #include "stdio.h" main() { double r1,r2; double q(); printf("input r1 ,r2: "); scanf("%lf,%lf",&r1,&r2); printf("s=%f\n",q(r1,r2)); } double q(x,y) double x,y; { double s; s=3.1415926*(x*x+y*y); return(s); }