C语言基础4:“函数”
Merry Christmas
函数
函数的定义及基本用法
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<time.h>
#include"xxbj2.h"//包含自定义头文件
尖括号<>:直接到系统目录下面查找这个头文件,不会到项目录下面查找。
双引号:直接到项目录下面查找这个文件,没有才到系统目录下面查找
c语言当中:函数是构成c语言最基本的单元
函数就是一个加工厂
1:函数由函数头,函数体组成
函数的调用:只需要调用函数名就可以了,不需要将函数的声明一起调用
/*
返回值类型 函数名(参数1)//参数可以是多个
{
所要实现的具体功能
return 返回值
}
*/
例:
实现两个函数的加法运算
专门实现45+89
调用函数,既可以在main函数里调用,也可以做add函数里调用
int add()//定义一个函数
{
return 45 + 89;//返回一个结果给add函数
}
//实现任意两个整数的加法
int add1(int a, int b)//括号里的两个整数表示函数的形参
{
int c = a + b;
return c;
}
int main()
{
//调用函数
int c = add();//将45+89所得的结果保存到c 里面。
printf("c=%d\n", c);
c = add1(78, 93);
printf("c=%d\n", c);
return 0;
}
/*
注意:函数不能嵌套定义, 即在c语言当中,函数里不能定义函数,但是可以在函数里面调用函数
错误例子:
int main()
{
int add1(int a, int b)//它在main函数里又定义了一个add函数,这种是错误的,不能在函数里定义函数,只能调用。
{
int c = a + b;
return c;
}
c = add1(78, 93);
printf("c=%d\n", c);
return 0;
}
*/
2. 无参函数 void
没有返回值(void):可以不用写return:或者直接return;
int add()//表示无参函数,既省略了void
{
return 45 + 89;//返回一个结果给add函数
}
例:
返回值类型:void: 表示这个函数没有返回值
void show()
{
printf("你好\n");
return; //没有返回值返回,可写return;也可以省略return; return:表示结束函数,退出函数
printf("世界\n");//不会打印世界,因为上面有return;表示结束函数,函数结束
}
int main()
{
show();//调用show函数
}
3. 空函数
没有任何内容,也没有要实现的功能
void display()
{
//函数体里面没有任何内容,这就是空函数
}
int main()
{
display();//调用display函数
}
4. return 返回值
/*
(1):能够从函数中立即返回,结束一个函数的执行,返回给主调函数
(2):返回处理结果,返回值类型
(3):返回值类型一致 即返回的值一定要与声明的类型一致。你声明的是一个整数,那么你返回的一定要是一个整数,除非利用强制类型转换
*/
例:
int add2(int a, int b, int c)
{
float f= a + b + c;
return f;//发生了隐式类型转换,即整型转换为浮点型,会有警告,除非用强制类型转换return (int)f;
}
int main()
{
}
5. 函数的参数
形参(形式参数)、实参(实际参数)
例:
int add1(int a, int b)//括号里的两个整数表示函数的形参
{
int c = a + b;
return c;
}
int main()
{
//调用函数
int c = add1(78, 93);//括号里的为函数的实参 将78和93分别赋值给上面声明的a和b
printf("c=%d\n", c);
return 0;
}
调用的函数必须在main函数的前面,即上面,因为函数是从上往下执行. 若放在main函数的下面,因为编译器没有在main函数之前遇到被调用的函数,所以它就会不认识此函数,在一些上会报错
6. 函数的声明(函数原型)
返回值类型 函数名(参数类型 变量名(形参名))
声明的时候,可以省略形参名,即省略a,b,c,可以在下面的函数里再定义. 形参类型不能省略。
int add2(int , int , int );//函数的声明,可以写到main函数里面,但调用只需调用函数名就可以了。例2:
int main()
{
int c;
c=add2(78,93,45); //函数的调用:只需要调用函数名就可以了,不需要将函数的声明一起调用
printf("c=%d\n", c);
void show();//函数的声明,可以写到main函数里,要放在调用前,让编译器知道有这个函数 例2:
show();//函数的调用
}
//函数的定义
int add2(int a, int b, int c)//想要将其放在main函数下面,需要在main函数上面声明
{
}
7. 函数互相调用: 不能调用main函数,因为main函数是函数的入口,再调用,就会形成死循环
例:
void show()
{
printf("你好\n");
}
void display()
{
show();//在display里调用show
}
int main()
{
show();
display();
}
递归调用(函数自己调用自己)
//例:
void show()
{
printf("你好\n");
show();//自己调用自己,会一直循环
}
int main()
{
show();
return 0;
}
例:用递归求十的阶层
10!=10*98*7*6*5*4*3*2*1;
10!=10*9!
10!=10*9*8!
int jiecheng(int n)
{
if (n == 1)
return 1;
return n*jiecheng(n - 1);
}
int main()
{
int n = jiecheng(10);
printf("阶层=%d\n", n);
return 0;
}
例:求1-100的和count
这个函数实现start+start+1+start+2+...+end的和
int Count(int start, int end)//函数的声明。 起始函数:start,结束函数:end
{
int result = 0;
for (; start <= end; start++)
{
result += start;
}
return result;
}
//int Count(int start, int end);//函数的声明。 起始函数:start,结束函数:end
int main()
{
int result = Count(1, 100);
printf("%d\n", result);
}
8. 常用函数
1、输入输出函数
getchar(); 读取一个字符,
putchar();输出一个字符
例:
int main()
{
char ch=getchar();//字符在内存中是以ASCII码形式存储的,因此字符可以转换为整数,例0的ASCII码是是‘0’=>48,'5'=>53
putchar(ch);
return 0;
}
gets();//能够输入一个字符串
puts();
例:
int main()
{
char str[100];//字符数组
gets(str);
puts(str);输出一串字符,也可用printf("%c\n",str);
return 0;
}
scanf();
printf();
2、数学函数 包含系统头文件#include<math.h>
abs();//求整数的绝对值
labs();//求长整型的绝对值
fabs();求浮点型绝对值,默认为double类型
sin();//正弦函数
cos();//余弦函数
tan();//正切函数
例:
int main()
{
/*int n = abs(-45);
printf("n=%d\n", n);*/ //整数的绝对值
/*int a = labs(-44646345);
printf("a=%d\n", a);*/ //长整型的绝对值
/*float f= fabs(-45.3);
printf("f=%f\n", f);*/ //浮点型绝对值
/*float f = sin(90);
printf("f=%f\n", f);*/ //正弦函数
//float f = cos(180);
//printf("%f\n", f); //余弦函数
/*float f = tan(180);
printf("f=%f\n", f);*/ //正切函数
//*向下取整 floor()
/*int c = floor(3.9); //3.9向下取整变为了3
printf("c=%d\n", c);*/
//*向上取整 ceil()
//int c = ceil(3.9); //向上取整变为了4
//printf("c=%d\n", c);
return 0;
}
3. 随机函数 需包含头文件#include<stdlib.h>
srand();
rand();
4. 时间函数 time(); 需包含头文件#include<time.h>
例:
void main()
{
time_t*t = time(NULL);//要使它自己变化,需用到time函数
srand((unsigned)time(NULL));//需使用srand();一起使用才能构成随机数,如果只是rand();就只是一个确定的数。只要srand();中的数变化,输出的值就会变化,若不变,输出的值也不会变化。
int x=rand()%100;//0-100.要使随机数的范围在0-100,需用到取余。若要求三位数的随机数,如100-999,只需int x=rand()%999+100;即可
printf("x=%d\n", x);
}
5.系统函数 system() 需包含头文件#include<stdlib.h>
新浪微博:@秀米XIUMI