Linux C语言程序设计(三)——函数的理解与自定义

原创 2015年07月08日 20:08:04

1、函数

我们在上一篇文章介绍到,一个求解从1到100之内的素数的问题,当中提到一个概念为函数。在C语言中,我们称之为函数,但是在JAVA里面,我们称之为一个方法。


2、函数介绍

2.1 数学函数

不做过多介绍,是一些方法的封装,在C语言中封装了一些基本的算法,比如求解正弦和余弦等函数。

#include <math.h>
#include <stdio.h>
int main(void)
{
	double pi = 3.1416;
	printf("sin(pi/2)=%f\nln1=%f\n", sin(pi/2),
	log(1.0));
	return 0;
}

2.2 自定义函数

定义函数的语法,如下:

返回值类型 函数名(参数列表)
{
语句列表
}


之前我们介绍过自定义的函数,比如之前介绍的,求解一个数字是否是素数。代码如下:

int is_prime(int n)
{
	int i;
	for (i = 2; i < n; i++){
		if (n % i == 0){
			break;
		}
	}
	if (i == n){
		return 1;
	}else{
		return 0;
	}
}

3、形参和实参

        下面我们定义一个带参数的函数,我们需要在函数定义中指明参数的个数和每个参数的类型,定义参数就像定义变量一样,需要为每个参数指明类型,并起一个符合标识符命名规则的名字。

#include <stdio.h>
void print_time(int hour, int minute)
{
	printf("%d:%d\n", hour, minute);
}


int main(void)
{
	print_time(23, 59);
	return 0;
}

        我们调用print_time(23, 59)时,函数中的参数hour就代表23,参数minute就代表59。确切地说,当我们讨论函数中的hour这个参数时,我们所说的“参数”是指形参,当我们讨论传一个参数23给函数时,我们所说的“参数”是指实参。

一个基本的原理是:形参相当于函数中定义的变量,调用函数传递参数的过程相当于定义形参变量并且用实参的值来初始化。


4、局部变量和全局变量

        我们把函数中定义的变量称为局部变量,由于形参相当于函数中定义的变量,所以形参也相当于局部变量。

        与局部变量的概念相对的是全局变量( Global Variable) ,全局变量定义在所有的函数体之外,它们在整个程序开始之前分配存储空间,在程序结束时释放存储空间,所有函数都可以通过全局变量名访问它们

#include <stdio.h>
int hour = 23, minute = 59;

void print_time(void)
{
	printf("%d:%d in print_time\n", hour, minute);
}


int main(void)
{
	print_time();
	printf("%d:%d in main\n", hour, minute);
	return 0;
}

5、增量式开发

        通过函数的知识,我们可以了解到,函数其实是一些常用功能,或者复用功能的代码封装。这里,我们提到一个增量式开发,与函数有重叠的地方。

        增量式开发,我们可以先将一个比较大的功能,拆分成小功能,每个小功能可以使用一个函数来完成封装,那么这样就会简单很多,可以一个函数一个函数的完成,这样逐步累加,就完成了一个比较大的功能。

        举一个很简单的例子,比如我们求解一个角的sin和cos值,那么我们就先定义两个函数,sinFunc和cosFunc,然后分别实现(不分先后),这样,两个函数都完成的时候,就完成了要求。


6、递归

        递归是一个特殊的函数,它会在执行的过程中不断调用自己,它有两个限定条件:一是满足不断重复调用自己;二是必须要有一个终止条件。

       咋一看,跟我们的循环很相似,确实是这样,不过递归的情况更为特殊,它与循环的不同之处在于,递归是上一层需要依赖下一层的结果,而循环没有这样的要求。我们介绍一个最简单的递归程序,计算一个数的阶乘:

int factorial(int n)
{
	if (n == 0)
		return 1;
	else {
		int recurse = factorial(n-1);
		int result = n * recurse;
		return result;
	}
}

谭浩强《C语言程序设计(第二版)》错误

