




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
函数本章目标理解模块化设计思想掌握函数的定义和调用方法掌握C语言的参数传递方法掌握变量的作用域和存储方式
函数是能够完成一定任务的、相对独立的程序段,可以被看作组成一个程序的逻辑单元。函数概述(1)简化程序设计(2)便于调试和维护
什么是函数?
为什么使用函数?
标准函数(库函数) 由系统提供的函数,用户不必自己定义,可以直接调用。
用户自定义函数 根据函数所要完成的功能自己定义函数的格式。函数的分类(从使用角度)5.1函数概述函数的定义函数的定义形式{inti;longs;s=1;for(i=1;i<=n;i++)s=s*i;返回s值}fac()函数名intn形参变量longint返回值类型函数体函数的定义返回值类型符
函数名([形式参数列表]){
函数体}类型符都可是什么?intcharfloatdoublevoid函数名怎么起?标识符命名字母或下划线开头,后面是字母、数字下划线形参列表什么样?可以为空类型变量多个参数用逗号分隔函数如何返回值?return表达式函数的定义返回值的类型怎样确定?返回值的类型应该与函数类型一致。可以有多条return语句吗?返回值的类型为空类型(void)。可以没有return语句(或return后的表达式为空)吗?执行到哪一条return语句,哪一条起作用。形参变量作为已知值函数的定义说明:(1)函数原型声明语句最后的分号不能省略,其作用是表示该语句是进行函数声明而不是函数定义。(2)在原型声明中,形式参数名可以省略。(3)如果被调用函数的定义出现在调用函数之前,可以不对被调用函数进行原型声明。(4)如果被调用函数已在所有函数定义之前进行了原型声明,则在各个调用函数中不必再对该函数进行原型声明。
math.h文件中的部分内容int _Cdeclabs(intx);double _Cdeclcos
(doublex);double _Cdeclexp(doublex);double _Cdecllog10(doublex);double _Cdeclpow(doublex,doubley)double _Cdeclsin(doublex);double _Cdeclsqrt(doublex);标准函数的函数声明#include<math.h>voidmain(){printf("%f",sqrt(4));}说明:(1)函数总是在某个函数体中被调用。(2)函数调用可以在结尾处加上分号,单独作为一条语句。(3)对于有返回值的函数,其调用也可以出现在某条语句或表达式中。函数调用与参数传递printf("%d",fac(3));5函数调用与参数传递函数的调用过程main(){……
s=fac(3);……}longfac(intn){
inti;longs;s=1;for(i=1;i<=n;i++)s=s*i;returns;}①②③④⑤函数调用与参数传递参数传递longfac(intn);main(){
……
s=fac(3);
……}longintfac(intn){
inti;longs;s=1;
for(i=1;i<=n;i++)
s=s*i;returns;}3intn参数传递。
程序代码如下:
#include<stdio.h>voidsa,intb);/*声明函数原型*/voidmain(){intx,y;x=10;y=20;
s);/*调用函数*/
printf("%d,%d",x,y);}voidsa,intb)/*定义函数*/{intt;t=a;a=b;b=t;}函数调用与参数传递程序输出如下:10,20
函数调用与参数传递
数组参数
一维数组参数
定义voidprintarray(inta[]){…..}调用printarray(b);其中b为数组名二维数组参数定义voidprintarray(inta[][4]){…}
调用printarray(b)函数调用与参数传递函数的递归调用一个函数不仅可以调用其它函数,还可以直接或间接调用它本身,这种调用过程被称作递归(recursion)。
A(){A();}n!=(n-1)!*n使用fac求阶乘,可表示成fac(n)=fac(n-1)*nlongintfac(intn){if(n==0)return1;elsereturnn*fac(n-1);}函数本次课小结理解模块化设计思想掌握函数的定义和调用方法掌握C语言的参数传递方法函数与变量的作用域变量的作用域变量的存储类别局部变量和全局变量一、变量的作用域一个C程序由多个函数构成,每个函数内部为一个范围。吉林北京变量的分类:局部变量全局变量地区全国局部变量和全局变量三、全局变量1、全局变量又称为外部变量,是在函数之外定义的变量,其作用范围是从定义的位置开始到本源程序文件的结束。2、可使用全局变量获得多于一个的返回值,增强函数之间的数据联系通道。3、降低了函数的通用性(移植)局部变量和全局变量intc;g1(){inta;}intd;g2(){intb;}intc;F1(){intc;c=2;}F2(){printf("%d",c);}局部变量和全局变量变量的重名问题(1)不同函数内的局部变量重名互不影响(2)全局变量与局部变量重名在定义局部变量的函数内,局部变量有效(3)全局变量重名写出下面程序的运行结果#include<stdio.h>voidf1(),f2(int);intk;voidmain(){intk;k=3;printf("%d\n",k);f1();f2(4);}voidf1(){printf("%d\n",k);}voidf2(intk){printf("%d\n",k);}函数与变量的作用域变量的作用域变量的存储类别动态与静态存储变量一、动态存储变量1、系统在运行期间根据需要对存储空间进行动态分配的变量称为动态存储变量。2、形参变量是动态存储变量3、auto局部变量是动态存储变量
autointainta动态与静态存储变量voidf1(){intc;c=4;}voidmain(){inta,b;a=b=3;f1();}main334f1动态与静态存储变量二、静态存储变量1、系统在程序运行期间为其分配固定存储空间的变量。2、全局变量是静态存储变量3、static声明局部变量是静态存储变量
staticinta动态与静态存储变量voidf1(){staticintd=4;intc=3;d++;c++;}voidmain(){inta,b;a=b=3;f1();}main333f14d54动态与静态存储变量intfun(inti){staticintp=1;p=p*i;returnp;}voidmain(){inti;for(i=1;i<=6;i++)printf(“%d\n”,fun(i);}1p2624120720voidmain(){inti,s=0;for(i=1;i<=6;i++)s=s+fun(i);printf(“%d”,s);}1!+2!+3!+4!+5!+6!函数应用举例1、使用函数求出所有的水仙花数分析:判断范围:100~999假如:有一个函数fun可直接判断一个数是不是水仙花数,那么怎么编?voidmain(){intk;for(k=100;k<=999;k++)if(k是水仙花数)
printf(“%d\n”,k);}fun(k)==1函数应用举例voidmain(){intk;for(k=100;k<=999;k++)if(fun(k)==1)
printf(“%d\n”,k);}fun(intn)int{inta,b,c;a=n/100;b=(n-a*100)/10;c=a%10;if(a*a*a+b*b*b+c*c*c==n)return1;elsereturn0;}函数应用举例2、编写一个函数能够实现strcmp的功能
printf("%d",strcmp("aa","cc"));
结果为:-2
strcmp(chars1[],chars2[])int{inti;for(i=0;s1[i]!='\0'&&s2[i]!='\0';i++)if(s1[i]-s2[i]!=0)break;returns1[i]-s2[i];}
函数应用举例3、编写一个函数能够实现strlen的功能
printf("%d",strlen("aa"));
结果为:2
strlen(chars[])int{inti,count=0;for(i=0;s[i]!='\0';i++)count++;returncount;}函数应用举例4、编写一个函数能够实现判断任意一个数是否为素数。for(I=2;I<=100;I++)if(prime(I))printf("%d",I);prime(intn)int{intj;for(j=2;j<=n-1;j++)if(n%j==0)return0;return1;}函数应用举例函数习题课1、试编制一个求最大公约数的函数,并利用它求任意两个数的最大公约数和最小公倍数。gongyue(inta,intb)int{intr;r=m%n;while(r!=0){m=n;n=r;r=m%n;}
}returnn;函数应用举例voidmain(){inta,b;scanf("%d,%d",&a,&b);printf("gongyueis:%d,gongbeiis:%d",gongyue(a,b),a*b/gongyue(a,b));}例5-17编程处理一批数据,要求:(1)随机产生20个[10,99]范围内的整数;(2)以每行5个数据的形式输出这批整数;(3)对这批数据进行升序排列,并输出排序后的结果;(4)计算这批数据的平均值;(5)分别统计大于、等于和小于平均值的数据个数。分别设计5个函数进行数据的随机生成、输出、排序、计算平均值和统计。voidgetdata(inta[])voidprintdata(inta[],intn)voidsortdata(inta[])doubleavg(inta[])voidcount(inta[],doubleavg,intb[])voidmain(){inta[20],b[3];
doublex;getdata(a);
printdata(a,20);sort(a);printdata(a,20);x=avg(a);
count(a,x,b);printdata(b,3);}函数编程函数编程voidgetdata(inta[]){inti;randomize();for(i=0;i<20;i++)a[i]=random(90)+10;/*random(90)返回0~N的随机整整*/}
函数编程voidprintdata(inta[],intn){inti;for(i=0;i<n;i++){if(i%5==0)printf("\n");printf("%d",a[i]);}}函数编程voidsort(inta[]){inti,j,k,t;for(i=0;i<19;i++){k=i;for(j=i+1;j<20;j++)if(a[k]>a[j])k=j;t=a[i];a[i]=a[k];a[k]=t;}}函数编程doubleavg(inta[]){doubles;inti;s=0.0;for(i=0;i<n;i++)s=s+a[i];return(s/n);}函数编程voidcount(inta[],intn,floatx,intb[]){inti;b[0]=b[1]=b[2]=0;for(i=0;i<n;i++)if(a[i]>x)b[0]++;elseif(a[i]==x)b[1]++;elseb[2]++;}
2、选择题在C语言程序中,
A、函数的定义可以嵌套,但调用不可以嵌套
B、函数的定义不可以嵌套,但函数的调用可以嵌套
C、函数的定义和函数的调用都不可以嵌套
D、函数的定义和调用均可以嵌套嵌套定义:voidA(){inta,b;voidB(){intc;…}…}在以下所列的各函数原型声明中,正确的是:
A、voidplay(var:Integer,varb:Integer);B、voidplay(inta,b);C、voidplay(inta,intb);D、Subplay(aasinteger,basinteger)在函数调用语句f(a,b,(c,d));中,实参个数是_______。donut()函数接受一个整数,并输出若干个0,输出0的个数等于所接受整数的值。函数原型为:random函数不接收任何数据,但返回一个整数。max()函数接收一组整数,并返回一个整数voiddonut(intn);intrandom();intmax(inta[]);charntochar(intn);程序阅读题func(inta,intb){staticintm=0,I=2;I+=m+1;m=I+a+b;returnm;}voidmain(){intk=4,m=1,p;p=func(k,m);printf("%d",p);p=func(k,m);printf("%d",p);}4k1mp0m2I4a1b3884a1b121717程序阅读题intf(intn){if(n==0)return1;elsereturnf(n-1)*n;}voidmain(){printf("%d",f(6));}f(6)=f(5)*6=f(4)*5*6=f(3)*4*5*6=f(2)*3*4*5*6=f(1)*2*3*4*5*6=f(0)*1*2*3*4*5*6=1*2*3*4*5*6=6!程序阅读题voids(inta,intb){intt;t=a;a=b;b=t;printf("%d,%d\n",a,b);}voidmain(){intm=3,n=4;s(m,n);printf("%d,%d\n",m,n);}4a3b3m4n3a4b3m4n程序填空题下面的程序是统计高于平均分的人数,输入成绩时,-1表示输入结束。_____fun(_______,intn){doublesum=0,avg;intI,count=______;for(I=0;I<n;I++)sum+=a[I];avg=_______;for(I=0;I<n;I++)if(________)count++;returncount;}main(){doublea[100],I=0;doublex;____________;while(x!=-1){a[I]=x;________;}printf("%d",_fun(____));}
intdoublea[]0sum/Ia[I]>avgscanf("%f",&x);I++;a,I宏定义#definesqr(x)x*xvoidmain(){printf("%d",sqr(2+3));}printf("%d",2+3*2+3);宏定义#definesqr(x)(x)*(x)voidmain(){printf("%d",sqr(2+3)/sqr(2+3));}printf("%d",(2+3)*(2+3)/(2+3)*(2+3));输入10个数,输出其中与平均值之差的绝对值最小的数#include<stdio.h>________________voidmain(){floata[10],s,d,x;intI;for(I=0;I<10;I++)_________________________for(I=0;I<10;I++)s+=a[I];s/=10;d=fabs(a[0]-s);__________;for(I=1;I<10;++){if(fabs(a[
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广东省高明实验中学高中语文 第四单元 15 陈情表教学实录 粤教版必修5
- 中学防空教育主题班会
- 2025年春国开电大《形势与政策》形考任务专题测试1-5及大作业 (二)
- 酒店保安部工作总结
- 2025果园土地承包合同
- 2025光伏项目前期总包合同
- 2025奢华别墅装修施工合同
- 2025年新疆九年级中考语文一模试卷附答案解析
- 东京店面转让合同标准文本
- 个人劳务维修合同标准文本
- 0-3岁婴幼儿保育与教育智慧树知到课后章节答案2023年下甘肃财贸职业学院
- 铁路损伤图谱PDF
- 新能源汽车发展前景和趋势论文
- 全国行政区划代码表
- 6人小品《没有学习的人不伤心》台词完整版
- 安全经验分享:中石油触电事故安全经验分享课件
- 公安机关办理刑事案件程序规定
- 金融科技应用高水平专业群建设方案
- 食材配送计划
- 甜菜栽培技术
- 机动车检测站应急预案
评论
0/150
提交评论