C语言之函数
2018-06-18 03:50:29来源:未知 阅读 ()
函数
对于初学C语言的人来说可能会问函数是什么?在这里我有一个通俗的解释;函数就是一个盒子,在这个盒子里面可以封装你想实现的功能,之后通过主函数进行调用即可
为什么要使用函数?
对于一个层序来说,模块化设计是极其重要的,而函数就体现了一种分而治之的思想,使用函数可以避免程序中代码的重复使用、另外也可以对程序起到自顶向下,逐步细化的作用,同时使程序在测试和优化更加容易。对于一门语言来说,它里面一般都会有定义好的函数库,当开发者需要使用的时候可以直接进行调用。C语言也是如此,他也拥有自己的标准库函数。如果自身的标准库函数达不到开发者的开发需求,那么开发者也可以使用自定义的函数;当然,这些函数都是由main()函数统一进行调用管理的。
举一个关于函数的简单的例子:
eg:用函数写一个计算整数n的阶乘。
long Fact(int n) //声明一个函数,函数名为Fact,在函数名括号里的为形式参数
{
int i;
long result=1;
for(int i=2;i<=n;i++)
{
result *=i; //实现阶乘的功能
}
return result; //返回函数的结果
}
对于一个函数来说,首先应当明白他的功能,这个例子中的函数是用来计算阶乘的,函数名后的形式参数代表一个函数的入口,如果不需要入口,就用void来代表形参里面的内容;另外,一个函数也应该有相应的返回值类型,在声明函数的时候要进行表明,如果一个函数没有返回值类型,那么这个函数名前面就要用void来进行声明。
那么将上面的函数合并成一个完整的程序:
#include<stdio.h>
long Fact(int n); //函数原型
int main()
{
int m;
long ret;
printf("please enter m:");
scanf("%d",&m);
ret=Fact(m); //调用函数,把函数的结果传给ret
printf("%d!=%ld\n",m,ret);
return 0;
}
long Fact(int n) //相当于一个子函数
{
int i;
long result=1;
for(i=2;i<=n;i++)
{
result*=i;
}
return result;
}
函数原型的主要作用是告诉编译器,函数Fact()将会从调用程序接收一个int型参数,编译器检查函数调用语句中实参的类型和数量于函数原型是否匹配。
在函数中还要特别注意的是函数的封装,也就是对于这个盒子的保护作用,增加函数的安全判断,就像是上面的程序不可以输入负数一样,这也是增强了程序的健壮性。
函数设计的基本原则:
1.函数的规模要小,因为这样的代码易于维护,出错几率比较小;
2.每个函数的功能尽量要单一,不要设计具有多个用途的函数。
3.每个函数只有一个入口和一个出口。
4.在函数接口中清楚的定义函数的行为,包括入口参数,出口参数,返回类型,异常处理等,让调用者清楚函数所能进行的操作是否成功,应尽可能的考虑出错的情况。
5.在函数的入口处,对参数的有效性进行检查。
6.在执行某些敏感性操作之前,应检查操作数及其类型的合法性,以避免发生数据除零,数据溢出而引起的错误。
函数的递归调用和递归函数
首先举个例子:斐波那契数列问题。
用递归方法实现:
#include<stdio.h>
long Fact(int n);
int main()
{
int n,i,x;
printf("Input n:");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
x=Fact(i);
printf("Fact(%d)=%d\n",i,x);
}
return 0;
}
long Fact(int n)
{
if(n==0)
return 0;
else if(n==1)
return 1;
else
return (Fact(n-1)+Fact(n-2));
}
所谓的递归就是函数自身的一种调用,调用自己来实现功能;递归的用法在内存空间的占用上浪费很大,所以对于一个问题而言可能不是最优的算法.为提高程序的执行效率,应尽量用迭代形式替代递归形式
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- C++ 转换函数搭配友元函数 2020-06-10
- C++ rand函数 2020-06-10
- C++ 友元函数 2020-06-10
- 关于各种不同开发语言之间数据加密方法(DES,RSA等)的互通的 2020-06-07
- C++ const成员函数 2020-06-03
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash