《C语言程序设计》课程授课教案(讲义)函数与变量

第4章函数与变量 ·25· 第4章函数与变量 函数是C语言的基本构件。利用这些基本构件,可以组成结构良好的大型程序 源文件中可包 一个或多个函数,每个函数完成一个特定的功能。模块化编程在C语言程疗 设计中就是函数」 4.1C程序设计的一般形式 1.C语言程序的 一般格式 全程变量说明 main() 局部变量说明 主程序 执行语句 f1(形参表 形参说明 局部变量说明 执行语句 函数 fn(形参表) 形参说明 局部变量说明 执行语句 例4.1:输出fa(m)函数值 #include 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 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 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 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 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; {

·30. C程序设计要点分析与题解 return(a+b): float first,second: first=1.0: second=2.0. printf("%fn",sum(first,second): /条后调用函数*/ 注意:简单的函数适于放在前头。因主函数中未对函数定义,放在后头易出错。 (2)函数调用前,已对函数返回的值加以说明。 在主函数中说明函数类型,对该函数的定义放在后面。 例4.6:调用函数求两数之和。 main( float first,second,.sum0;/*说明函数sum0*/ first=1.0: float sum(a,b) /体后定义函数sum(a,b)/ float a.b: return(a+b) 4.5递归函数与递归调用 1.递归函数 有些函数可用递归定义,称为递归函数 例:n的阶乘 当n=0时 n= 气nta-1:当>0时 2.递归调用 递归函数的计算程序,可采用递归调用算法实现。 例如:计算n的阶乘 foctorial4(n)
·30· C 程序设计要点分析与题解 return(a+b); } main() { float first,second; first=1.0; second=2.0; printf(″%f\n″,sum(first,second); /* 后调用函数 */ } 注意:简单的函数适于放在前头。因主函数中未对函数定义,放在后头易出错。 (2)函数调用前,已对函数返回的值加以说明。 在主函数中说明函数类型,对该函数的定义放在后面。 例 4.6:调用函数求两数之和。 main() { float first,second,sum(); /* 说明函数 sum() */ first=1.0; second=2.0; printf(″%f\n″,sum(first,second); } float sum(a,b) /* 后定义函数 sum(a,b) */ float a,b; { return(a+b); } 4.5 递归函数与递归调用 1. 递归函数 有些函数可用递归定义,称为递归函数。 例:n 的阶乘 1 当 n=0 时 n!= n*(n-1)! 当 n>0 时 2.递归调用 递归函数的计算程序,可采用递归调用算法实现。 例如:计算 n 的阶乘 foctorial4(n)

第4章函数与变量 ·31· int n: int result if(n==0 result=1: else result=-n*foctorial4(a-I):/朱递归调用*/ return(result): 4.6外部函数和内部函数 1.基本概念 根据函数能否被其它源文件调用,将函数区分为内部函数和外部函数。主要解决不同源 文件中函数之间的调用问恩。 如果一个函数只能被本文件中其它函数所调用,称为内部函数。在定义函数时,指明其 存储类是extern,则该函数就是外部函数。当函数类型省略时,该函数为外部函数。 2.内部函数和外部函数的定义 static (extern) 类型标识符函数名(形参表) 如static int fun(a,b)/*定义fun为内部函数,函数类型为int*/ extern int f1(a.h)/*定义f1为外部函新*/ int f2(a,b) /*定义2为外部函数,缺省时为外部类型*/ 3.外部函数应用 便于程序设计结构化,将常用的函数放在一个文件中,其它的程序均可调用它。 例4.7外部函数 fi1e1.c(源文件1) include extern prim0;∥说明本文件中要用到其它文件中的函数 main( int number: printf(请输入一个正整数:\n): scanf(%d”,&number): if (prime(number)) printf(nd是素数.”,number): else printf(\n%d不是素数.”,number):
第 4 章 函数与变量 ·31· int n; { int result; if(n==0) result=1; else result=n*foctorial4(n-1); /* 递归调用 */ return(result); } 4.6 外部函数和内部函数 1.基本概念 根据函数能否被其它源文件调用,将函数区分为内部函数和外部函数。主要解决不同源 文件中函数之间的调用问题。 如果一个函数只能被本文件中其它函数所调用,称为内部函数。在定义函数时,指明其 存储类是 extern,则该函数就是外部函数。当函数类型省略时,该函数为外部函数。 2. 内部函数和外部函数的定义 static(extern) 类型标识符 函数名(形参表) 如 static int fun(a,b) /*定义 fun 为内部函数,函数类型为 int*/ extern int f1(a,b) /*定义 f1 为外部函数*/ int f2(a,b) /*定义 f2 为外部函数,缺省时为外部类型*/ 3.外部函数应用 便于程序设计结构化,将常用的函数放在一个文件中,其它的程序均可调用它。 例 4.7 外部函数 file1.c(源文件 1) #include extern prime(); // 说明本文件中要用到其它文件中的函数 main() { int number; printf(“请输入一个正整数:\n”); scanf(“%d”,&number); if (prime(number)) printf(“\n %d 是素数.”,number); else printf(“\n %d 不是素数.”,number);

·32· C程序设计要点分析与题解 } fi1e2.c(源文件2) int prime(number) /*定义外部函数,此函数用于判别素数*/ int number: int flag=1.n: for (n=2:n main( int x: /*局部变量*/ y=1, funcl(: printf("x=d小n”,x):/值为1*/ funel( int x: /*局部变量*/ 10, printf("x1=%d\n",x): return: func20: float x: /*局部变量 x=1.2: printf("x2=%f\n",x):
·32· C 程序设计要点分析与题解 } file2.c(源文件 2) int prime(number) /*定义外部函数,此函数用于判别素数*/ int number; { int flag=1,n; for (n=2;n<number/2 && flag==1;n++) if (number%n==0) flag = 0; return(flag); } 4.7 变量的存储类型 1. 局部变量 定义在某一函数或某一部分程序内部的变量,称为局部变量。局部变量仅在其所定义的 局部范围内起作用,离开该范围,它们将自动消失,因此,又称为局部自动变量。 例 4.8: #include <stdio.h> main() { int x; /*局部变量*/ x=1; func1(); func2(); printf(″x=%d\n″,x); /* 值为 1 */ } func1() { int x; /*局部变量*/ x=10; printf(″x1=%d\n″,x); return; } func2(); {; float x; /*局部变量*/ x=1.2; printf(″x2=%f\n″,x);

第4章函数与变量 ·33· return: 其中,局部变量x在三个函数中彼此无关。 执行结果: x1=10 x2=1.2 x=1 例4.9: 局部变量x的变化 #incl de main() int x=1: int x=2 int x=3: printf("xl=dn”,x):/朱输出值为3*/ /集释放x值3/ printf("x2=dn”, /输出值为2制 体释放x值2/ printf(”x3=d八n”,x):/体输出值为1/ 执行结果: 2=名 x3=1 2.静态局部变量 静态局部变量局限于定义它的函数之内,但并不随函数的退出而消失。 例4.10:静态局部变量 /*Program to illustrate local and static variables * #include main() int i: for(i=0:i<5:i++) as(): } as()
第 4 章 函数与变量 ·33· return; } 其中,局部变量 x 在三个函数中彼此无关。 执行结果: x1=10 x2=1.2 x=1 例 4.9: 局部变量 x 的变化 #include <stdio.h> main() { int x=1; { int x=2; { int x=3; printf(″x1=%d\n″,x); /* 输出值为 3 */ } /* 释放 x 值 3 */ printf(″x2=%d\n″,x); /* 输出值为 2 */ } /* 释放 x 值 2 */ printf(″x3=%d\n″,x); /* 输出值为 1 */ } 执行结果: x1=3 x2=2 x3=1 2. 静态局部变量 静态局部变量局限于定义它的函数之内,但并不随函数的退出而消失。 例 4.10:静态局部变量 /* Program to illustrate local and static variables * / #include <stdio.h> main() { int i; for(i=0;i<5;i++) as(); } as()

·34· C程序设计要点分析与题解 int lv=0: static int sv=0; /*静态局部变量每次调用的保留上次调用的值*/ printf("local=%d,static=%d\n",Iv,sv): v++: sv++: return: 执行结果: local=0,static=0 local=0,static=l local=0,static=2 local=0,static= static=. 静态局部变量的特点: (1)只在第一次调用时,才作初始化赋值,即编译时赋一次值。 (2)下次调用的初值,是前一次退出时留下的值。 3.全程变量 定义在所有函数之外,可供所有函数访问的变量,称为全程变量或全局变量。 例4.11:求输入数的阶乘。 #include int /*定义number全程变量*/ main() printf("Please type in the number In"): scanf("%d",&number): printf("!=d",number,factorial20) factorial2() int result=l: /*定义result局部变量*/ hile(number!=O)/体直接使用全局变量number/ result*=number: number一一;
·34· C 程序设计要点分析与题解 { int 1v=0; static int sv=0; /*静态局部变量每次调用的保留上次调用的值 */ printf(″local=%d,static=%d\n″,1v,sv); 1v++; sv++; return; } 执行结果: 1ocal=0,static=0 1ocal=0,static=1 1ocal=0,static=2 1ocal=0,static=3 1ocal=0,static=4 静态局部变量的特点: (1)只在第一次调用时,才作初始化赋值, 即编译时赋一次值。 (2) 下次调用的初值,是前一次退出时留下的值。 3.全程变量 定义在所有函数之外,可供所有函数访问的变量,称为全程变量或全局变量。 例 4.11: 求输入数的阶乘。 #include <stdio.h> int number; /* 定义 number 全程变量 */ main() { printf(″Please type in the number \n″); scanf(″%d″,&number); printf(″%d!=%d\″,number,factorial2()); } factorial2() { int result=1; /* 定义 result 局部变量 */ while(number!=0) /* 直接使用全局变量 number */ { result*=number; number--; }
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
- 《C语言程序设计》课程授课教案(讲义)程序设计算法流程控制.doc
- 《C语言程序设计》课程授课教案(讲义)C语言程序的基本形式.doc
- 《C语言程序设计》课程教学大纲(公共基础必修课、选修课).doc
- 《过程流体机械》课程教学课件(PPT讲稿)第五章 离心机.ppt
- 《过程流体机械》课程教学课件(PPT讲稿)第三章 离心式压缩机.ppt
- 《过程流体机械》课程教学课件(PPT讲稿)第二章 往复式压缩机.ppt
- 《过程流体机械》课程教学课件(PPT讲稿)第四章 泵.ppt
- 《过程流体机械》课程教学课件(PPT讲稿)第一章 绪论.ppt
- 内蒙古科技大学:《C语言程序设计》课程教学课件(PPT讲稿)第一章 C语言概述.ppt
- 内蒙古科技大学:《C语言程序设计》课程教学课件(PPT讲稿)第四章 程序的控制结构.ppt
- 内蒙古科技大学:《C语言程序设计》课程教学课件(PPT讲稿)第五章 函数.ppt
- 内蒙古科技大学:《C语言程序设计》课程教学课件(PPT讲稿)第三章 简单的C程序设计.ppt
- 内蒙古科技大学:《C语言程序设计》课程教学课件(PPT讲稿)第二章 数据类型、运算符及表达式.ppt
- 内蒙古科技大学:《C语言程序设计》课程教学课件(PPT讲稿)第六章 数组.ppt
- 内蒙古科技大学:《C语言程序设计》课程教学课件(PPT讲稿)第九章 文件操作.ppt
- 内蒙古科技大学:《C语言程序设计》课程教学课件(PPT讲稿)第七章 指针.ppt
- 内蒙古科技大学:《C语言程序设计》课程教学课件(PPT讲稿)第八章 结构体与共用体.ppt
- 内蒙古科技大学:《C语言程序设计》课程教学资源(作业习题)选择题.doc
- 内蒙古科技大学:《C语言程序设计》课程教学资源(作业习题)改错题.doc
- 内蒙古科技大学:《C语言程序设计》课程教学资源(作业习题)填空题.doc
- 《C语言程序设计》课程授课教案(讲义)数组与字符串.doc
- 《C语言程序设计》课程授课教案(讲义)编译预处理.doc
- 《C语言程序设计》课程授课教案(讲义)枚举与位操作.doc
- 《C语言程序设计》课程授课教案(讲义)结构体与共用体.doc
- 《C语言程序设计》课程授课教案(讲义)指针应用.doc
- 《C语言程序设计》课程授课教案(讲义)文件概念.doc
- 《C语言程序设计》课程实验指导(讲义)实验三 各种分支结构.doc
- 《C语言程序设计》课程实验指导(讲义)实验二 顺序结构与输入输出方法.doc
- 《C语言程序设计》课程实验指导(讲义)实验四 循环结构和转移语句.doc
- 《C语言程序设计》课程实验指导(讲义)实验七 定义编译预处理.doc
- 《C语言程序设计》课程实验指导(讲义)实验六 函数与变量.doc
- 《C语言程序设计》课程实验指导(讲义)实验五 数组和字符串.doc
- 《C语言程序设计》课程实验指导(讲义)实验十 指针与数组.doc
- 《C语言程序设计》课程实验指导(讲义)实验八 指针及其运算.doc
- 《C语言程序设计》课程实验指导(讲义)实验九 指针与字符串.doc
- 《C语言程序设计》课程实验指导(讲义)实验一 C语言程序设计准备.doc
- 《C语言程序设计》课程教学资源(作业习题)判断题样题(无答案).doc
- 《C语言程序设计》课程教学资源(作业习题)选择填空题(无答案).doc
- 《C语言程序设计》课程教学资源(作业习题)习题集(末页含答案).ppt
- 《C语言程序设计》课程教学资源(作业习题)选择题样题(无答案).doc