前期C语言回顾 函数
2014-11-12 14:27
134 查看
// 函数
// printf()输出函数,用于输出一个信息
printf("输出函数\n");
// scanf()输入函数,用于从键盘输入一个信息
int a = 0;
scanf("%d", &a);
// strlen()求字符串长度函数,用于求出指定字符串的长度
unsigned long strLength = strlen("I
Love You");
printf("strLength
= %lu\n", strLength);
// strcpy()字符串拷贝函数,用于实现字符串的赋值
char str1[] = "I Like iOS";
char str2[] = "";
strcpy(str2, str1);
printf("str2 = %s\n", str2);
// 以上总结:
// 这些都是函数,都实现了某一特定的功能,并且这些函数都是系统提供了,我们除了使用系统提供的函数之外,我们也可以使用自定义的函数
// 那么,什么是函数呢? 答:函数是具有某段功能的代码片段
// 通俗的讲:我们把一连串得语句放在一起,实现了某一个功能,然后我们给这些代码起一个名字。之后我们想使用这段代码的时候直接使用他们的名字
// 使用函数,可以省去大量的重复代码,大大简化程序,提高我们的开发效率
// 函数的分类
// 从函数的定义上来区分,函数可以分为两类函数
// 库函数:系统提供的函数,例如:printf() / scanf() / strlen()
...
// 自定义函数:开发者自己写的函数
// 库函数我们直接拿过来使用就可以了,那么,我们如何自己写函数???呢
// 函数的一般形式
// 返回值类型 函数名(形式参数列表)
// {
// 执行语句;
// return 返回值;
// }
// 返回值类型: 函数可以有一个返回值,也可以没有,函数处理完之后,返回给你一个信息,你可以接收后使用,这个数据是函数给我们的
// 函数名: 我们可以写很多的函数,如何区别出这些函数,我们就可以给函数命不同的名字,使用函数名找到函数
// 形式参数列表: 让函数处理一些数据,我们使用参数的方式传递给函数,这里的数据是我们给函数的
// 执行语句: 函数拿到数据后,进行处理,主要是函数的内部实现语句
// return 返回值: 函数处理好数据之后,需要把结果返回。!注意:这里的返回值类型,需要与上面标注的返回值类型一致
// 函数如果细致分的话可以分为4种:
// 1. 无返回值无参数
// 2. 无返回值有参数
// 3. 有返回值无参数
// 4. 有返回值有参数
// 例如:
// 无返回值,无函数(功能:打印Hello
World !)
void hello1()
{
printf("Hello
World !");
}
// 无返回值,有参数(功能:输出参数内容)
void hello2(char str[])
{
printf("%s", str);
}
// 有返回值,无参数(功能:返回圆周率π的值)
float PI()
{
return 3.1415925;
}
// 有返回值,有参数(功能:计算两个参数的和并返回)
int sum(int a, int b)
{
return a + b;
}
// 再来解释下什么是返回值:
// 函数的返回值称为函数的值,只能通过return语句返回给主调函数
// 注意:一个函数只能有一个返回值
// 如果一个函数没有返回值,也可以使用return语句来结束函数的执行,return后面的代码不再执行。回到主调函数
// 写好了函数,下面开始使用函数了,也就是函数的调用。想一下,库函数是如何使用的?
printf("形式参数列表");
// 上面的代码是调用了系统提供的输出函数,直接是函数名+小括号+传递的数据+小括号+分号
// 我们自己写的函数调用方式也是一样的
hello1();
hello2("形式参数列表");
// 当代码执行到函数的调用的时候,就会去执行函数内部的代码,当函数内部执行完毕之后,再回来继续执行函数下面的代码
// 我们成功的调用了函数,那么,我们就给函数一些数据,让函数帮助我们处理数据,How
do?
// 提到了参数,其实是分为两种的:
// 1. 实参(实际参数):出现在函数调用中的表达式
// 2. 形参(形式参数):出现在函数定义中,以假名字来表示函数调用时需要提供的值
// 注意:在函数调用中,形参会拷贝实参内容,传递参数是给函数传送信息的一种方式
// Implicit declaration of function'midValue' is invalid in C99
// 暗示的 宣布、宣告、声明 函数 无效的
// 函数是需要声明的???
// 严格意义上来讲,函数通常包含3部分:函数声明、函数定义、以及函数的调用
// 函数声明:指的就是函数的描述,也叫函数原型
// 函数声明的位置:
// 1. 函数定义放在主函数的上面,不需要函数的声明
// 2. 函数定义放在主函数的下面,需要函数的声明
// 注意:函数声明虽然可以省略,但是在规范上来讲,函数的声明尽量加上
// 重点!!!!
// 函数声明的文件和位置:
// 我们把函数的声明和定义分别放在不同的文件中
// xxx.h:头文件: 存放函数的声明部分
// xxx.m:实现文件: 存放函数的定义部分
// 注意:需要在xxx.m文件中
// 数组作为函数参数
// 如果是数组元素作为参数:与普通变量一样
// 如果是数组作为参数,把数组名传入,即数组的首地址
// 注意,此时,形参和实参实际上是同一个变量,是同一段内存
// 函数的嵌套调用
// C语言不允许函数嵌套定义,但是允许函数嵌套调用
// 注意:避免出现函数的嵌套定义
// 函数的递归调用(了解即可)
// C语言允许函数实现体内再次调用函数本身。这种调用方式称为递归调用,这个函数称为递归函数
// 在计算机中阶乘就可以使用递归调用
// 注意:递归一定要有出口
// 变量的作用域
// 变量分为两种:全局变量、局部变量
// 全局变量(外部变量):文件作用域,从变量被声明的点开始一直到所在文件的末尾
// 局部变量:块作用域,从变量被声明的点开始一直到第一个大括号的结尾处
// 定义在函数外面的都称为全局变量,作用域很大
// 局部变量就是定义在函数大括号内部的变量
// printf()输出函数,用于输出一个信息
printf("输出函数\n");
// scanf()输入函数,用于从键盘输入一个信息
int a = 0;
scanf("%d", &a);
// strlen()求字符串长度函数,用于求出指定字符串的长度
unsigned long strLength = strlen("I
Love You");
printf("strLength
= %lu\n", strLength);
// strcpy()字符串拷贝函数,用于实现字符串的赋值
char str1[] = "I Like iOS";
char str2[] = "";
strcpy(str2, str1);
printf("str2 = %s\n", str2);
// 以上总结:
// 这些都是函数,都实现了某一特定的功能,并且这些函数都是系统提供了,我们除了使用系统提供的函数之外,我们也可以使用自定义的函数
// 那么,什么是函数呢? 答:函数是具有某段功能的代码片段
// 通俗的讲:我们把一连串得语句放在一起,实现了某一个功能,然后我们给这些代码起一个名字。之后我们想使用这段代码的时候直接使用他们的名字
// 使用函数,可以省去大量的重复代码,大大简化程序,提高我们的开发效率
// 函数的分类
// 从函数的定义上来区分,函数可以分为两类函数
// 库函数:系统提供的函数,例如:printf() / scanf() / strlen()
...
// 自定义函数:开发者自己写的函数
// 库函数我们直接拿过来使用就可以了,那么,我们如何自己写函数???呢
// 函数的一般形式
// 返回值类型 函数名(形式参数列表)
// {
// 执行语句;
// return 返回值;
// }
// 返回值类型: 函数可以有一个返回值,也可以没有,函数处理完之后,返回给你一个信息,你可以接收后使用,这个数据是函数给我们的
// 函数名: 我们可以写很多的函数,如何区别出这些函数,我们就可以给函数命不同的名字,使用函数名找到函数
// 形式参数列表: 让函数处理一些数据,我们使用参数的方式传递给函数,这里的数据是我们给函数的
// 执行语句: 函数拿到数据后,进行处理,主要是函数的内部实现语句
// return 返回值: 函数处理好数据之后,需要把结果返回。!注意:这里的返回值类型,需要与上面标注的返回值类型一致
// 函数如果细致分的话可以分为4种:
// 1. 无返回值无参数
// 2. 无返回值有参数
// 3. 有返回值无参数
// 4. 有返回值有参数
// 例如:
// 无返回值,无函数(功能:打印Hello
World !)
void hello1()
{
printf("Hello
World !");
}
// 无返回值,有参数(功能:输出参数内容)
void hello2(char str[])
{
printf("%s", str);
}
// 有返回值,无参数(功能:返回圆周率π的值)
float PI()
{
return 3.1415925;
}
// 有返回值,有参数(功能:计算两个参数的和并返回)
int sum(int a, int b)
{
return a + b;
}
// 再来解释下什么是返回值:
// 函数的返回值称为函数的值,只能通过return语句返回给主调函数
// 注意:一个函数只能有一个返回值
// 如果一个函数没有返回值,也可以使用return语句来结束函数的执行,return后面的代码不再执行。回到主调函数
// 写好了函数,下面开始使用函数了,也就是函数的调用。想一下,库函数是如何使用的?
printf("形式参数列表");
// 上面的代码是调用了系统提供的输出函数,直接是函数名+小括号+传递的数据+小括号+分号
// 我们自己写的函数调用方式也是一样的
hello1();
hello2("形式参数列表");
// 当代码执行到函数的调用的时候,就会去执行函数内部的代码,当函数内部执行完毕之后,再回来继续执行函数下面的代码
// 我们成功的调用了函数,那么,我们就给函数一些数据,让函数帮助我们处理数据,How
do?
// 提到了参数,其实是分为两种的:
// 1. 实参(实际参数):出现在函数调用中的表达式
// 2. 形参(形式参数):出现在函数定义中,以假名字来表示函数调用时需要提供的值
// 注意:在函数调用中,形参会拷贝实参内容,传递参数是给函数传送信息的一种方式
// 1、编写函数int sumValue(int n):计算1到n的和。 int sumValue(int n) { int result = 0; for (int i = 0; i < n; i++) { result += i; } return result; } // 2、编写函数dayOfYear(year, mouth,day),使得函数返回由这三个参数确定的那一天是一年中的第几天。 int dayOfYear(int year, int month, int day) { int result = 0; //1 2 3 4 5 6 7 8 9 10 11 12 int days[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; BOOL isBissextile = (year % 400 == 0) || (year % 4 == 0 && year % 1 != 0); days[1] = isBissextile ? 29 : 28; for (int i = 0; i < month - 1; i++) { result += days[i]; } result += day; return result; } // 3. 编写函数,返回三个数的中间数 int midValue(int a, int b, int c) { int maxValue = (a > b ? a : b) > c ? (a > b ? a : b) : c; int minValue = (a < b ? a : b) < c ? (a < b ? a : b) : c; printf("maxValue = %d\n", maxValue); printf("minValue = %d\n", minValue); return a + b + c - maxValue - minValue; }
// Implicit declaration of function'midValue' is invalid in C99
// 暗示的 宣布、宣告、声明 函数 无效的
// 函数是需要声明的???
// 严格意义上来讲,函数通常包含3部分:函数声明、函数定义、以及函数的调用
// 函数声明:指的就是函数的描述,也叫函数原型
// 函数声明的位置:
// 1. 函数定义放在主函数的上面,不需要函数的声明
// 2. 函数定义放在主函数的下面,需要函数的声明
// 注意:函数声明虽然可以省略,但是在规范上来讲,函数的声明尽量加上
// 重点!!!!
// 函数声明的文件和位置:
// 我们把函数的声明和定义分别放在不同的文件中
// xxx.h:头文件: 存放函数的声明部分
// xxx.m:实现文件: 存放函数的定义部分
// 注意:需要在xxx.m文件中
// 数组作为函数参数
// 如果是数组元素作为参数:与普通变量一样
// 如果是数组作为参数,把数组名传入,即数组的首地址
// 注意,此时,形参和实参实际上是同一个变量,是同一段内存
// 函数的嵌套调用
// C语言不允许函数嵌套定义,但是允许函数嵌套调用
// 注意:避免出现函数的嵌套定义
// 练习3:求N个数的最大值 int aaa[] = {12, 43, 32, 5, 23}; printf("\nMaxValue = %d", maxValue(aaa, 5)); // 练习3,求N个数的最大值 int maxValue(int arr[], int count) { for (int i = 0; i < count - 1; i++) { for (int j = 0; j < count - 1 - i; j++) { if (arr[j] < arr[j + 1]) { int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } return arr[0]; } // 练习4 // 计算 s = (1*1)!+(2*2)! + (3*3)! // 练习4,求一个数的阶乘 int square(int a) { return a * a; } int factorial(int a) { int result = 1; for (int i = 1; i <= a; i++) { result *= i; } return result; }
// 函数的递归调用(了解即可)
// C语言允许函数实现体内再次调用函数本身。这种调用方式称为递归调用,这个函数称为递归函数
// 在计算机中阶乘就可以使用递归调用
// 注意:递归一定要有出口
// 变量的作用域
// 变量分为两种:全局变量、局部变量
// 全局变量(外部变量):文件作用域,从变量被声明的点开始一直到所在文件的末尾
// 局部变量:块作用域,从变量被声明的点开始一直到第一个大括号的结尾处
// 定义在函数外面的都称为全局变量,作用域很大
// 局部变量就是定义在函数大括号内部的变量
相关文章推荐
- 前期C语言回顾 循环结构
- C语言回顾之函数与数组
- 前期C语言回顾 进制、C数据类型、常量变量、运算符、表达式、格式化输入输出
- C语言回顾(四、字符串及其处理函数重写)——iOS开发基础
- 黑马程序员-------C语言回顾-函数和位运算
- C语言回顾 六 函数
- 回顾向 : 函数指针 & 回调函数 & 面向对象风格的C语言
- 前期C语言回顾 数组
- 黑马程序员-c语言回顾-函数
- 黑马程序员-C语言回顾-fgets()和puts()函数
- C语言回顾(六、基类型,数组指针,字符串指针,函数指针,文字常量区)——iOS开发基础
- C++基础8【难】 回顾:数组指针,函数指针,函数指针做函数参数 C语言多态
- 前期C语言回顾 关系运算符、逻辑运算符、if 、条件运算符、switch..case
- C语言回顾(五、函数,递归,Hanoi汉诺塔,整数转字符串)——iOS开发基础
- C语言提高-第7讲: 返回指针的函数(回顾“野指针”)
- c语言回顾--函数
- C语言教程---第五章:函数
- 水滴石穿C语言之指针、数组和函数(转载)
- c语言写的*.dbf文件的操作函数库
- 空格在scanf函数中作参数(c语言)