- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
第7章程序模块化:函数;C是模块化程序设计语言;函数分类
从用户角度
标准函数(库函数):由系统提供
用户自定义函数
从函数形式
无参函数
有参函数;7.1函数的定义
一般格式;7.2函数的一般调用;7.2.2形式参数和实际参数;[例7.2]形参与实参示例。;[例7.3] 给定一个整数,编程判断这个数的回文数是否为素数(13的回文数是131,127的回文数是12721)。如果这个数的回文数是素数,则输出“prime”,否则输出noprime。;关于形参与实参的说明;[例7.4] 定义形式参数个数可变函数,计算一个通用多项式的值。当x=3时,计算下列两个多项式的值:;7.2.3函数的返回值;[例7.5]return语句示例;7.2.4函数调用的方式;(2)在赋值表达式中调用函数。如例7-5中的
“z=min(x,y);”
(3)在一般的运算表达式中调用函数。例如:
y=5.0*fpow(3.5,2)+4.5*fpow(5.5,2);
(4)将函数调用作为另一函数调用的实参。
printf(“%f\n”,fpow(2.5,4));
;7.2.5主调函数和被调函数的相对位置关系;主调函数和被调函数之间可作下列位置安排;(2)被调函数写在主调函数的后面。
;(3)如果已在所有函数定义之前,在文件的开头,在函数的外部声明了函数类型,则在各个主调函数中不必对所调用的函数再做类型声明。;7.2.6函数调用时值的单向传递性;7.2.6函数调用时值的单向传递性
形式参数:定义函数时函数名后面括号中的变量名
实际参数:调用函数时函数名后面括号中的表达式;说明:
实参必须有确定的值
形参必须指定类型
形参与实参类型一致,个数相同
若形参与实参类型不一致,自动按形参类型转换———函数调用转换
形参在函数被调用前不占内存;函数调用时为形参分配内存;调用结束,内存释放
;例计算x的立方;参数传递方式
值传递方式
方式:函数调用时,为形参分配单元,并将实参的值复制到形参中;调用结束,形参单元被释放,实参单元仍保留并维持原值
特点:
形参与实参占用不同的内存单元
单向传递;#includestdio.h
voidswap(inta,intb)
{inttemp;
temp=a;a=b;b=temp;
}
main()
{intx=7,y=11;
printf(x=%d,\ty=%d\n,x,y);
printf(swapped:\n);
swap(x,y);
printf(x=%d,\ty=%d\n,x,y);
};7.2.7函数调用示例;程序如下:
#includestdio.h
intisPrime[100000]={0};//isPrime[i]==0表示:i是素数
intPrime[6005];//Prime存质数
intcnt=0;
voidGetPrime(intn)
{
inti,j;
isPrime[1]=1;
for(i=2;i=n;i++)
{
if(!isPrime[i])
Prime[++cnt]=i;
for(j=1;j=cnti*Prime[j]=n;j++)
{
isPrime[i*Prime[j]]=1;
if(i%Prime[j]==0)break;
}
}
}
intmain()
{
GetPrime(100000);
intk;
while(scanf(%d,k)!=EOF)
printf(%d\n,Prime[k]);
return0;
};7.3函数的嵌套调用
C规定:函数定义不可嵌套,但可以嵌套调用函数;例求三个数中最大数和最小数的差值;7.4递归调用
定义:函数直接或间接的调用本身叫函数的递归调用;计算n!;递归问题处理的条件;7.4.2函数的递归调用应用举例;7.5数组作为函数的参数;#includestdio.h
intcmp(inta,intb);
intmain()
{
intn,i,j,t,f[1000];
scanf(%d,n);
for(i=1;i=n;i++)
{
scanf(%d,f[i]);
}
for(i=1;i=n-1;i++)
{
for(j=1;j=n-i;j++)
{
if(cmp(f[j+1],f[j]))
文档评论(0)