- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
函 数(自定义子函数)
1个C源程序=1个主函数[+若干子函数]
【函数的分类:
(1)主函数、子函数;
(2)系统函数(库函数):相当于子函数,只不过是系统开发人员编写的、用户自定义子函数;
(3)带参数的函数(有参)、不带参数的函数(无参)】
函数:具有特定功能的程序段。
【引例】
任意读入2个数,调用子函数输出较大数。
#include stdio.h
int max(a,b) /*子函数-被调函数*/
int a,b; /*形式参数、形参*/
{int c;
if(ab)c=a;
else c=b;
return(c);
}
main( ) /*主调函数*/
{int x,y,z;
scanf(%d%d,x,y);
z=max(x,y); /*实际参数、实参*/
printf(MAX=%d\n,z);
}
一、面向过程程序设计的总体思想
“自上而下、逐步细化”的模块化
函数就是一个个功能相对独立的模块(程序段)。
使用函数,是因为任务的功能比较复杂。
二、函数的定义(书写)
1、C中函数的定义是独立且平等的,即:“主、子函数的定义不分前后,且不可以嵌套定义。”
2、主、子函数的书写不分前后,但是当被调函数书写在主调函数的后面且返回值不为整型int时,必须在主调函数的说明部分(或在函数体外的前面)对被调函数加以说明:
#includestdio.h
main()
{ float AVE(int a,int b);
int x,y;
float av;
scanf(%d%d,x,y);
av=AVE(x,y);
printf(%f\n,av);
}
float AVE(int a,int b)
{return (a+b)/2.0;}
【格式】
返回类型名 函数名( );
或
返回类型名 函数名(类型名 形参1,类型名 形参2,…);
或
返回类型名 函数名(类型名,类型名,…);
3、函数的分类:
(1)有参函数
【书写格式】
格式一:
函数返回类型 函数名(形参1,形参2,…)
对形参进行说明;
{函数体
[return语句;]
}
格式二:
函数返回类型 函数名(类型名 形参1,类型名 形参2,…)
{函数体
[return语句;]
}
(2)无参函数
函数返回类型 函数名( )
{函数体
[return语句;]
}
另外的划分:有返回值的函数和无返回值的函数(则“函数返回类型”为void)。
三、自定义子函数的使用(调用)说明
1、主函数一般做主调函数(即使带参数,也不能自己调用自己),子函数通常做被调函数,但也可以做主调函数,调用别的子函数或自己。
2、程序的执行总是从主函数开始到主函数结束,除非遇到exit函数语句。
(【格式1】exit(0);
【格式2】exit(1);
两种格式都可以立即终止整个程序的执行。)
4、return语句的格式:
格式一:return(表达式);
格式二:return 表达式;
格式三:return;
【功能】格式一与格式二的功能完全相同:将表达式的值(一个值)带回到主调函数的调用点,且立即终止所在函数的执行。格式三只能终止所在函数的执行并返回主调函数的调用点,但不带回值(因此很少用,通常可以省略)。
四、例题:
1、哥德巴赫猜想:任意一个大偶数(大于等于4)都可以拆分成两个素数之和。
编程验证。
#include stdio.h
#include math.h
main()
{long x,s1,s2;
do
scanf(%ld,x);
while(!(x=4x%2==0));
if(x==4)s1=s2=2;
else /*多次拆分、判断*/
{s1=3;
s2=x-s1;
while(!PDSS(s1)||!PDSS(s2))
{s1=s1+2;
s2=s2-2;
}
}
printf(%ld=%ld+%ld\n,x,s1,s2);
}
/*以下编写PDSS子函数*/
/*是素数返回1;不是素数返回0*/
int PDSS(long s)
{int flag=1;
long k;
for(k=3;k=sqrt(s);k++)
if(s%k==0){flag=0;break;}
return flag;
}
2、一元非线性方程求根。
(1)牛顿迭代法
牛顿迭代法又称牛顿切线法:先设定一个与真实的根接近的值作为第一次近似根,过(x0,0)这一个点作x轴的垂线,交y=f(x)于点(x0,f(x0)),
过(x0,f(x0))点做f(x)的切线,交x轴于x1,把它作为第二次近似根,再由x1求出f(x1),过(x1,f(x
文档评论(0)