计算机c语言编程-函数_第1页
计算机c语言编程-函数_第2页
计算机c语言编程-函数_第3页
计算机c语言编程-函数_第4页
计算机c语言编程-函数_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

计算机编程中的函数

1计算圆柱体积2使用函数编写程序3变量与函数隆回职业中专幸建新本章要点函数的定义,函数的定义域,函数的值域什么是函数的参数?在函数调用时,参数是如何传递的?在使用函数的过程中,要注意哪些问题?怎样确定函数的参数?如何使用局部变量和全局变量?1计算圆柱体积1.1程序解析--计算圆柱体积

例1输入圆柱体的高和半径,求圆柱体积volume=π*r2*h。

要求定义和调用函数cylinder(r,h)计算圆柱体的体积。#include<stdio.h>voidmain(void)/*计算圆柱体积*/{doubleheight,radius,volume;

doublecylinder(doubler,doubleh);/*函数声明*/

printf("Enterradiusandheight:");

scanf("%lf%lf",&radius,&height); volume=cylinder(radius,height);/*调用函数*/

printf("Volume=%.3f\n",volume);}doublecylinder(doubler,doubleh)/*定义求圆柱体积的函数*/{ doubleresult; result=3.14159*r*r*h;/*计算体积*/

returnresult;

/*返回结果*/}Enterradiusandheight:3.010Volume=282.7431.2函数的定义

函数是指完成一个特定工作的独立程序模块。库函数:由C语言系统提供定义(如scanf()、printf()等)自定义函数:需要用户自己定义如计算圆柱体体积函数cylinder()main()也是一个函数,C程序由一个main()和多个其它函数构成。程序中一旦调用了某个函数,该函数就会完成一些特定的工作,然后返回到调用它的地方。函数经过运算,得到一个明确的运算结果,并需要回送该结果。例如,函数cylinder()返回圆柱的体积。函数完成一系列操作步骤,不需要回送任何运算结果。1.返回运算结果的函数定义函数类型函数名(形参表)/*函数首部*/{ /*函数体*/

函数实现过程

return表达式;}把函数运算的结果回送给主函数函数返回值的类型没有分号只能返回一个值形参类型1参数1,类型2参数2,……,类型n参数n参数之间用逗号分隔,每个参数前类型都必须分别写明函数类型函数名(形参表){

函数实现过程

return表达式;}不能写成doubler,hdoublecylinder(doubler,doubleh){doubleresult;result=3.1415926*r*r*h;returnresult;}doublecylinder(doubler,doubleh)

/*函数首部*/{

/*函数体,写在一对大括号内*/

doubleresult;

result=3.1415926*r*r*h;

/*计算圆柱体积*/

returnresult;

/*返回运算结果*/ }分析函数的定义函数类型函数名形参表与函数类型一致2.不返回运算结果的函数定义void

函数名(参数表)/*函数首部*/{ /*函数体*/

函数实现过程

return;

/*可以省略return*/}表示不返回结果不能省略void否则,函数类型被默认为int例2输出5之内的数字金字塔。#include<stdio.h>intmain(void){ voidpyramid(intn);

/*函数声明*/

pyramid(5); /*调用函数,输出数字金字塔*/ return0;}voidpyramid(intn)

/*函数定义*/{ inti,j; for(i=1;i<=n;i++) /*需要输出的行数*/ {for(j=1;j<=n-i;j++) /*输出每行左边的空格*/

printf(""); for(j=1;j<=i;j++) /*输出每行的数字*/

printf("%d",i);/*每个数字的前后各有一个空格*/

putchar('\n'); }}

122333444455555

1.3函数的调用定义一个函数后,就可以在程序中调用这个函数。调用标准库函数时,在程序的最前面用#include命令包含相应的头文件。调用自定义函数时,程序中必须有与调用函数相对应的函数定义。1.函数调用的形式和过程使用返回值:volume=cylinder(radius,height);printf(“%f\n”,cylinder(radius,height));完成操作:pyramid(5);常用于void类型函数的调用常用于返回结果的函数的调用常量、变量、表达式函数名(实参表)函数调用的过程计算机在执行程序时,从主函数main开始执行,如果遇到某个函数调用,主函数被暂停执行,转而执行相应的函数,该函数执行完后,将返回主函数,然后再从原先暂停的位置继续执行。函数遇return或最后的大括号,返回主函数main调用函数f结束函数f结束执行调用返回函数调用流程分析函数调用的过程#include<stdio.h>intmain(void){doubleheight,radius,volume;

doublecylinder(doubler,doubleh);

printf("Enterradiusandheight:");

scanf("%lf%lf",&radius,&height); volume=cylinder(radius,height);

printf("Volume=%.3f\n",volume); return0;}doublecylinder(doubler,doubleh)

