#includevoid new_line() { printf ("hehe n"); } void three_line() { int i = 0; for ( i = 0; i <3; i++) { new_line(); } } int main() { three_line(); return 0 ; }
我们连续调用两个我们所设置的函数,打印hehe 以及 循环3次
main调用 three_line three_line里调用new_line,但注意,两个函数是并列的,可以嵌套调用,但不能嵌套定义
链式访问把一个函数的返回值,作为另一个函数的参数
#include#include int main() { // int len strlen("abc")能够求出他的长度 // printf ("%dn",len); 会打印出3,也就他的长度 // 合成一句 printf("%dn",strlen("abc")),我们把strlen的返回值作为printf的参数,这就是链式访问 printf("%d",printf("%d",printf("%d",43))); return 0 ; }
我们会打印出 4 3 2 1 这是怎么一回事?
printf 返回的是个数(字符)
里面的printf 输出43,所以第二个打印出来就是两个字符 2 ; 第一个打印出来的就是一个字符 1
函数的声明和定义
#include//函数申明一下,我们就知道有这个函数就不会再次出错了 int add(int x,int y); // 声明,但是我不屑,我放在后面写 int main() { int a = 0; int b = 0; scanf("%d %d",&a,&b); int ret = add(a,b); printf("%dn",ret); } //先想好咋用,再想怎么去实现 //函数的定义 int add (int x , int y ) { int z = x + y; return z; // 我们把add 放前面就不会出现警告或者错误,也就是我们的函数未定义 }
为什么拆分头文件和源文件?
举个例子
nb的程序员,自己写了个软件库,想卖钱,想卖多份,但他不想让别人看到源代码,不让别人改,这样他把他的代码拆成两部分,把实现写到一个,把源文件写到另一个,这样卖头文件(说明书),你就可以使用这个函数,但是你不知道他是咋写的(源文件就是我们的流程)
#pragma comment(lib,"add .lib")
//导入静态库
!!!函数递归1.什么是递归?
——大事化小。函数调用自身的编程技巧
最简单的递归
//最简单的递归 #includeint main() { printf ("hehen"); main(); return 0; }
递归到函数崩溃了,就停止了,但是这样的写法本身就是错误的,但确实是递归 stack overflow(栈溢出)
再举个例子
//输入一串数,按顺序输入每一位 无符号
void Print(unsigned int n ) // n =1234
{
// 用 1234/ + 1234%10
if (n > 9)
{
Print ( n /10); // 123
}
printf("%d ",n % 10);//4
}
#include
int main()
{
unsigned int num = 0;
scanf("%u",&num);
Print(num);
}
如果我输入的是 123
1. 递 我们输入 123 ,Print 把123 递 给我们 Print 函数,因为大于 9 所以我们进行第一次运算,算出是12,但是我们 if 里面还是 Print 所以又回来 到 if ,所以 if 往下 ,他 又会进行 这下我们就是 1 ,这个时候我们就不会再 if 了 我们就会输入 1_
2.归 当我们的1输入完后,接下来就到归了,我们就会进行 12%10 算出 2_,我们调用完后,我们就会再归一次,就是 123 ,来一次 123%10 就是3_ ,然后回到我们最开始的函数 ,打印出来
再来个例子
#includevoid test() { printf("hehen"); } int main() { printf("hehen"); test(); printf("hehen"); return 0; }
我们调用出去,执行完后,会再次回到我们使用的地方,进行运算,所以开始的程序我们的 123是在后面Print 都执行完后回来执行的、
我们的递归必须要有条件,每一次函数调用都会在内存的栈区申请一块空间,所以我们让他有限制的递归
条件要有用,让递归后接近限制条件
(1.存在条件 2.接近条件)
#includeint my_strlen(char* s) { int count = 0; while (*s != ' ')//用while才可以进行循环计算 { count++; s++; } return count; //相当与输出个数 } int main() { //求字符串长度 char arr[] = "abc" //数组名是数组首元素的地址 int len = my_strlen(arr); printf("%dn", len); return 0; }
不同的定义我们跳过的数字不同



