C语言的真假:假:0 ? 真:非0 ?例如:-1、5都代表真
if、else、else if下方的语句,若没有代码块时,都默认只能控制一条语句,且else 是与距离最近的if匹配的
switch语句: case决定入口,break决定出口 若无case匹配的标签值,则增添default,位置可前可后 每一个case、default语句后都应加入break,若无则会顺序执行直至遇到break才跳出循环
while、for、do while循环中的break continue作用 break:循环全部结束 continue:在while、do while循环中,跳出本次循环,来到条件判断部分,看是否满足条件,循环是否继续进行 ? ? ? ? :在for循环中,跳出本次循环,来到i++,调整之后,在重新进入判断部分,看是否满足条件,循环时候进行
子函数定义: 返回值类型 函数名(参数类型 函数参数)//可以没有参数和返回值类型 { ?? ?子函数体; }
传值调用:形参和实参分别占据不同的内存空间,形参只是接收到了实参的数值,可以利用数值进行运算, ? ? ? ? ? 但是两者地址不同,对形参的修改不会影响到实参。 void swap(int a, int b) { ?? ?int tmp = a; ?? ?a = b; ?? ?b = tmp; } int main() { ?? ?int a = 0; ?? ?int b = 0; ?? ?scanf("%d%d", &a, &b); ?? ?swap(a, b); ?? ?printf("%d %d", a, b);
} ********************************************* //传址调用:将实参的地址传递给形参,使得实参和形参建立起真正的联系,形参改变则实参跟着改变。 void swap(int* a, int* b) { ?? ?int tmp = 0; ?? ?tmp = *a; ?? ?*a = *b; ?? ?*b = tmp; } int main() { ?? ?int a = 0; ?? ?int b = 0; ?? ?scanf("%d%d", &a, &b); ?? ?swap(&a, &b); ?? ?printf("%d %d", a, b);
} 函数参数 实参:真实传给函数的参数(主函数调用子函数时的参数),可以是常量,变量,表达式,函数 形参:子函数函数名后的参数,只有在子函数被调用时才分配内存单元,调用完成后自动销毁,只有在子函数中才有效
函数可以嵌套调用,但不可以嵌套定义 /* void test1() { ?? ?void test2() ?? ?{
?? ?} } */
函数链式访问:把一个函数的返回值作为另一个函数的参数
函数先声明后使用,若在调用前有子函数的定义,则可不必声明
函数分模块: 子函数.c :放子函数的定义 子函数.h :放子函数的声明 (定义子函数的第一行)--> 返回值类型 子函数名( 参数类型 子函数参数 ) 主函数 ? :#include "子函数名.h"+子函数的调用
函数递归:函数自己调用自己 //例1:将1234按顺序打印每一位 print(1234) = print(123)4 = print(12)34 = print(1)234 = 1234; print(1234) = print(1234 / 10) + printf("%d ", 1234 % 10); print(123)= print(123/10)+ printf("%d ", 123 % 10); print(12)= print(12 / 10)+ printf("%d ", 12 % 10); print(1) = printf(1 % 10);
int print(int n) { ?? ?if (n > 9) ?? ?{ ?? ??? ?print(n / 10); ?? ?} ?? ?return printf("%d ", n % 10); } int main() { ?? ?int num = 1234; ?? ?print(num); } //例2:利用递归法求字符串长度 int len(char* ch) { ?? ?if (*ch == '\0') ?? ?{ ?? ??? ?return 0; ?? ?} ?? ?else ?? ?{ ?? ??? ?return 1 + len(ch + 1); ?? ?} } int main() { ?? ?char arr[] = "abcde"; ?? ?printf("%d\n", len(arr)); } //例3:求第n个斐波那契数 int fib(int n) { ?? ?if (n > 2) ?? ?{ ?? ??? ?return ?fib(n - 1) + fib(n - 2); ?? ?} ?? ?else if (n > 0 && n < 3) ?? ?{ ?? ??? ?return 1; ?? ?} ?? ?else ?? ?{ ?? ??? ?return 0; ?? ?} } int main() { ?? ?int ?n = 0; ?? ?scanf("%d", &n); ?? ?printf("%d\n", fib(n)); }
|