vlambda博客
学习文章列表

C语言基础4:“函数”

C语言基础4:“函数”

Merry Christmas

C语言基础4:“函数”

函数


函数的定义及基本用法


#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