8.1、概述 函数使用常 P144 个源文件由一个或多个函数组成,可为多个C程序公 用 C语言是以源文件为单位而不以函数为单位进行编译的 个C程序由一个或多个源(程序)文件组成—可分 别编写、编译和调试。 C程序执行总是从main函数开始,一般情况下调用其 它函数后总是回到mim函数,最后在main函数中结束 整个程序的运行。 所有函数都是平行的、互相独立的,即在一个函数内 只能调用其他函数,不能再定义一个函数(嵌套定 义) 个函数可以调用其他函数或其本身,但任何函数均 不可调用main函数
8.1、概述 函数使用常识: P144 ◼ 一个源文件由一个或多个函数组成,可为多个C程序公 用。 ◼ C语言是以源文件为单位而不以函数为单位进行编译的。 ◼ 一个C程序由一个或多个源(程序)文件组成——可分 别编写、编译和调试。 ◼ C程序执行总是从main函数开始,一般情况下调用其 它函数后总是回到main函数,最后在main函数中结束 整个程序的运行。 ◼ 所有函数都是平行的、互相独立的,即在一个函数内 只能调用其他函数,不能再定义一个函数(嵌套定 义)。 ◼ 一个函数可以调用其他函数或其本身,但任何函数均 不可调用main函数
8.2 函数定义的一般形式 1.无参函数的定义形式 类型标识符函数名( [声明部分 语句} 2.有参函数定义的一般形式 函数返回值的数据类型函数名(类型名变量名1,类型名 变量名2,……) 声明部分 句} 如果在定义时不知指定函数类型,系统会隐含指定函数类型 为int型. 3无函数体的为“空函数” 类型标识符函数名()
8.2 函数定义的一般形式 1. 无参函数的定义形式 类型标识符 函数名( ) { 声明部分 语句} 2. 有参函数定义的一般形式 函数返回值的数据类型 函数名(类型名 变量名1,类型名 变量名2,……) { 声明部分 语句 } * 如果在定义时不知指定函数类型,系统会隐含指定函数类型 为int型. 3.无函数体的为“空函数” 类型标识符 函数名( ) { }
例一参见P5例1.3 void printstar()/*被调函数*/ #include <stdio.h> include <conio.h> printi(“请输入两个整数:"); main()/米主调函数*} int max( int x, int y)/*被调函数* int abc int max( int, int);/*函数原型intz; 水 if(x>y) clrscr(; printstare(;/*函数原型* scanf(%od, %d", &a, &b); c=max(a, b printf( max=%d\n",c) return z
#include <stdio.h> #include <conio.h> main( ) /*主调函数*/ { int a,b,c; int max(int,int); /*函数原型 */ clrscr( ); printstar(); /*函数原型*/ scanf("%d,%d",&a,&b); c=max(a,b); printf("max=%d\n",c); } void printstar( ) /*被调函数*/ { printf(“请输入两个整数:"); } int max(int x,int y) /*被调函数*/ { int z; if (x>y) z=x; else z=y; return z; } 例一 参见 P5例1.3
83函数参数mmO)./*主调函数 i int a, b, c; 8.31形式参数和实际参can("%d%d"&a&b 1.形式参数和实际参数的树 c=max(a, b ) printf("max=%dIn", c) 2关于形参与实参的说明} 8.3.2函数的返回值 max (float x, float y) i float z 说明:1)函数的返回值通过函数zxy?x:y 2)函数值的类型 return Z, 3)如果函数值类型与re运行情况输入: 致,以函数类型为准(《数值1525 max=2 4)如果明确表示不需返回值,应使用void作函数返回 值的数据类型,否则即使没有 return语句,仍将带回一个 不确定的值
8.3 函数参数和函数的值 8.3.1 形式参数和实际参数 P146 1.形式参数和实际参数 的概念 P146 2.关于形参与实参的说明 P147 8.3.2 函数的返回值 P147 说明:1)函数的返回值通过函数中的return获得. 2)函数值的类型. 3)如果函数值类型与return语句表达式值的类型不一 致,以函数类型为准(数值型会自动进行类型转换). 4)如果明确表示不需返回值,应使用void作函数返回 值的数据类型,否则即使没有return语句,仍将带回一个 不确定的值 main( ) /*主调函数*/ { int a,b,c; scanf("%d,%d",&a,&b); c=max(a,b); printf("max=%d\n",c); } max(float x, float y) { float z; z=x>y? x : y ; return z; } 运行情况:输入: 1.5,2.5 max=2
8.4函数的调用 8.4.1函数调用的一般形式 函数名(实参列表) 如果调用无参函数,则“实参列表”可省,但括号不能省 实参与形参个数相等,类型一致.实参与形参按顺序对应,一一传 递数据,如果实参表列包括多个实参,对实参求值的顺序不确定, 许多c版本是按自右而左的顺序求值 int f(int a,intb 例二:main i int c, pi if(a>b)c=l p=f(i,i++); else if(a==b)c=0 pr intf(“%d”,p); else 结果:1 return(c); 3
8.4 函数的调用 8.4.1 函数调用的一般形式 函数名 (实参列表) 如果调用无参函数,则“实参列表”可省,但括号不能省. 实参与形参个数相等,类型一致.实参与形参按顺序对应,一一传 递数据,如果实参表列包括多个实参,对实参求值的顺序不确定, 许多C版本是按自右而左的顺序求值. 例二: main() {int i=2,p; p=f(i,i++); printf(“%d”,p); } int f(int a,int b) { int c; if(a>b) c=1; else if(a= =b) c=0; else c= -1; 结果 return (c);} : 1