0
点赞
收藏
分享

微信扫一扫

C语言学习——lesson 6 函数(2)

  1. 函数的声明和定义:

(1)函数声明:类型 函数名(参数);

1)告诉编译器有一个函数叫什么、参数是什么、返回类型是什么;但具体是否存在,无关紧要

2)函数声明出现在函数使用之前(先声明后使用)

3)函数声明一般放在头文件中(.h文件)

(2)函数定义:指函数的具体实现,交代函数的功能实现

/* test.c 文件 */

#include "ADD.h"

int Add(int x, int y);//函数的声明:可以用,但不适合

int main()
{
int a = 10;
int b = 20;
int sum = 0;
int sum1 = 0;
sum = Add(a, b);
sum1 = ADD(a, b);
printf("sum=%d\n", sum);
printf("sum1=%d\n", sum1);
return 0;

}

int Add(int x, int y)//函数的定义
{
int z = x + y;
return z;
}
/* ADD.c 文件*/

#include <stdio.h>

int ADD(int x, int y)//函数的定义
{
int z = x + y;
return z;

}
/* ADD.h 文件*/

#ifndef __ADD_H__ //#ifndef :if not define
#define __ADD_H__

int ADD(int x, int y);// 函数声明的正确用法

#endif

C语言学习——lesson 6 函数(2)_函数声明和定义

  1. 函数递归:程序调用自身的编程技巧——>大事化小

一个过程或函数在其定义或说明中有直接或间接的调用自身。

把一个大型复杂的问题层层转化为一个与原问题相似,规模较小的问题来解决

C语言学习——lesson 6 函数(2)_函数递归_02

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

////函数递归:大事化小

//void pr(int n)
//{
// if (n > 9)
// {
// pr(n / 10);
// }
// printf("%d ", n % 10);
//}

//int main()
//{
// //printf("hehe\n");
// //main(); //递归常见错误:出现栈溢出
// //接受一个整型值,顺序打印每一位
// unsigned int num = 0;
// printf("输入一个数:");
// scanf("%d", &num);
// //递归
// pr(num);
// return 0;
//}

C语言学习——lesson 6 函数(2)_函数声明和定义_03

  1. 递归的两个必要条件:

(1)存在限制条件:当满足限制条件时,递归不再继续。

(2)每次递归调用后越来越接近递归限制条件。

//// 编写代码求字符串长度,不允许

#include <string.h>

int my_strlen(char* str)
{
int count = 0;
while (*str != '\0')
{
count++;
str++;
}
return count;
}

int my_strlen1(char* str)//递归的方法
{
if (*str != '\0')
{
return 1 + my_strlen1(str + 1);
}
else
{
return 0;
}
}

int main()
{
char arr[] = "hello world";
int len = my_strlen(arr); //arr是数组。数组传参:传过去的不是整个数组,而是首元素的地址
int len1 = my_strlen1(arr);
printf("len=%d\n", len);
printf("len1=%d\n", len1);
return 0;
}

C语言学习——lesson 6 函数(2)_函数递归_04



举报

相关推荐

0 条评论