C语言·函数
重点
- 函数的声明、定义、和返回值
- 函数的调用:函数的一般调用、函数的嵌套
- 常用Linux C系统中的常用函数
一、函数的声明、定义、和返回值
函数定义的一般格式:
{
声明语句部分;
执行语句部分;
}
如:
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}
int test()
{
声明语句部分;
执行语句部分;
}
函数的定义需要定义函数头和函数体两部分,下面分别介绍在定义两部分时的注意事项。
包括函数名、函数的类型及形式参数表
(1)函数名。用标识符表示,用来标识一个函数的名字,函数名后面必须有一对圆括号。除main函数外,其他函数可以按标识符规则任意命名,程序风格要求函数命名是能反映函数功能、有助于记忆的标识符。
(2)函数类型。函数名前的函数类型是指函数返回值的类型。如果函数是整型,int可省略不写;如果函数无返回值,以void类型明示。如果函数是无参函数,而且在调用后没有返回值,C语言规定应当将函数类型说明为void型(空值类型),否则,可能导致程序出错。
(3)形式参数表。圆括号内为形式参数列表部分,其中的参数称为形式参数,它包括函数的自变量部分。每个参数前都应用相应的类型标识符对参数进行说明,有多个参数时用逗号分开。如果是无参数函数,形式参数列表部分为空,但一对()不能省略
2.函数体
函数体是函数头下面最外层一对花括号内的代码,它是由一系列语句构成的,用以实现数的功能,函数体内可以有函数说明、变量说明及可执行语句
函数体也可以是一对空的花括号,例如:
void function (void)
这是一个“空函数”,调用它并不产生任何有效的操作,void就是没有返回值的函数。
#include "stdafx.h"
int max(int n1,int n2)
{
return (n1>n2?n1:n2);
}
int _tmain(int argc, _TCHAR* argv[])
{
int max (int n1,int n2);
int num1,num2;
printf("请输入两个数,并用英文的逗号隔开:\n");
scanf("%d,%d",&num1,&num2);
printf("max=%d\n",max(num1,num2));
getchar();//VS2010中需要加断点。
return 0;
}
运行结果如下:
二、函数的调用
调用函数时一定切记“先声明,后使用”的原则。
函数的声明:
函数类型 函数名 ();
函数的调用一般为:
函数名([实际参数列表])。
main函数可以调用其他函数,但是不可调用main函数。
调用函数时,C语言和Java、C#的区别在于:C语言有声明函数部分。
例如:
在C#和Java中
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
Test();
getchar();
return 0;
}
void Test()
{
printf("这是一个函数");
}
这样写结果是可以运行正确结果的。
而在C语言中会报错
这是因为C语言调用函数的代码块没有声明函数部分
是先执行main函数,而第一句就是Test();编译器并没有找到Test(),所以会报错。
出现这样的情况,有两种解决办法。
1、将Test的代码块放在main函数的前面
#include "stdafx.h"
void Test()
{
printf("这是一个函数");
}
int _tmain(int argc, _TCHAR* argv[])
{
Test();
getchar();
return 0;
}
2、调用函数是在前面加上去声明函数部分就可以啦。
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
void Test();//声明函数部分
Test();
getchar();
return 0;
}
void Test()
{
printf("这是一个函数");
}
这样就可以执行出正确结果啦。
三、常用Linux C系统中的常用函数
这里重点掌握:字符串处理函数、常用数学函数、日期时间函数。
字符串处理函数:
1. index()查找字符串中第一个出现的指定字符
函数原型:char* index( const char*s,int c);
函数说明: index()用来找出参数s字符串的第一个出现的参数c地址,然后将该字符出现的地址返回。字符串结束字符(NULL)也视为字符串的一部分。
函数返回值:如果找到指定的字符,则返回该字符所在的地址,否则返回0。
2. strcat()连接两个字符串
函数说明: strcat()会将参数src字符串复制到参数dest所指的字符串尾。第一个参数dst要有足够的空间来容纳要复制的字符串。
函数返回值:返回参数dest的字符串起始地址。
3.strcmp()比较字符串
函数说明:strp()用来比较参数sl和s2字符串。字符串的大小比较以ASCⅡ码表上的顺序来决定,此顺序亦为字符的值。
函数返回值:若参数sl和s2字符相同则返回0。s1若大于s2则返回大于O的值。s1若小于s2则返回小于0的值
4. strcpy()复制字符串
常用数学函数:
1.abs()计算整形数的绝对值
需要头文件:#include< stdlib.h>函数原型: int abs(int j);
函数返回值:返回参数j的绝对值结果。
2.cos()取余玄函数值
需要头文件: #include <math. h>函数说明:cos()用来计算参数x的余玄函数值,然后将结果返回。
3.ceil()取不小于参数的最小整型数
需要头文件: #include <math. h>
函数原型: double ceil( double x);
函数返回值:返回不小于参数x的最小整数值。
函数说明:ceil()会返回不小于参数x的最小整数值,结果以 double形态返回。
4.exp()计算指数
需要头文件:#include<math.h>函数原型: double exp( double x);
函数返回值:返回e的x次方计算结果。
函数说明:exp()用来计算以e为底的x次方值,即ex值,然后将结果返回。
5.sqrt()计算平方根值
需要头文件:# Include<math.h>函数原型: double sqrt( double x);
函数返回值:返回参数x的平方根值。错误代码:EDOM参数x为负数。
函数说明:sqrt()用来计算参数x的平方根,然后将结果返回。参数x必须为正数。
常用日期时间函数:
1.time()取得目前的时间
函数原型: time_t time(time_t*t);函数返回值:成功则返回秒数,失败则返回(-1)值。
函数说明:此函数会返回公元1970年1月1日的UTC时间从0时0分0秒起到现在所经过的秒数。如果t为空指针的话,此函数也会将返回值存到t指针所指的内存。
2. ctime()将时间和日期以字符串格式表示
函数原型:char ctime (const time_t *timep);函数说明: ctime()将参数 time所指的time_t结构中的信息转换成真实世界所使用的时间日期表示方法,然后将结果以字符串形式返回。
函数返回值:返回一个字符串表示目前当地的时间日期。这个字符串的长度是固定的为26。例如: Thu Dec 7 14:58:59 2000。
3. mtime()取得目前的时间和日期
函数原型:struct tm *gmtime(const time_t timep );
函数说明: glime()将参数 imep所指的tmet结构中的信息转换成真实世界所使用的时间日期表示方法,然后将结果由结构tm返回。
函数返回值:返回结构tm代表目前的UTC时间。
4. diffie()计算时间差距
函数原型: double difftime(time_ t time,time_ t time());函数说明: difftime()用来计算参数time和time()所代表的时间差距,结果以 doubl型精确值返回。两个参数的时间皆是以1970年1月1日0时0分0秒算起的UTC时间。