第4章函数与变量 ·25· 第4章函数与变量 函数是C语言的基本构件。利用这些基本构件,可以组成结构良好的大型程序 源文件中可包 一个或多个函数,每个函数完成一个特定的功能。模块化编程在C语言程疗 设计中就是函数」 4.1C程序设计的一般形式 1.C语言程序的 一般格式 全程变量说明 main() 局部变量说明 主程序 执行语句 f1(形参表 形参说明 局部变量说明 执行语句 函数 fn(形参表) 形参说明 局部变量说明 执行语句 例4.1:输出fa(m)函数值 #include <stdio.h> int fa(n) /*函数定义fa,函数返回值的类型为int*/ int ni /*形参说明*/ if(n>0)return();/体函数体,返回不同的值*/ else return (0); } main()
第 4 章 函数与变量 ·25· 第 4 章 函数与变量 函数是 C 语言的基本构件。利用这些基本构件,可以组成结构良好的大型程序。一个 C 源文件中可包含一个或多个函数,每个函数完成一个特定的功能。模块化编程在 C 语言程序 设计中就是函数。 4.1 C 程序设计的一般形式 1. C 语言程序的一般格式 全程变量说明 main() { 局部变量说明 主程序 执行语句 } f1(形参表) 形参说明 { 局部变量说明 执行语句 } . 函数 fn(形参表) 形参说明 { 局部变量说明 执行语句 } 例 4.1:输出 fa(n)函数值 #include <stdio.h> int fa(n) /* 函数定义 fa,函数返回值的类型为 int*/ int n; /* 形参说明*/ { if (n>0) return (1); /* 函数体,返回不同的值*/ else return (0); } main()
·26· C程序设计要点分析与题解 int a: printf(请输入数据:n): scanf("%d",&a) printf(\n%dn”,fa(a):/*函数调用,用实参a替代形参n*/ 1 例4.2:将输入的大写字母转换为小写 converte a string in lowercaes #include <stdio.h> main() char uptolow(): /体说明uptolow(0函数己定义*/ printf("Please type in a letter\n"): scanf("%c",&ch): printf("%c”,uptolow(ch):/体函数调用*/ }hile(ch:='): /*遇到空格字符则结束*/ printf(n")片 char uptolow(k) /年函数定义/ char k: ifk>='A'&&k<='Z') k+-'a return(k): 1 4.2函数 1.函数是C语言程序的基本构件 函数在C语言程序中,是完成某个算法的一个程序段,可以看成是程序的基本构件。函 数的作用主要有: (1)分解大任条 (②)利用现有成果 (3)增加可读性 例4.3:求任意两个整数的阶乘之和
·26· C 程序设计要点分析与题解 { int a; printf("请输入数据:\n"); scanf(“%d”,&a); printf(“\n%d\n”, fa(a)); /* 函数调用,用实参 a 替代形参 n */ } 例 4.2:将输入的大写字母转换为小写 /* converte a string in lowercaes */ #include <stdio.h> main() { char uptolow(); /* 说明 uptolow()函数已定义 */ char ch; do{ printf(″Please type in a letter\n″); scanf(″%c″,&ch); printf(″%c″,uptolow(ch)); /* 函数调用 */ }while(ch!=′′); /* 遇到空格字符则结束 */ printf(″\n″); } char uptolow(k) /* 函数定义 */ char k; { if(k>=′A′&&k<=′Z′) k+=′a′-′A′; return(k); } 4.2 函数 1.函数是 C 语言程序的基本构件 函数在 C 语言程序中,是完成某个算法的一个程序段,可以看成是程序的基本构件。函 数的作用主要有: (1)分解大任务 (2)利用现有成果 (3)增加可读性 例 4.3:求任意两个整数的阶乘之和
第4章函数与变量 ·27· int numberl,number2,result; int factorial(); printf("Please type numberl and number2"): scanf ("&numberl,&number2); result=factorial(nun torial (number2) printf("numberl!+number2!=%",result): int factorial(n) /*函数定义*/ int n: int resultl=1: while(n!=0){ resultl =n /结果值result1返回*/ 2.定义函数的一般格式 类型说明符函数名(形参表】 形参说明 局部变量说明 函数体语句 1 注意 ·函数也可能不需要传递参数,这时只保留括号,也无需对形参说明 ·形参表内可含有多个变量,用逗号分隔开。 例如: float sum(a,b) float a.b: return(a十b):
第 4 章 函数与变量 ·27· main() { int number1,number2,result; int factorial(); printf(″Please type number1 and number2″); scanf(″%d %d″,&number1,&number2); result=factorial(number1)+factorial(number2); printf(″number1!+ number2! =%d″,result); } int factorial(n) /* 函数定义 */ int n; { int result1=1; while(n!=0){ result1 * =n; n--; } return(result1); /*结果值 result1 返回 */ } 2. 定义函数的一般格式 类型说明符 函数名(形参表) 形参说明 { 局部变量说明 函数体语句 } 注意: ·函数也可能不需要传递参数,这时只保留括号,也无需对形参说明。 ·形参表内可含有多个变量,用逗号分隔开。 例如: float sum(a,b) float a,b; { return(a+b); }
·28· C程序设计要点分析与题解 例4.4函数power0实现x,其中n是整数 #include <stdio.h> double power(x,n) /体函数定义*/ double x: /*形式参数说明*/ int n' /形参说明*/ double p: if (m>0) for(p=1.0:n>0:n-) p=p*x; e1se=1.0 return (p); /常返回函数值*/ main ( double m; m=poer(12.0,2):/*函数调用,参数类型,个数必须匹配*/ printf(n计算结果为:%e\n”,m: printf(n计算结果为:en,power(2.0,3》: 4.3函数返回值 L.函新返同估的举型说明 (①)函数返回值类型说明的一般格式为: 类型说明符 函数名(0 (②)函数默认类型为int,可省去类型说明符。 (3)void f(b)表示函数fb)没有返回值。 2.返回语句retu 有返回值的函数需要用返回语句来传送返回值 (①)返回语句的 一般格式为 return: 或 return(返回变量名或表达式值): (2)返同语句的两种用途 (3)表示程序结束,从函数返回调用点,不返回函数的值,可以不用return语句, 例如: printmessage(
·28· C 程序设计要点分析与题解 例 4.4 函数 power()实现 x n ,其中 n 是整数 #include <stdio.h> double power(x,n) /* 函数定义 */ double x; /* 形式参数说明 */ int n; /* 形参说明 */ { double p; if (n>0) for (p=1.0; n>0; n-) p=p*x; else p=1.0; return (p); /* 返回函数值 */ } main () { double m; m = power(12.0,2); /* 函数调用,参数类型,个数必须匹配 */ printf(“\n 计算结果为: %e\n”,m); printf(“\n 计算结果为:%e\n”,power(12.0,3)); } 4.3 函数返回值 1.函数返回值的类型说明 (1)函数返回值类型说明的一般格式为: 类型说明符 函数名() (2) 函数默认类型为 int,可省去类型说明符。 (3) void f(b) 表示函数 f(b)没有返回值。 2.返回语句 return 有返回值的函数需要用返回语句来传送返回值。 (1)返回语句的一般格式为: return; 或 return(返回变量名或表达式值); (2)返回语句的两种用途 (3)表示程序结束,从函数返回调用点,不返回函数的值,可以不用 return 语句。 例如: printmessage() {
第4章函数与变量 ·29· printf("programming is fun \n"): return: 2)从函数返回调用点,并返回函数的值 例如:计算阶乘 factorial3(n) int n: int result=1; if(n==0lIn== 1 return(result): while(n!=0){ return (result): 在return语句括号内的retult是被返回的变量,带回函数值。 4.4函数的调用 1.函数的参数 函数定义格式为: 类型说明符函数名(形参表) 形参说明 函数体 函数的调用格式为: 函数名(实参表) 注意: (1)函数形参表或实参表中,可右多个参数,也可能没右参数。但函数后仍须有0 (②)实参类型应与形参类型一致,项数相同, 且类型与项数 对应 (3)函数返回值只能有一个,要想得到多个参数al,a2,·,值,则需定义全局变量al, a2,.,或用地址指针操作。 2.函数调用顺序及类型说明 ()调用前,己对该函数加以定义说明。 例4.5:调用函数求两数之和。 float sum(a,b) /朱先定义函数*/ float a,b:
第 4 章 函数与变量 ·29· printf(″programming is fun \n″); return; } 2) 从函数返回调用点,并返回函数的值。 例如:计算阶乘 factorial3(n) int n; { int result=1; if(n==0||n==1) return(result); while(n! =0){ result*=n――; } return(result); } 在 return 语句括号内的 retult 是被返回的变量, 带回函数值。 4.4 函数的调用 1.函数的参数 函数定义格式为: 类型说明符 函数名(形参表) 形参说明 函数体 函数的调用格式为: 函数名(实参表) 注意: (1)函数形参表或实参表中,可有多个参数,也可能没有参数,但函数后仍须有(); (2)实参类型应与形参类型一致,项数相同,且类型与项数一一对应; (3) 函数返回值只能有一个,要想得到多个参数 a1,a2,.,值, 则需定义全局变量 a1, a2,.,或用地址指针操作。 2.函数调用顺序及类型说明 (1)调用前,已对该函数加以定义说明。 例 4.5:调用函数求两数之和。 float sum(a,b) /* 先定义函数 */ float a,b; {