学习C语言就一直在和函数打交道,例如main函数、printf函数等。其它语言中的过程和函数,在C语言里面都称为函数。所谓“过程”也就是没有返回值的函数。
编写一个函数不要忘记功能说明,这是函数的一部分,小雅在后面的教程中将省略,大家在工作中不能省略。同时不要忘记return语句,即使什么也不做,也得在函数结束前加上return语句。
#include
<stdio.h> /********************************** * 功 能: 递归法求整数的阶层 * * 函数名: fact * * 参 数: int 一个整数 * * 返回值: int 整数的阶层 * **********************************/int
fact(int
n) { //终止条件if
(n == 1) {return
1; } //递归调用n-1的阶层else
{return
n * fact(n-1); } } /********************************** * 功 能: 计算整数的阶层 * * 函数名: main * * 参 数: (void) * * 返回值: (void) * **********************************/int
main(void
) {int
num;int
result; printf("请输入一个整数:"); scanf("%d", &num); //输入一个整数 //求整数的阶层 result = fact(num); printf("%d的阶层=%d\n", num, result);return
0; }
return语句是结束当前函数。而exit是结束main()函数,即整个程序,一般都是在遇到非常错误时才调用exit()。assert()是一个宏定义,在assert.h中申明,用来在DEBUG方式诊断程序,当参数中的条件不成立时,中断main()函数。建议多多使用assert()。
#include
<stdio.h>#include
<stdlib.h>#include
<assert.h>#include
<string.h> /********************************** * 功 能: 申请内存空间 * **********************************/char
*getMemory(size_t len) {char
*buffer; //len>=15时正常运行,否则异常退出 assert(len >= 15); buffer = (char
*)malloc(len);if
(!buffer) { //未申请到空间则异常退出 exit(-1); }return
buffer; //正常返回 } /********************************** * 功 能: 教学测试主程序 * **********************************/int
main(void
) {char
*p;int
num;while
(1) { printf("请输入一个整数:"); scanf("%d", &num); //输入一个整数 //申请空间 p = getMemory(num); //拷贝字符串并输出 strcpy(p, "www.quanxue.cn"); printf("%s\n", p); free(p); //这句千万不能忘记 }return
0; }
上面的例子中,main()都放在最后,如果放在前面,编译时就会告知某函数未定义。解决此问题就需要在main()前面申明一个后面的函数。申明时,参数可以只用类型,而不用参数名,甚至参数类型也不写。
#include
<stdio.h>#include
<stdlib.h>#include
<assert.h>#include
<string.h>char
*getMemory(size_t); //申明后面要用的函数 /********************************** * 功 能: 教学测试主程序 * **********************************/int
main(void
) {char
*p;int
num;while
(1) { printf("请输入一个整数:"); scanf("%d", &num); //输入一个整数 //申请空间 p = getMemory(num); //拷贝字符串并输出 strcpy(p, "www.quanxue.cn"); printf("%s\n", p); }return
0; } /********************************** * 功 能: 申请内存空间 * **********************************/char
*getMemory(size_t len) { ...... }