函数的声明和定义
函数的真正使用是放在头文件中的,而在主函数中使用仅仅只是一个案例,教我们了解知识的
函数的定义在调用之后,报错。函数从上到下编译,当调用ADD函数,并未发现有ADD函数,继续往下知道遇到ADD函数,所以会报警
4
函数的定义放在调用之前正确函数置于后定义,需要在main函数前先声明
函数声明置于头文件中的操作,(模块的使用)
库里的头文件使用<> 自己定义的头文件使用" "
其中Add.cpp和Add.h组成一个加法模块
头文件中添加声明,源文件中添加定义,main函数前使用头文件
在初学编程的时候,觉得将所有代码写到一个文件中,但在公司里,不这么写
公司写程序
1.协作的角度 2.模块化
如何将模块编译成静态库以及导入静态库的操作
函数递归
//接受一个整形(无符号型),按顺序打印它的每一位
//列如:
//输入:1234 输出:1 2 3 4
//循环+数组的实现
//int main()
//{
// unsigned int num = 0;
// scanf("%u", &num);
// while (num)
// {
// printf("%d\n", num % 10);
// num = num / 10;
// }
// return 0;
//}
//递归实现
void print(unsigned int n)
{
if (n > 9)
{
print(n / 10);//123
}
printf("%d", n % 10);//4
}
//print(123) 4
//print(12) 3 4
//print(1) 2 3 4
//1 2 3 4
int main()
{
unsigned int num = 0;
scanf("%u", &num);
print(num);//打印它的每一位
return 0;
}
字符串传参和数组传参类似,穿的是首字符的地址
编写函数不允许创建临时变量,求字符串长度
//编写函数不允许创建临时变量,求字符串长度
//模拟实现strlen
//
// 使用了临时变量conunt
//int my_strlen(char str[]) 参数部分写成数组的形式
//int my_strlen(char* str) //参数部分写成指针的形式
//{
// int count = 0;//count用于计数,是一个临时变量
// while (*str != '\0')
// {
// count++;
// str++;
// }
// return count;
//}
//递归求解
//思路:my_str("abc")
// 1+my_str("ab")
// 1+1+my_str("a")
// 1+1+1+my_str("0")
int my_strlen(char* str)
{
if (*str != '\0')
{
return 1 + my_strlen(str+1);
//return 1 + my_strlen(++str);注意++str和str++的使用
}
else
{
return 0;
}
}
int main()
{
char arr[] = "abc";//[a b c\0]
int len = my_strlen(arr);
printf("%d", len);
return 0;
}
递归与迭代
递归求阶乘
int fac(int n)
{
if (n <= 1)
{
return 1;
}
else
{
return n*fac(n-1);
}
}
int main()
{
int n = 0;
scanf("%d", &n);
int ret = fac(n);
printf("%d", ret);
return 0;
}
迭代求阶乘
int fac(int n)
{
int i = 1;
int ret = 1;
for (i = 1; i <= n; i++)
ret = ret * i;
return ret;
}
int main()
{
int n = 0;
scanf("%d", &n);
int ret = fac(n);
printf("%d", ret);
return 0;
}
求第n个斐波那契数
递归求解但时间复杂度过大
//求第n个斐波那契数
//斐波那契数列
//1 1 2 3 5 8 13 21 34 55 ...
//前两个数相加为第三个数
//递归的解法,但时间复杂度过大
int Fib(int a)
{
if (a <= 2)
return 1;
else
return Fib(a - 1) + Fib(a - 2);
}
int main()
{
int n = 0;
scanf("%d", &n);
int ret = Fib(n);
printf("%d", ret);
return 0;
}
迭代求解
//迭代求解
int Fib(int n)
{
int a = 1;
int b = 1;
int c = 1;
while (n >= 3)
{
c = a + b;
a = b;
b = c;
n--;
}
return c;
}
int main()
{
int n = 0;
scanf("%d", &n);
int ret = Fib(n);
printf("%d", ret);
return 0;
}
递归栈溢出