一.枚举
1.枚举是一个类型 一个常量数组
2.关键字:enum
1 enum Week{MON,TUE,WED,THU,FRI,SAT,SUN};
3.声明一个enum Week w 那么sizeof(w)的大小是4
w可以等于以上七个里面中的任意一个 只能在范围之内赋值
默认情况下 不赋值第一个从0开始 MON=0 TUE=1 以此类推
但例如对THU进行赋值 让THU=100 那么FRI就是101
之所以大小是4 因为它就是一个int类型的变量
4.作用:方便代码的阅读
枚举可以用宏来代替 也可以说 枚举也是声明常量的一种方式
1 #include<stdio.h> 2 3 enum Week {MON,TUE,WED,THU,FRI,SAT,SUN}; 4 enum CaiQuan {JIANDAO,SHITOU = 100,BU}; 5 6 int main() 7 { 8 enum CaiQuan cq = BU; 9 10 switch(cq) 11 { 12 case JIANDAO: 13 printf("%d ",JIANDAO); 14 break; 15 case SHITOU: 16 printf("%d ",SHITOU); 17 break; 18 case BU: 19 printf("%d ",BU); 20 break; 21 } 22 23 return 0; 24 }
二.联合体
联合体的所有成员共享一块内存 联合体的大小看最大的成员有多大
1 #include<stdio.h> 2 3 typedef union MyUnion 4 { 5 int a; 6 short b; 7 char c; 8 int d; 9 }MU; 10 11 int main() 12 { 13 MU mu; 14 int n; 15 16 n = sizeof(mu); 17 18 /*mu.a = 10; 19 printf("%d ",mu.b); 20 21 mu.c = 100; 22 printf("%d ",mu.a);*/ 23 24 mu.c = 1; 25 printf("%d ",mu.a); 26 27 return 0; 28 }
说明:这段代码输出的时候 是乱码的
因为c是char 只有一个字节 但是a是int类型的 有四个字节
但如果把下面两行注掉 上面注掉的四行放开的话 就可以正常输出 因为a已经被赋过值了
三.递归
1.定义:就是自己调用自己 调用过程执行不止一次
2.递归和循环的区别:速度的话还是要看循环的复杂度 但是递归消耗的空间比较大
3.写递归的注意事项:写递归 一定要把递归的出口设置好
4.例题:
①用递归完成阶乘:
1 #include<stdio.h> 2 3 int JieCheng(int n); 4 int JieCheng1(int n); 5 6 int main() 7 { 8 int n = JieCheng1(5); 9 10 return 0; 11 } 12 13 int JieCheng(int n) 14 { 15 int i; 16 int value = 1; 17 for(i=1;i<=n;i++) 18 { 19 value = value * i; 20 } 21 22 return value; 23 } 24 25 int JieCheng1(int n) 26 { 27 if(n == 1) 28 { 29 return 1; 30 } 31 32 return n * JieCheng1(n-1); 33 }
理解:5!=5*4! 4!=4*3! 3!=3*2! 2!=2*1! 1!=1
②斐波那契:
n | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
Fib(n) | 1 | 1 | 2 | 3 | 5 | 8 | 13 | 21 |
1 #include<stdio.h> 2 3 int Fib(int n); 4 5 int main() 6 { 7 int n = Fib(8); 8 9 return 0; 10 } 11 12 int Fib(int n) 13 { 14 if(n == 1 || n == 2) 15 { 16 return 1; 17 } 18 19 return Fib(n-1) + Fib(n-2); 20 }
③用递归实现strlen:
1 #include<stdio.h> 2 3 int MyStrlen(char* str); 4 5 int main() 6 { 7 int n = MyStrlen("12345"); 8 9 return 0; 10 } 11 12 int MyStrlen(char* str) 13 { 14 if(*str == '