谭浩强《C语言程序设计(第二版)》的前50页中的错误分析谭书也算是一本奇书了,据说已经发行了300多万册。这本书真的那么好吗?师长早有教诲,因此本人从来没有好好读过谭书。近日遇周围人盛赞谭书,非辩论不...
  • yangss2006
  • yangss2006
  • 2007年08月25日 23:40
  • 3512

浙大版《C语言程序设计(第3版)》题目集(函数题)练习5-1

浙大版《C语言程序设计(第3版)》题目集(函数题) 练习5-1 求m到n之和(10 分) 本题要求实现一个计算m~n(m...
  • qq_30068369
  • qq_30068369
  • 2017年11月30日 12:32
  • 374

《C语言程序设计》读书笔记

写在前面:   《C程序设计》可以说是一本再基础不过的编程书了,但每读一遍的感觉却都是不同的,可以说,每读一遍,都会有很多新的收获。真所谓老书再读,回味无穷啊!此笔记是《C程序设计》谭浩强编著,清华大...
  • libo_163
  • libo_163
  • 2005年12月24日 22:37
  • 3606

《C语言及程序设计》实践参考——三色球问题

返回:贺老师课程教学链接  项目要求【项目6-三色球问题】若一个口袋中放有12个球,其中有3个红的。3个白的和6个黒的,问从中任取8个共有多少种不同的颜色搭配?提示:设任取的红球个数为i,白球个数为j...
  • sxhelijian
  • sxhelijian
  • 2015年04月19日 08:18
  • 2025

c语言程序设计第三次上机实验报告

任务1:假设整型变量 a 的值是 1,b 的值是 2,c 的值是 3,请判断各语句的值,写出执行结果,并作简短分析.   1)  x = a ? b : c;  (若x的值等于a就选取b的值,否...
  • iceyung
  • iceyung
  • 2013年03月29日 19:27
  • 1281

c语言程序设计个人体会

C语言程序设计教学体会孙志岗的"个人体会"代码风格代码风格就是程序员的书法比书法好学得多,基本不需要特别练习但是坏习惯一旦养成,就像书法一样难以改变是最易获得和实践的软件工程规则对设计程序结构,培养团...
  • bingdian37
  • bingdian37
  • 2006年11月05日 19:10
  • 2553

C语言程序设计(黄迪明版)答案----第一章

1.C语言具有哪些主要特点?① 兼具高级语言和汇编语言的优点 ② 结构化程序语言程序 ③ C语言数据类型丰富  ④具有种类丰富的运算符 ⑤C语言具有预处理功能2.C语言的主要用途是什么?3. 简述C语...
  • Dzjian_
  • Dzjian_
  • 2018年01月24日 22:45
  • 75

C语言程序设计学习总结

最近忙于学习C语言程序设计,考计二C。都搞得我头晕眼花,天天都是刷题。马上就要考计二C了。我想总结一下我对C语言的理解。 C不同于java的最大区别在于C是面向过程,而java是面向对象。刚开始我也搞...
  • qq_35542689
  • qq_35542689
  • 2017年03月23日 15:57
  • 1384

浙大版《C语言程序设计(第3版)》题目集(函数题)练习5-3

浙大版《C语言程序设计(第3版)》题目集(函数题) 练习5-3 数字金字塔(15 分) 本题要求实现函数输出n行数字金字塔。...
  • qq_30068369
  • qq_30068369
  • 2017年11月30日 12:35
  • 569

《C语言程序设计教程》(主编黄迪明、余勤)第二章课后习题答案

第二章需掌握:基本数据类型、常量、变量、运算符与表达式、混合运算与类型转换、运算符的优先级与结合性,数据的输入输出。 特别要注意运算符的优先级,为防止出现各种意想不到的情况,尽量在表达式外面加括号。...
  • keepingwalk
  • keepingwalk
  • 2017年07月11日 08:18
  • 363
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Linux C语言程序设计(三)——函数的理解与自定义
举报原因:
原因补充:

(最多只允许输入30个字)