{ doubleresult; result=3.1415926*r*r*h;

returnresult;

}调用函数实参形参执行函数中的语句返回调用它的地方2.参数传递函数定义时的参数被称为形式参数(简称形参)doublecylinder(doubler,doubleh);函数调用时的参数被称为实际参数(简称实参)volume=cylinder(radius,height);实参形参在参数传递过程中,实参把值复制给形参。形参和实参一一对应:数量一致,类型一致,顺序一致形参:变量,用于接受实参传递过来的值实参:常量、变量或表达式单向传递3.函数结果返回函数返回的两种情况完成确定的运算,有一个运算结果返回给主调函数。(有返回值)完成指定工作,没有确定的运算结果需返回给主调函数(函数类型void)。(无返回值)函数结果返回的形式:return表达式;return(表达式);二者作用相同例3判断奇偶数的函数even(n)定义一个判断奇偶数的函数even(n),当n为偶数时返回1,否则返回0。如何调用该函数?voidmain(){intn,flag;

printf("请输入一个正整数:");

scanf("%d",&n);flag=even(n);if(flag)printf("%d是偶数\n",n);elseprintf("%d是奇数\n",n);}int

even(intn) /*函数首部*/

{if(n%2==0) /*判别奇偶数*/

return1; /*偶数返回1*/elsereturn0;

/*奇数返回0*/} 函数没有声明,可以吗?为什么?4.函数原型声明函数类型函数名(参数表);例如:

doublecylinder(doubler,doubleh);voidpyramid(intn);函数必须先定义后调用,将主调函数放在被调函数的后面,就像变量先定义后使用一样。如果自定义函数在主调函数的后面,就需要在函数调用前,加上函数原型声明。函数声明:说明函数的类型和参数的情况,以保证程序编译时能判断对该函数的调用是否正确。只写函数定义中的第1行(函数首部),并以分号结束。2使用函数编写程序例4输入精度e,使用格里高利公式求π的近似值,精确到最后一项的绝对值小于e。要求定义和调用函数

funpi(e)求π的近似值。/*用公式计算π的近似值,精度为e*/#include<stdio.h>#include<math.h>intmain(void){ doublee,pi;

doublefunpi(doublee);

printf("Entere:");

scanf("%lf",&e); pi=funpi(e);

printf("pi=%f\n",pi); return0;}doublefunpi(doublee){ intdenominator,flag;doubleitem,sum; flag=1; denominator=1; item=1.0; sum=0;while(fabs(item)>=e){ item=flag*1.0/denominator;sum=sum+item;flag=-flag; denominator=denominator+2;}

returnsum*4;}Entere:0.0001pi=3.1418例5求100以内的全部素数,每行输出10个。素数就是只能被1和自身整除的正整数,1不是素数,2是素数。

要求定义和调用函数prime(m)判断m是否为素数,当m为素数时返回1,否则返回0。

算法描述:对2~100之间的每个数进行判断,若是素数,则输出该数。for(m=2;m<=100;m++)if(m是素数)

printf("%d",m);prime(m)!=0#include<stdio.h>#include<math.h>intmain(void){ intcount,m;

intprime(intm);/*函数声明*/ count=0; for(m=2;m<=100;m++){if(prime(m)!=0){printf("%6d",m);count++; if(count%10==0)printf("\n");} }

printf("\n");}/*函数定义*/

int

prime(intm){inti,n;if(m==1)return

0;

n=sqrt(m);for(i=2;i<=n;i++)if(m%i==0)

return

0;

return

1;}3变量与函数3.1局部变量和全局变量局部变量在函数内定义的变量(包括形参)作用范围:本函数内部定义在复合语句内的变量作用范围:复合语句内部全局变量

在函数以外定义的变量,不从属于任一函数。作用范围:从定义处到源文件结束(包括各函数)例6在复合语句中定义局部变量。#include<stdio.h>intmain(void){

int a;

a=1;

{ /*复合语句开始*/

intb=2;

b=a+b;

a=a+b;

} /*复合语句结束*/

printf("%d",a); return0;}b:小范围内的临时变量

4例7全局变量定义#include"stdio.h"intx; /*定义全局变量x*/intf(){

intx=4;/*x为局部变量*/returnx;}intmain(void){

inta=1;

x=a; /*对全局变量x

赋值*/a=f(); /*a的值为4*/{

intb=2;

b=a+b; /*b的值为4*/

x=x+b; /*全局变量运算*/}

printf("%d%d",a,x);return0;}4,7若局部变量与全局变量同名,局部变量有效时,全局变量无效。这被称为同名覆盖。自动变量(auto):普通的局部变量intx,y;

auto

intx,y;charc1;

autocharc1;函数调用时,定义变量,分配存储单元。函数调用结束,收回存储单元。全局变量:从程序执行开始,到程序的结束,存储单元始终保持。变量生命周期变量从定义开始分配存储单元,到运行结束存储单元被回收的整个过程。3.2变量生命周期和静态局部变量存储类型:动态存储:自动变量静态存储:全局变量、静态局部变量用户存储空间存储区数据区静态存储区动态存储区static

类型名变量表作用范围:同局部变量生命周期:同全局变量静态局部变量例8静态局部变量示例#include<stdio.h>voidfun(intk);intmain(void){intk;for(k=1;k<=3;k++)fun(k);return0;}voidfun(intk){staticinta;

printf("%d,",a);a+=k; }0,1,3,静态变量会记住前一次调用时留下来的值静态变量的初值默认为0本章小结函数的定义与调用函数参数的传递与返回值(数字金字塔、计算π的近似值、求100以内的全部素数)。函数的形参

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论