付费下载
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第8章函数
C语言程序设计
第八章函数函数的定义和说明函数的参数和返回值函数的调用指针做函数参数和返回值系统函数8.1函数的定义和说明整体知识
C语言程序设计
第八章函数程序文件函数(C语言程序中最小的结构化模块)一个C程序由一个或多个源文件组成一个源文件可由一个或多个函数组成从main函数开始,调用其他函数后,回到main函数结束分类:标准函数、用户自定义函数无参函数、有参函数
C语言程序设计
第八章函数<类型><函数名>(<参数表>)<参数说明>{<函数体>}函数的定义是按照指定的格式通过若干条语句实现该函数的功能8.1函数的定义和说明函数的定义格式函数体函数头存储类说明符说明符是否可省略别名作用域全局函数extern是外部函数程序级静态函数static否内部函数文件级类型包含存储类和数据类型
C语言程序设计
第八章函数<类型><函数名>(<参数表>)<参数说明>{<函数体>}数据类型指该函数返回值的类型,若无返回值,则为void8.1函数的定义和说明函数的定义格式函数体函数头数据类型为int时可以省略数据类型为void时可以省略VC++6.0中数据类型省略会给出警告
C语言程序设计
第八章函数<类型><函数名>(<参数表>)<参数说明>{<函数体>}参数表:形式参数,0个、1个、多个(逗号隔开)参数说明:给出参数的数据类型8.1函数的定义和说明函数的定义格式函数体函数头TC中要求在参数表下行的参数说明给出参数数据类型VC++6.0中要求参数表中参数名前给出参数数据类型
C语言程序设计
第八章函数<类型><函数名>(<参数表>)<参数说明>{<函数体>}函数体:空函数、说明部分、执行部分8.1函数的定义和说明函数的定义格式函数体函数头voidnothing(){}voidfun(){printf(“OK!\n”);}
C语言程序设计
第八章函数8.1函数的定义和说明函数的定义格式doublemax(x,y)doublex,y;{doubled;d=x>y?x:y;returnd;}省略extern,是全局函数有返回值,返回double型数据有参数,参数为形参x和y,参数说明有两种方法函数体内先是说明语句,后是执行语句,最后是返回语句doublemax(doublex,doubley){doubled;d=x>y?x:y;returnd;}
C语言程序设计
第八章函数8.1函数的定义和说明函数的定义格式f1(a,b)inta,b;{f2(i,j)inti,j;{ returni+j;}}函数定义不能嵌套可以在一个函数体内调用另一个函数f1(a,b)inta,b;{intk;k=f2(a,b);}f2(i,j)inti,j;{returni+j;}
C语言程序设计
第八章函数8.1函数的定义和说明函数的说明方法doublemax();简单说明方法:<类型><函数名>();doublemax(doublex,doubley);doublemax(double,double);原型说明方法:<类型><函数名>(<参数类型说明表>);函数说明是使用一条说明语句实现的,该说明可放在调用函数的函数体内,也可放在调用函数的函数体外,只要函数说明放在该函数的调用语句之前就行VC++6.0要求用原型说明(简单说明也可以)
C语言程序设计
第八章函数8.1函数的定义和说明函数的说明方法定义时省略了数据类型说明的,不必说明否则,函数定义在后,调用在前的,必须说明;函数定义在前,调用在后的,可说明也可不说明
C语言程序设计
第八章函数8.2函数的参数和返回值函数的参数形式参数(形参):定义函数时,括号内的变量名实际参数(实参):调用函数时,括号内的变量名//例8.1#include<stdio.h>voidmain(){doublex,y,z,dadd();x=5.2;y=7.8;z=dadd(x,y);printf(“%.2lf\n”,z);}doubledadd(doublea,doubleb){returna+b;}1、去掉主函数中对于函数dadd()的说明,会怎样?2、将x和y改为3和4,会怎样?
C语言程序设计
第八章函数8.2函数的参数和返回值函数的参数定义函数时,形参不占内存单元调用函数时,实参值赋给形参,分配内存单元函数调用结束后,形参被释放形参的作用域在函数体内1、要求形参和实参类型相同、个数相等2、实参与形参属于不同函数,彼此无关,允许同名3、单向传递,只能由实参传给形参4、实参与形参各自占有不同单元
C语言程序设计
第八章函数8.2函数的参数和返回值函数的返回值return<表达式>;return(<表达式>);returna+b;1、计算表达式的值2、把1计算出的结果转化为函数数据类型的类型,相同类型不用转化3、把2的值和数据类型返回给调用函数4、执行调用函数后面的语句
C语言程序设计
第八章函数8.2函数的参数和返回值函数的返回值//例8.2#include<stdio.h>intmax(inta,intb){returna>b?a:b;}voidmain(){intx1,x2,x3,x4,m;x1=5;x2=8;x3=25;x4=16;m=max(x1,x2);m=max(m,x3);m=max(m,x4);printf(“max=%d\n”,m);}
C语言程序设计
第八章函数8.3函数的调用传值调用从main函数开始,main函数中调用一个或多个函数,被调用函数中再嵌套调用其他函数,最后回到main函数结束格式:函数名(实参列表);1、无参函数,括号不能省2、实参列表必须与形参一一对应
C语言程序设计
第八章函数8.3函数的调用传值调用将调用函数的实参值按位置顺序传递给被调用函数的形参要求实参和形参个数相等、对应类型相同1、传值调用:传递变量或表达式值2、传址调用:传递变量的地址值调用方式传递机制要求特点传值调用实参复制一个副本给形参实参是表达式或变量,形参为相同类型的变量名不能改变实参的值;对于复杂类型的变量会增加函数调用的时间和空间开销传址调用实参地址值传递给形参的指针,使形参指针指向实参变量实参是地址值,形参是相同类型的指针名可以通过形参指针来改变实参的值;只传地址,可避免时间和空间开销
C语言程序设计
第八章函数8.3函数的调用传值调用
C语言程序设计
第八章函数8.3函数的调用传址调用
C语言程序设计
第八章函数8.3函数的调用传值调用//例8.3#include<stdio.h>voidfun();voidmain(){inta,b;a=18;b=27;fun(a,b);printf(“%d,%d\n”,a,b);}voidfun(intx,inty){x+=4;y-=5;printf(“%d,%d\n”,x,y);}
C语言程序设计
第八章函数8.3函数的调用传址调用//例8.4#include<stdio.h>voidfun();voidmain(){inta,b;a=18;b=27;fun(&a,&b);printf(“%d,%d\n”,a,b);}voidfun(int*x,int*y){*x+=4;*y-=5;printf(“%d,%d\n”,*x,*y);}区别1、实参是地址值,形参是相同类型的指针,使形参的指针指向实参变量区别2、可改变实参的值
C语言程序设计
第八章函数8.3函数的调用传址调用//例8.5#include<stdio.h>voidfun(doublea,double*b,double*c){*b+=a;*c-=a;}voidmain(){doublex=15.3,y=10.6;fun(x-y,&x,&y);printf(“%.2lf,%.2lf\n”,x,y);}
C语言程序设计
第八章函数8.3函数的调用嵌套调用在被调用函数中还可以调用另外一个函数
C语言程序设计
第八章函数8.3函数的调用嵌套调用//例8.6#include<stdio.h>voidA();voidB();voidC();voidmain(){printf("I'minmain().\n");A();printf("I'mfinallybackinmain()\n");}voidA(){printf("Now,I'minA().\n");B();printf("Here,I'mbackinA()\n");}voidB(){printf("Now,I'minB().\n");C();printf("BackinB()\n");}voidC(){printf("Andnow,I'minC().\n");}
C语言程序设计
第八章函数8.3函数的调用嵌套调用intfun(intn){ inti,sum=0; for(i=1;i<=n;i++) sum+=s(i); returnsum;}#include<stdio.h>//例8.78_7.cvoidmain(){ intfun(); intn=10,m;m=fun(n); printf("fun(%d)=%d\n",n,m);}ints(intn){ inti,sum=0; for(i=1;i<=n;i++) sum+=i; returnsum;}思考:如何将fun()和s()合二为一?
C语言程序设计
第八章函数8.3函数的调用嵌套调用intsum(intk,intn){ intpower(); inti,s=0; for(i=1;i<=n;i++) s+=power(i,k); returns;}intpower(intm,intn){ inti,p=1; for(i=1;i<=n;i++) p*=m; returnp;}//例8.88_8.c#include<stdio.h>#defineK3#defineN5voidmain(){ intsum(); printf("从1到%d的%d次方的和为:",N,K); printf("%d\n",sum(K,N));}
C语言程序设计
第八章函数8.4指针做函数参数和返回值基本数据类型的指针做函数参数//例8.12#include<stdio.h>voidfun();voidmain(){ intx,y,z; fun(3,5,&x); fun(6,x,&y); fun(x,y,&z); printf("x=%d,y=%d,z=%d\n",x,y,z);}voidfun(inta,intb,int*c){ b+=a; *c=b-a;}
C语言程序设计
第八章函数8.4指针做函数参数和返回值数组名做函数参数——实参和形参为数组名//例8.13编程对整型数组做升序排列—复习一维数组的指针表示从要排序的数组中找到最小的一个元素,与数组首元素互换位置;再从剩下的元素中找到次小的元素与第二位元素互换位置;以此类推,得到排序好的数组inta[]={23,65,-5,0,22,98,65,11};//待排序数组
C语言程序设计
第八章函数8.4指针做函数参数和返回值#include<stdio.h>inta[]={23,65,-5,0,22,98,65,11};//全局待排序数组voidsort(intb[],intn){//排序函数
inti,j,k,temp; for(i=0;i<n-1;i++){ k=i;//数组下标
for(j=i+1;j<n;j++) if(b[j]<b[k]) k=j; if(k!=i){ temp=*(b+i); *(b+i)=*(b+k); *(b+k)=temp; } }}voidmain(){ inti; sort(a,8); for(i=0;i<8;i++) printf("%5d",a[i]); printf("\n");}
C语言程序设计
第八章函数8.4指针做函数参数和返回值数组名做函数参数——实参和形参为数组名//例8.14二维数组名做函数参数#include<stdio.h>inta[][3]={3,6,2,8,4,1,5,7,9};voidfun(intb[][3]){ **b=11; *(*(b+1)+1)=21; *(*(b+2)+2)=31;}voidmain(){ inti,j; fun(a); for(i=0;i<3;i++){ for(j=0;j<3;j++) printf("%5d",a[i][j]); printf("\n"); }}
C语言程序设计
第八章函数8.4指针做函数参数和返回值字符指针做函数参数charstr[]="Cprogramming";char*p;p=str;或:
char*str="Cprogramming";字符串的处理是用字符型数组来实现的。用char型数组处理的字符串都可以用char型指针来处理。通常把char型指针称为字符型指针或字符指针。在程序中定义一个字符指针变量,并将字符串的首地址赋给它,然后通过字符指针变量来访问字符串。
C语言程序设计
第八章函数8.4指针做函数参数和返回值字符指针做函数参数/*用字符数组实现字符串操作*/main(){charstr[]="etostudyC!";inti;printf("%s\n",str);for(i=0;i<=7;i++)printf("%c",str[i]);printf("\n");}/*用字符指针实现字符串操作*/main(){char*str="etostudyC!";inti;printf("%s\n",str);for(i=0;i<=7;i++)printf("%c",*(str+i));printf("\n");}
C语言程序设计
第八章函数8.4指针做函数参数和返回值字符指针做函数参数字符指针与字符数组的区别:字符数组是由若干个元素组成,每个元素存放一个字符;而字符指针变量存放的是字符串的首地址。赋值方式不同。字符数组只能对各个元素分别赋值,而字符指针只需赋给字符串的首地址就可以了。字符指针占用的内存要少于字符数组。指针变量的值是可以改变,而字符数组的数组名虽然代表地址,但它的值是不会变化。区别举例:如:char*str;str="etostudyC!";以下对字符数组的赋值是错误的:charstr[80];str[]="etostudyC!";
C语言程序设计
第八章函数8.4指针做函数参数和返回值字符指针做函数参数//例8.15#include<stdio.h>voidstrcopy(char*p,char*q){ while((*p++=*q++)!='\0') ;}voidmain(){ chars1[20]="IloveChina"; chars2[]="IloveBeijing"; strcopy(s1,s2); printf("s1=%s\ns2=%s\n",s1,s2);}
C语言程序设计
第八章函数8.4指针做函数参数和返回值指向数组的指针做函数参数_指针数组和数组指针指针数组:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身决定,它是“储存指针的数组”的简称数组指针:首先它是一个指针,它指向一个数组,永远占4个字节(32位),它是“指向数组的指针”的简称int(*a)[10];//数组指针int*a[10];//指针数组
C语言程序设计
第八章函数8.4指针做函数参数和返回值指向数组的指针做函数参数_指针数组和数组指针
C语言程序设计
第八章函数8.4指针做函数参数和返回值指向数组的指针做函数参数_指针数组和数组指针
C语言程序设计
第八章函数8.4指针做函数参数和返回值指向数组的指针做函数参数_指针数组和数组指针
C语言程序设计
第八章函数8.4指针做函数参数和返回值指向数组的指针做函数参数指针可以指向复合类型:指向指针的指针指向数组的指针inta[10];int(*pa)[10]=&a;等价于int(*pa)[10];pa=&a;取整个数组的首地址赋给指针pa&a[0]和&a的区别*pa和pa的意义a[i]等价于(*pa)[i]例8_000
C语言程序设计
第八章函数8.4指针做函数参数和返回值指向数组的指针做函数参数#include<stdio.h>//例8.16intscore[4][3]={{90,85,80},{82,92,85},{70,89,81},{80,76,91}};voidsearch();voidmain(){ intd; printf("输入学生学号1-4:"); scanf("%d",&d); search(score,d);}voidsearch(int(*pa)[3],intn){ inti; printf("学号为%d的学生成绩为:\n",n); for(i=0;i<3;i++) printf("%5d",*(*(pa+n-1)+i)); printf("\n");}
C语言程序设计
第八章函数8.4指针做函数参数和返回值二级指针(指针数组)做函数参数#include<stdio.h>//例8.17voidf1(char**pp,intn);voidmain(){ staticchar*s[4]={"123","456","789","345"}; f1(s,4);}voidf1(char**pp,intn){ inti; for(i=0;i<n;i++){ *(pp+i)="987"; printf("%s\n",*pp++); }}
C语言程序设计
第八章函数8.4指针做函数参数和返回值指针函数返回值为指针的函数称为指针函数定义格式:<类型>*<函数名>(<参数表>){<函数体>}调用指针函数时,函数的返回值是一个地址值,通常被赋给一个相同类型的指针
C语言程序设计
第八章函数8.4指针做函数参数和返回值指针函数#include<stdio.h>//例8.18doubledou[3][4]={{5.2,4.8,5.0,5.2},{4.9,4.8,3.7,4.5},{4.8,5.5,3.9,5.1}};voidmain(){ double*pd,*search(),s=0; inti,n; scanf("%d",&n); pd=search(dou,n); for(i=0;i<4;i++){ s+=*(pd+i); printf("%6.2lf",*(pd+i)); } printf("\n%6.2lf\n",s);}double*search(double(*dou1)[4],intn){ double*pd1; pd1=*(dou1+n-1); returnpd1;}
C语言程序设计
第八章函数8.4指针做函数参数和返回值指针函数#include<stdio.h>//例8.19char*fun(char*s,intn){ staticchars1[80]; inti; for(i=0;i<n;i++) s1[i]=s[n+i-2]; s1[i]='\0'; returns1;}voidmain(){ chars2[]=“abcdefgh”; char*p; p=fun(s2,5); printf("%s\n",p);}
C语言程序设计
第八章函数8.4指针做函数参数和返回值指向函数的指针定义格式:<类型>(*<指向函数的指针名>)(<参数表>)类型指所指向的函数的类型double(*pf)(double);赋值:通常使用某个函数的名称给指向函数的指针赋值或初始化doubefun(doubled){<函数体>}pf=fun;使用指向函数的指针调用该函数的方法:(*<指向函数的指针名>)(<实参表>);doublem=(*pf)(d);等价于doublem=fun(d);一个函数可以直接调用,也可以通过指向这个函数的指针来调用
C语言程序设计
第八章函数8.4指针做函数参数和返回值指向函数的指针做函数参数#include<stdio.h>//例8.20#include<math.h>#definePI3.1415voidfun(doublen,double(*pf)(double)){ printf("%.2lf\n",(*pf)(n));}voidmain(){ doublesin(),cos(); doublex,a; a=30; x=PI/180*a; printf("sin(%.2lf)=",a); fun(x,sin); printf("cos(%.2lf)=",a); fun(x,cos);}
C语言程序设计
第八章函数8.4指针做函数参数和返回值系统函数函数说明功能注意求整形数绝对值函数intabs(intx)返回参数x的绝对值该函数的返回值在0-32767范围内求长整型数绝对值函数longlabs(longx)返回参数x的绝对值求浮点数绝对值函数doublefabs(doublex)返回参数x的绝对值函数说明功能注意求常用对数函数doublelog10(doublex)
返回参数x的常用对数值x>0求自然对数函数doublelog(doublex)
返回参数x的自然对数值x>0求平方根函数doublesqrt(doublex)返回参数x的正平方根值x>=0
C语言程序设计
第八章函数8.4指针做函数参数和返回值系统函数函数说明功能注意求指数函数doubleexp(doublex)返回参数x的指数求x的y次方函数doublepow(doublex,doubley)返回参数x的参数y次方不能出现x和y都<h或<=0,y不是整数的情况函数说明功能注意求正弦函数doublesin(doublex)返回参数x的正弦值参数x是以弧度为单位,角度a转换为弧度的方法:x=a*PI/180求余弦函数doublecos(doublex)返回参数x的余弦值求正切函数doubletan(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年荆州市沙市区事业编单位人员招聘笔试备考题库及答案详解
- 2026年山西省吕梁市中小学编制教师招聘笔试参考试题及答案详解
- 2026年承德市双滦区中小学编制教师招聘笔试备考试题及答案详解
- 2026年乌鲁木齐市新市区中小学编制教师招聘笔试备考试题及答案详解
- 2026年南宁市兴宁区中小学编制教师招聘考试模拟试题及答案详解
- 2026年北京市西城区中小学编制教师招聘笔试备考题库及答案详解
- 2026年北京市海淀区事业编单位人员招聘笔试备考试题及答案详解
- 2026年阜阳市颍东区中小学编制教师招聘考试备考试题及答案详解
- 2026年兰州市安宁区中小学编制教师招聘笔试备考试题及答案详解
- 2026年北海市银海区中小学编制教师招聘考试参考试题及答案详解
- 汇文中学分班试题及答案
- 广州市荔湾区白鹤洞街道公开招考1名合同制工作人员管理单位遴选500模拟题附带答案详解
- 先天性胆道闭锁(共29张课件)
- 人教版(2024新版)八年级上册物理《开启科学探索之旅》教学设计
- GB/T 44373-2024智能网联汽车术语和定义
- 人教版三年级《语文下册》期末试卷(下载)
- 马工程《公共财政概论》课后习题库(含)参考答案(可做期末复习和试卷)
- 2023-2024学年湖南省衡阳市小学语文五年级期末自我评估考试题附参考答案和详细解析
- GB/T 27648-2011重要湿地监测指标体系
- 戏剧影视文学课程《影视文学欣赏》课程教学大纲
- 《会计基础与实务》教案(第5版)
评论
0/150
提交评论