c语言函数笔记·

函数结构

// 函数定义

void 函数名(int num)

{

函数体

}

int  函数名(int num)

{

函数体

}

// 函数调用 函数名();

返回值什么类型,就定义什么类型的函数

  定义函数的方法:


        1.定义函数,是为了干什么事情?         函数体
        2.干这件事,需要什么?                       形参
        3.干完后,调用处是否要继续使用?     返回值类型

注意事项:

1.函数不调用就不执行                             
 2.函数名不能重复
3.函数与函数之间是平级关系,不能嵌套定义
4.自定义函数写在main的下面,需要在上方声明
5.return 下面不能编写代码,永远执行不到,属于无效的代码
6.函数的返回值类型为void,表示没有返回值,return可以省略不写,如果写了return,后面不能跟具体的数据,仅表示结束函数
                                                   

函数的分类

函数有3中分类方式:

3.1、从定义角度分类(即函数是谁实现的)

●库函数 (c 库实现的)

●自定义函数 (程序员自己实现的函数)

●系统调用 (操作系统实现的函数)

文件操作:如打开文件(open())、读取文件(read())、写入文件(write())和关闭文件(close())等

内存管理:如分配内存(malloc() 在用户空间实现,但可能间接使用系统调用)、释放内存(free())以及修改内存保护标志等

虽然 malloc() 和 free() 是库函数,但它们可能会使用系统调用来分配和释放内存。

设备管理:如读取和写入设备文件、设置设备参数等

3.2、从参数角度分类

(1) 有参函数:

函数有形参,可以是一个,或者多个,参数的类型随便 完全取决于函数的功能

(2) 无参函数:

函数没有参数,在形参列表的位置写个 void 或什么都不写

3.3、从返回值的角度分类

(1). 带返回值的函数

在定义函数的时候,必须带着返回值类型,在函数体里,必须有 return如果没有返回值类型,默认返回整型。

(2)没返回值的函数在定义函数的时候,函数名字前面加 void

注意:如果把函数的返回值类型省略了,默认返回整型函数内,return后边的内容不会被执行

在定义函数的时候,函数的返回值类型,到底是什么类型的,取决于函数的功能

函数的声明

  • 如果函数定义代码 没有放在函数调用的前面,这时候需要先做函数的声明
  • 所谓函数声明,相当于告诉编译器,函数是有定义的,在别的地方定义,以便使编译能正常进行

注意:一个函数只能被定义一次,但可以声明多次

extern void test();//函数的声明(函数的extern可以省略)

常见函数   


 math      

 #include

   

 time          

 // #include
  time()  获取当前时间   NULL(大写)
 返回值是 long long 类型 结果是从1970年1月1日 0:0:0开始过了多少秒的那个时间点
  
 long long res=time(NULL);
 引入头文件  http://zh.cppreference.com

随机数


 1.设置种子
srand(time(null));
2.获取随机数0-2                       5-9
int num=rand()%3+0;     int num=rand()%5+5;
3.输出打印
printf("%d",num);


  补充

  1.数组作为函数的参数,要注意什么?
     实际上传递的是数组的首地址如果要在函数中对数组进行遍历的话,记得一定要把数组的长度一起传递过去。
       定义处arr表示的是完整的数组
       函数处的arr只是一个变量,用来记录数组的首地址

   2.数组的索引越界
         最小索引:0
         最大索引:长度- 1

练习

(1)自定义一个函数,返回三个数中的最小值

(2)自制一个计算器

(3)定义一个函数,判断是不是质数,是返回1,不是返回0

(4)定义一个函数,打印乘法口诀表,口诀表的行数和列数,用户输入, 例如输入9,打印9*9乘法表,输入12打印12*12口诀表

(5)用函数递归调用的方式,列出斐波那契数列的前20项

答案

#define _CRT_SECURE_NO_WARNINGS
#include
int getMin();
void calculatorA();
int getPrime();
void multiplication();
int fibonacci(int n);
int main()
{
	    //(1)自定义一个函数,返回三个数中的最小值
	
    int min=getMin();
    printf("min=%d", min);

		//(2)自制一个计算器
	calculatorA();
	
		//(3)定义一个函数,判断是不是质数,是返回1,不是返回0
	
	int result = getPrime();
	printf("result:%d", result);

		//(4)定义一个函数,打印乘法口诀表,口诀表的行数和列数,用户输入,例如输入9,打印9 * 9乘法表,输入12打印12 * 12口诀表

	multiplication();

		//(5)用函数递归调用的方式,列出斐波那契数列的前20项

	for (int i = 0; i < 20; i++) {
		printf("%d\n", fibonacci(i));
	}
	

	return 0;
}


int getMin()
{  
	int a;
	int b; 
	int c;
	printf("请输入三个整数:");
	scanf("%d %d %d", &a, &b, &c);
	int min;
	if (a>=b)
	{
		min = b;
	}
	else
	{
		min = a;
	}
	if (min>c)
	{
		return c;
	}
	else
	{
		return min;
	}
 
}

void calculatorA()
{
	int flag = 1;
   while(flag)
   {
	   double a;
	   double b;
	   char c;
   printf("请输入想要计算的数字和运算符(空号隔开):\n");
	scanf("%lf %c %lf", &a, &c, &b);

	   switch (c)
	   {
	   case '+':
		   printf("%.2lf+%.2lf=%.2lf\n",a,b,a+b);
		   break;
	   case '-':
		   printf("%.2lf-%.2lf=%.2lf\n", a, b, a - b);
		   break;
	   case '*':
		   printf("%.2lf*%.2lf=%.2lf\n", a, b, a * b);
		   break;
	   case '/':
		   if (b==0)
		   {
			   printf("除数不能为0\n");
			   break;
		   }
		   printf("%.2lf/%.2lf=%.2lf\n", a, b, a / b);
		   break;
	   
	   default:
		   printf("请输入+ - * /和 两个数字\n");
		   break;
	   }
   }
	                                                                                        
}


int getPrime() {
	int num;
	printf("请输入一个整数:");
	scanf(" %d", &num);
	if (num < 2) return 0;
	for (int i = 2; i < num; i++) {
		if (num % i == 0) return 0;
	}
	return 1;
}




void multiplication()
{
	int a;
	printf("请输入一个整数:");
	scanf(" %d", &a);

	for (int i = 1; i <= a; i++)
	{
		for (int j = 1; j <=i ; j++)
		{
			printf("%d*%d=%d ", i, j, i * j);
		}
		printf("\n");
	}

 }


int fibonacci(int n)
{

	if (n<=1)
	{
		return 1;
	}
	else
	{
		return fibonacci(n - 1) + fibonacci(n - 2);
	}
}

你可能感兴趣的:(笔记,c语言)