C语言基础教程(4)数组和函数
数组
数组的使用:
为什么需要数组
1:为了解决大量同类型数据的存储和使用问题。
2:用数组可以模拟现实世界。
Int a[25]:一维数组,可以当做一个线性结构。
Int a[8][6]:可以当做一个平面,意思是8行6列。有48个元素。
Int a[3][4][5]:可以当做一个三维 立体。
Int a[3][4][5][6]:可以当做一个四维空间。
数组的分类
一维数组
怎样定义一维数组:
-
为n个变量分配存储空间:数组内存空间是连续的。
-
所有的变量类型必须相同:数组不可能第一个元素是整形,第二个元素是浮点型。
-
所有变量所占用的字节必须相等。
例子: int [5]
数组不是学习重点的原因?
数组一旦定义,其长度是死的。
有关一维数组的操作 --都需要自己另外编程序实现
而我们通常用第三方软件(工具)如数据库等方便直接地实现。
对数组的操作:
初始化 赋值 排序 求最大/小值 倒置 查找 插入 删除
·初始化:
上图中a[5]前面如果没有加上数据类型,那么这里的a[5]不是指一个数组,其中的5只的是下标。
上图中,数组的5个元素不是用a来代表的,是用a0,a1…a4来代表的,所以说数组名a代表的不是数组的5个元素,数组名代表的是数组的第一个元素的地址。
·赋值
把一个数组元素给全部倒过来:
-
排序
-
求最大/小值
-
倒置
-
查找
-
插入
-
删除
二维数组:
二维数组的初始化:
输出二维数组内容:
多维数组:
是否存在多维数组:不存在
因为内存是线性一维的,在内存中是不分行不分列的。
N维数组可以当做每个元素是n-1维数组的 一维数组。
函数
为什么需要函数:
·避免了重复性操作。
·有利于程序的模块化。
(自上而下,逐步细化,大问题分解成小问题)
用它作为参照,可以对比 JAVA 和C#面向对象的思想。
C语言基本单位是函数,C#、C++和JAVA基本单位是类。
什么叫做函数
·逻辑上:能够完成特定功能的独立的代码块。
物理上:能够接收数据【也可以不接收数据】,能够对接收的数据进行处理【也可以不对数据进行处理】,能够将数据处理的结果返【也可以没有返回值】。
·总结:函数是个工具,他是为了解决大量类似问题而设计的,函数可以当做黑匣子(内部原理不用管)。
如何定义函数
·函数的返回值,函数的名字(函数的形参列表)
{
函数的执行体
}
·函数定义的本质:详细描述函数之所以能够实现某个特定功能的具体方法。
函数中的变量叫做形参;数组中的变量叫元素。
一旦函数执行完毕,其内部的形参所占空间就被收回。
return表达式的含义:
Return是终止被调函数,向主调函数返回表达式的值,如果表达式为空,则只终止函数,不向被主函数返回任何值。
Break是用来终止(就近的)循环和switch语句。而return是用来终止被调函数的。
函数返回值的类型
也称为函数的类型,因为如果函数名前的返回值类型和函数执行体中的return表达式中表达式的类型不同的话,则最终函数返回值的类型以函数名前的返回值类型为准。
例:
在上图中,函数的返回值以函数前的数值类型为准。
函数的分类
·有参函数和无参函数。
·有返回值和无返回值。
·库函数和用户自定义函数。
·普通函数和主函数(main函数)
1:一个程序有且只有一个主函数。
2:主函数可以调用普通函数,普通不能调用主函数。
3:普通函数可以相互调用。
4:主函数是程序的入口,也是函数的出口。
5:值传递函数和地址传递函数。
判断一个数是否是素数:
使用函数判断一个数是否是素数:
函数和程序的调用应该注意的地方:
函数的声明:
当函数没有返回值时,那么规范的写法是要在函数中写明void的。
在上图中,第一个void表示没有返回值,而第二个void表示不接收形参,也就是函数不接收数据。
如果想把函数写在程序的后面,那么需要写函数声明:
函数声明的含义是告诉编译器f()是个函数名。如果不加函数声明,那么编译器在编译到f的时候,不知道f是个什么,如果加了函数声明,那么编译器编译到f的时候,就知道f是个函数。
·需要注意的是,调用语句需要放在定义语句的后面,也就是说,定义函数的语句要放在调用语句的前面。
如果函数调用写在了函数定义的前面,则必须加函数前置声明,函数前置声明的作用是:
1:告诉编译器即将可能出现的若干个字母代表的是一个函数。“打招呼”
2:告诉编译器即将可能出现的若干个字母所代表的函数的形参和返回值的具体情况。
3:函数声明必须是一个语句,也就是在函数声明后需加分号。
4:对库函数的声明也就是系统函数。是通过#include<库函数所在的文件的名字.h>来实现的。如stdio.h
形参和实参要求:
1:形参和实参个数是一一对应的。
2:形参和实参的位置也是一一对应的。
3: 形参和实参的数据类型需要相互兼容。
·如何在软件开发中合理的设计函数来解决实际问题。
求1到某个数字之间的数是否是素数,并将他输出:
合理设计函数1
合理设计函数2:
合理设计函数3:
合理的设计函数4:
合理设计函数5:
常用的系统函数和如何通过书籍来学习函数:
Turboc2.0实用大全—机械工业出版社
变量的作用域和存储方式:
全局变量和局部变量:
局部变量:
局部变量的使用范围只能在本函数内部使用。
全部变量:
全局变量和局部变量命名冲突的问题:
在同一个范围之内不能定义两个一样的局部变量:
在一个函数内部,如果定义的局部函数的名字和全局变量名一样时,局部变量会屏蔽掉全局变量:
上例中最终的输出结果是8,因为局部变量把全局变量给屏蔽掉了。