3.8-day08-C语言基础-C语言中的函数
C语言中使用函数对大量语句进行分组。
函数编写方法如下
返回值类型 函数名称(形参列表) {
语句
}
不同的函数通过函数名区分
返回值是一个变量,可以用来记录函数执行过程中产生的一个新数据。这个变量在函数结束后可以被其他函数使用。
形参就是一组变量,函数开始执行时被临时创建出来并使用指定数据进行初始化。
大括号前面的部分可以独立存在,叫做函数声明。
大括号整体叫做函数体。
fflush(stdout);
这条语句可以把输出缓冲区里的内容立刻显示在屏幕上
形参和实参是完全不同的,实参用来对形参进行初始化。函数结束后形参自动消失。
在源程序文件的开头应该把文件中所有函数的声明都列出来。否则有可能在编译的时候导致函数隐式声明,这种声明方式有可能出问题。
exit(0);语句可以在任何地方终止整个程序的执行,需要包含stdlib.h文件。
使用数组做参数时形参和实参是同一个数组,函数中修改了数组的内容调用函数可以看着数组的变化。
使用数组做参数需要一个专门的参数表示数组中的变量个数
递归函数在执行过程中还会再次调用自己
用循环方法解决问题的思路叫做递推,用递归函数解决问题的思路叫做递归
01func.c
1 /* 2 函数练习 3 */ 4 #include <stdio.h> 5 int add(int value, int value1) { 6 return value + value1; 7 } 8 void show(int value) { 9 printf("计算结果是"); 10 printf("%d\n", value); 11 } 12 int main() { 13 int value = 0; 14 value = add(2, 3); 15 value = add(value, 4); 16 show(value); 17 return 0; 18 }


02read.c
1 /* 2 函数练习 3 */ 4 #include <stdio.h> 5 int read() { 6 int value = 0; 7 printf("请输入一个整数:"); 8 while (!scanf("%d", &value)) { 9 scanf("%*[^\n]"); 10 scanf("%*c"); 11 printf("请再次输入一个整数:"); 12 } 13 scanf("%*[^\n]"); 14 scanf("%*c"); 15 return value; 16 } 17 int main() { 18 int value = 0; 19 value = read(); 20 printf("数字是%d\n", value); 21 return 0; 22 }

03add.c
1 /* 2 函数练习 3 */ 4 #include <stdio.h> 5 //int add(); 隐式函数声明 6 int add(int , int ); //显示函数声明 7 int main() { 8 int value = 0; 9 value = add(2, 3); 10 printf("%d\n", value); 11 return 0; 12 } 13 int add(int value, int value1) { 14 return value + value1; 15 }

隐式函数声明和显示函数声明都是可以编译运行执行的;
04func.c
/* 函数练习 */ #include <stdio.h> #include <stdlib.h> void func() { printf("abc\n"); //return ; exit(0); printf("def\n"); } int main() { func(); printf("xyz\n"); return 0; -

exit(0);语句可以在任何地方终止整个程序的执行,需要包含stdio.h 文件;
05func.c
/* 函数练习 */ #include <stdio.h> void neg(int value[], int num) { //printf("sizeof(value)是%d\n", sizeof(value)); int loop = 0; for (loop = 0; loop <= num - 1; loop++) { value[loop] = 0 - value[loop]; } } int main() { int value[] = {4, -7, 9, -8}, loop = 0; neg(value, 4); for (loop = 0; loop <= 3; loop++) { printf("%d ", value[loop]); } printf("\n"); return 0; }

06square.c
/* 数组做参数的练习 */ #include <stdio.h> void square(int value[], int num) { int loop = 0; for (loop = 0; loop <= num - 1; loop++) { value[loop] *= value[loop]; } } int main() { int value[] = {3, -6, -2, 9}, loop = 0; square(value, 4); for (loop = 0; loop <= 3; loop++) { printf("%d ", value[loop]); } printf("\n"); return 0; }

07func.c
/* 递归函数练习 */ #include <stdio.h> void print(int num) { if (1 == num) { printf("1\n"); } else { printf("%d\n", num); print(num - 1); } } int main() { int loop = 0; /*printf("1\n"); printf("1\n"); printf("1\n");*/ /*for (loop = 0; loop < 3; loop++) { printf("1\n"); }*/ print(9); return 0; }

08sum.c
/* 递归练习 */ #include <stdio.h> int sum(int num) { if (1 == num) { return 1; } else { return num + sum(num - 1); } } int main() { printf("sum(5)是%d\n", sum(5)); return 0; }


如果把被调用的函数写在后面不进行声明,编译的时候会出现错误;
如果把调用的函数写在后面需要在主函数里面进行声明;


09han.c
/* 递归练习 */ #include <stdio.h> void han(int num, char src, char mid, char dest) { if (1 == num) { printf("把盘子%d从%c柱移动到%c柱\n", num, src, dest); } else { han(num - 1, src, dest, mid); printf("把盘子%d从%c柱移动到%c柱\n", num, src, dest); han(num - 1, mid, src, dest); } } int main() { int num = 0; printf("请输入盘子个数:"); scanf("%d", &num); han(num, 'A', 'B', 'C'); return 0; }

浙公网安备 33010602011771号