版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、思考,已知有下面的变量定义,如何将x和y的值交换一下: int x = 5, y = 10;,下面的运算方式是否可行? x = y; y = x;,常见的处理方式: (1)t = x; x = y; y = t; /借助了另一个变量 (2)x = x+y; y = x-y; x = x-y; /有点危险,主要内容,函数定义 函数调用,函数是C程序的基本构造块,一个较大的应用程序一般分为若干个模块,每个模块用来实现一个特定的功能。 函数是C程序的基本模块。 在前面学习的C程序中,都有一个名称为main的函数,每个完整的C程序从该函数开始运行。,什么是函数?,A function is a set
2、 of statements that have been collected together and given a name. 一个函数是具有名字的一个语句序列。 在结构上,一个函数包含函数首部和函数体两部分,通过使用函数,程序结构更清晰。,C函数的基本要素,一个函数由函数首部和函数体两部分构成 函数首部包括:函数名、函数的返回值、函数的参数 函数体包括:声明部分(数据说明)、语句部分(运算),int main() int inches, feet, fathoms; printf(input fathoms:); scanf(%d, ,声明部分: 三个值将变化的整数,语句部分: 输入一
3、个英寻数, 进行单位换算,函数体,函数首部:,使用库函数,在前面编写的程序中,很多处理(运算)都是通过使用库函数完成的。 输入数据:scanf()、getchar()、gets(). 输出数据:printf()、putchar()、puts(). 数学函数:abs()、sqrt()、pow()、sin().,函数原型 函数的实现与调用格式说明(接口) 库函数的原型一般在头文件中说明 / #include 用户(程序员)自定义的函数原型在适当的地方说明,使用库函数(续),在使用库函数时,要遵循一定的要求。 printf(格式控制串,输出表列) 正确:printf(%d %f,a,b) 错误:pr
4、intf(%d,a, %f,b) double sqrt(double x) 正确:b = sqrt(a) 错误:b = sqrt() 错误:sqrt(a,b),编写程序语句时通过使用一个函数完成相应的运算称为函数调用,函数的功能和使用函数的要求是通过函数定义确定的,函数定义和函数调用,编写函数首部和函数体的内容就是进行函数定义,按照函数定义时给定的函数名使用函数称为函数调用,库函数是已经编写好的函数,编写程序时可直接调用,要学习自己编写函数,并了解更多的库函数的使用方法,函数定义的一般形式,函数定义的一般形式是:,类型标识符 函数名(形式参数表) 声明部分; 语句部分; ,其中,类型标识符指
5、函数返回值的类型,例如,定义一个函数,将给定一个摄氏温度转换为华氏温度,并将华氏温度返回。,double CelsToFahr(double c) double t; t = 9.0 / 5 * c + 32; return ( t ); ,int main() double x; double y; printf(Celsius to Fahrenheit table:n); for(x = 0; x = 100; x += 5) y = CelsToFahr(x); printf(%.1lf-%.1lft, x, y); return 0; ,函数定义,函数调用,#include #inc
6、lude double CelsToFahr(double c) /函数定义 double t; t = 9.0 / 5 * c + 32; return t ; int main() double x; double y; printf(Celsius to Fahrenheit table:n); for(x = 0; x = 100; x += 5) y = CelsToFahr(x); /函数调用 printf(%.1lf-%.1lft, x, y); system(pause); return 0; ,#include #include double CelsToFahr(doubl
7、e c); /声明函数原型 int main() double x; double y; printf(Celsius to Fahrenheit table:n); for(x = 0; x = 100; x += 5) y = CelsToFahr(x);/函数调用 printf(%.1lf-%.1lft, x, y); system(pause); return 0; double CelsToFahr(double c) /函数定义 double t; t = 9.0 / 5 * c + 32; return t ; ,函数定义示例,定义一个函数,其功能是求解并返回两个整数的最大公约数
8、,int Gcd(int m, int n) int r = m % n; while (r) m = n; n = r; r = m%n; return n; ,函数定义示例,定义一个函数,其功能是判断一个整数是否是素数,返回值为1、0分别表示该整数是/不是素数。 返回值为是/否的函数称作“谓词函数”,int Isprime(int n) int k; if (n2) return 0; for (k=2; kn; k+) if (n%k=0) return 0; return 1; ,函数参数,形式参数(形参)和实际参数(实参),类型标识符 函数名(形式参数表) 声明部分; 语句部分; ,
9、double CelsToFahr(double c) double t; t = 9.0 / 5 * c + 32; return (t); ,调用函数时的参数是实际参数(实参) x = 35; y = CelsToFahr(x); y = CelsToFahr(50);,函数定义中函数首部的参数称为形式参数(形参),形参c,实参x,实参50,形参和实参,函数定义中函数首部的参数称为形参 调用函数时的参数是实参,int Gcd(int m, int n) / 函数定义 int r = m % n; while (r) m = n; n = r; r = m%n; return n; ,形参m
10、和n,gcd = Gcd(10,4); printf(“%d”,Gcd(a,b);,实参,形参和实参,形参可看作是函数中定义的变量,所不同的是其初始值由实参提供,函数未被调用时,形参不占用存储空间,记事本,实参与形参的类型应相同或赋值兼容,实参向形参传递值,形参不能向实参传递值,实参可以是常量、变量或表达式,#include double CelsToFahr(double c) return (9.0 / 5 * c + 32 ); void swap( int a, int b) int temp = (a) (b) ? (a) : (b); return temp; int main(
11、) double x; double y; printf(Celsius to Fahrenheit table:n); for(x = 0; x = 100; x += 5) y = CelsToFahr(x); printf(%.1lf-%.1lft, x, y); return 0; ,#include void swap(int a, int b) int temp; printf(In swap: a = %d, b = %dn, a, b); temp = a; a = b; b = temp; printf(In swap: a = %d, b = %dn, a, b); ret
12、urn; int main() int x = 5, y = 10; printf(In main: x = %d, y = %dn, x, y); if(xy) swap(x,y); printf(In main: x = %d, y = %dn, x, y); return 0; ,函数的返回值和return语句,函数的返回值由return语句带回,return语句使被调用函数结束执行并返回到调用它的地方,定义一个函数,判断给定的一个十进制正整数是否为素数。,/*判断正整数d是否为素数,若是返回1,否则返回0*/ int isPrime(int n) int i; if (n 2) ret
13、urn 0; for(i = 2; i = sqrt(n)+1; i+) if ( n % i = 0 ) return 0; return 1; ,记事本,return 表达式;,函数调用,函数调用的基本格式: 函数名(实际参数表),主调函数和被调用函数,调用函数时,表达式(语句)所在的函数称为主调函数 实参在主调函数中 形参在被调用函数中,记事本,函数调用(续),当一个函数被调用时,执行以下步骤: 计算每个实际参数的值; 将每个实参的值拷贝至对应的形参变量; 执行被调用函数的语句,直到遇到一条return语句或函数结束; 计算return语句中表达式的值; 返回主调函数,用返回的值替换函数
14、调用,然后继续执行主调函数的后续语句。,记事本,函数原型,函数原型(function prototype) 返回值的类型 函数名(形式参数类型表) ANSI C标准中,函数原型使编译程序可对函数调用的合法性进行检查 函数声明(declaration)的目的是:对将要调用的函数的使用方式通知编译程序,声明格式: 返回值的类型 函数名(形式参数表),记事本,void main( ) double x; double y; printf(Celsius to Fahrenheit table:n); for(x = 0; x = 100; x += 5) y = CelsToFahr(x); pri
15、ntf(%3g-%3gt, x, y); double CelsToFahr(double c) double t; t = 9.0 / 5 * c + 32; return ( t ); ,double CelsToFahr(double c); /函数原型,例题,定义一个求n的阶乘的函数。函数返回n!,int main ( ) int i = 1; for(i = 1; i = 10; i+) printf(%d! = %ldn,i,fact(i); return 0; ,long fact(int n) long t = 1, i = 1; for(i = 1; i = n; i+) t = t * i; return ( t ); ,不同函数中的变量(局部变量)是互不干扰、相互独立的,练习:求组合数,书架上有n本不同的书,从中任取k本,有多少种取法?,long combinations(int n, int k) return ( fact(n)/(fact(k)*fact(n-k) ); ,long fact(int n) long t = 1, i = 1; for(i = 1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2027年焦作文旅职业学院单招综合素质考试题库及完整答案详解(必刷)
- 2025年泸州医疗器械职业学院单招职业技能考试模拟试卷及参考答案详解【新】
- 2027年山东工程技师学院高职单招职业适应性测试考试题库含答案详解【A卷】
- 2025年济宁现代机电学院高职单招职业适应性测试考试题库完整答案详解
- 2024年成都农业科技职业学院高职单招职业技能考试模拟试卷及参考答案详解(培优A卷)
- 2025年贵州黄果树职业学院单招职业技能考试模拟试卷附参考答案详解(考试直接用)
- 2026年河南建筑职业技术学院单招综合素质考试模拟试卷及答案详解【网校专用】
- 2027年山东宁阳职业学院单招职业技能考试模拟试卷【模拟题】附答案详解
- 2027年湖南浏阳河职业学院高职单招职业适应性测试考试模拟试卷带答案详解(基础题)
- 2024年济宁现代商贸职业学院高职单招职业技能考试模拟试卷附参考答案详解【B卷】
- 广东省揭阳市2025-2026学年高二下学期期末考试化学试题(原卷版)
- 2026上海松江商业发展集团有限公司招聘笔试备考试题及答案详解
- 2026-2030中国AKT抑制剂行业市场现状分析及竞争格局与投资发展研究报告
- 中国双相障碍防治指南(2025版)下载
- 游乐园安全生产管理制度
- 外墙面保温砂浆施工监理实施细则
- 2026年注册信贷分析师(CCRA)能力提升B卷题库带答案详解AB卷
- 2025神介学苑历年考核真题及答案全收录
- JJF 2376-2026 智能网联汽车自动泊车性能 计量测试规范
- 跨端洞见 增长新篇-2026年跨端生态行业白皮书
- 2025年澳门大学第一轮面试题库及答案
评论
0/150
提交评论