先上一个例子,使用自定义函数,判断一个指定范围的数字是不是素数,若是是素数就输出,这么一个小程序。php
/* 求1到某个数值全部的素数 学php的小蚂蚁 */ # include <stdio.h> /* 判断一个数字是否为素数 @param int i 须要判断的数字 @return bool */ bool IsPrime(int i) { int j; for(j = 2; j < i; ++j) { if(i % j == 0) { break; } } if(i == j){ return true; } else { return false; } } /* 对指定范围内的数字进行判断,若是是素数,则输出 @param int val 指定素数的范围 @return void 直接输出 */ void TraverseVal(int val) { int i; for(i = 2; i <= val; ++i) { if( IsPrime( i ) ) { printf("%d \n", i); } } } /* 主函数:输入要指定的范围 */ int main(void) { int val; scanf("%d", &val); TraverseVal( val ); return 0; }
在使用自定义函数的过程当中,须要注意的是:小程序
自定义函数的类型、形参、形参的类型,以及是否有返回值,这几个位置必须和函数调用的地方相符合才能正常使用,否则会报错。编辑器
1,若是有实参,而函数形参是void,报错函数
2,若是函数类型void,调用函数后赋值于变量,报错;若是函数中有return,报错;spa
3,若是函数类型int,函数体中没有return,报错.net
4,若是把函数写到了main函数后面,仍是报错code
总之:写自定义函数的时候,必须严格按照逻辑编写。函数没有形参,就写void,不要空着不写。blog
若是确实须要把函数写到调用函数的后面,须要在前面加一句前置声明: 函数类型 函数名(形参类型);内存
使用函数要注意的问题:ci
函数调用和函数定义的顺序
若是函数调用写在了函数定义的前面,则必须加函数前置声明
函数的前置声明:
1,告诉编辑器即将可能出现的若干个字母表明的是一个函数
2,告诉编辑器即将可能出现的若干个字母所表明的函数的形参和返回值的具体状况
3,函数声明是一个语句,末尾必须加分号
4,对库函数的声明是经过 # include <库函数所在文件的名字.h> 来实现的
形参和实参
个数相同 位置一一对应 数据类型必须相互兼容(好比,浮点型赋值给整形,也是能够的,可是有可能会丢失精度。可是字符串要赋值给整形,这就不能够了)
经常使用的一些系统函数
机械工业出版社《tarboc 2.0 实用大全》 ( 这本书老师推荐看一下,貌似都是关于系统函数使用的)
double aqrt(double x); 求x的平方根
int abs(int x) 求x的绝对值
double fabs(int x); 求x的绝对值
变量的做用域和存储方式:
按做用区域分:
全局变量
在函数外部定义的变量属于全局变量
全局变量使用范围:从定义位置开始到整个程序结束
全局变量也要注意定义的位置,若是在一个函数以后定义,而这个函数还刚好使用了该全局变量,程序就会报错
局部变量
在函数内存定义的变量或者函数的形参都统称为局部变量
使用范围:只能在本函数内部使用
全局变量和局部变量命名冲突的问题
在一个函数内部若是定义的局部变量的名字和全局变量名字同样时,局部变量就会屏蔽掉全局变量
老师无心间说了一句话,要是专门去搞C语言,路会很难走 ~(~ ̄▽ ̄)~
学PHP的小蚂蚁 博客 http://my.oschina.net/woshixiaomayi/blog