C语言中的常见函数
time () 获取当前时间
形参:表示获取当前时间是否需要在其他地方进行存储
一般来讲,不需要在其他地方进行存储的NULL(大写)
返回值:long long
随机数、
#include
#include
int main()
{
//设置种子
srand( time(NULL));
//获取随机数
int num = rand();
//输出打印
printf("%d\n",num);
return 0;
}
伪随机数
线性同余方程:
参数决定:随机数的范围、随机数的均匀度
随机数的弊端:
1.种子不变,随机数结果是固定的
2.随机数的范围
用于生产任意范围之内的随机数:
1.把这个范围变成包头不包尾,包左不包右的 1~101
2。拿着尾巴-开头 24-7=17
3.修改代码
六、数组
1.什么数组
数组:是一种容器,可以用来存储同种数据类型的多个值
2.数组的定义
数据类型 数组名 [长度]
int arr [3] (表示数组现在最多能存几个整数)
特点1:连续的空间
特点2:一旦定义,长度不可变
3.数组的初始化
3.1初始化:
定义数组的时候,第一次给数组赋值
3.2格式:
数据类型 数组名[长度] = {数据值,数据值...}
3.3细节:
3.3.1长度省略:
数据值的个数就是数组长度
数组长度:3
3.3.2长度未省略
数据值的个数<=长度
默认值:
整数:0 小数:0.0 字符:‘\0’ 字符串:NULL(什么都没有)
4.元素访问
元素访问——获取 修改
4.1索引:
索引就是数组的一个编号,也叫做:角标,下标,编号
特点:从0开始的,连续+1,不间断
4.2获取:
变量 = 数据名[索引]
int num = arr[5]
printf("占位符”,数组名[索引]);
printf("占位符",arr[5]);
4.3修改:
数组名[索引] = 数据值;
arr[5] = 10
5.数组的遍历
5.1遍历:
依次获取数组中的每一个元素
6.内存中的数组
6.1什么是内存
内存:软件在运行时,用来临时存储数据的
两个操作:1.把数据保存到内存中
2.从内存的对应位置把数据取出来
6.2内存地址
内存中每一个小格子的编号
作用:快速的管理内存空间
6.3内存地址的规则:
1.32位的操作系统,内存地址以32位的二进制表示
2.64位的操作系统,内存地址以64位的二进制表示
7.数组中的常见问题
问题1.
数组作为函数的形参
数组作为函数的参数进行传递的时候,那么实际上传递的是数组的首地址,如果要在函数中对数组进行遍历的话,记得一定要把数组的长度一起传递过去
而且在上面数组定义的地方两个arr不是同一个东西
在定义处:arr表示的是一个完整的数组
在函数中:arr表示的是一个变量,用来记录数组的首地址
问题2.
数组的索引越界
索引越界:访问了不存在的引索
最小索引:0
最大索引:长度 - 1
8.练习
数组求和
遍历数组求和
反转数组
打乱数组中的数据
9.数组常见算法
9.1查找算法
9.1.1基本查找(顺序查找)
一堆数据,要查找其中的某个数据
核心思路:就是从数据的0索引开始,依次往后查找
如果找到了,就会返回数据对应的索引
如果没有找到,就会返回-1
9.1.2.二分查找/折半查找
前提条件:数组中的数据必须是有序的
核心逻辑:每次排除一半的查找范围
1.min和max表示当前要查找的范围
2.mid是在min和max中间的
3.如果要查找的元素在mid左边,缩小范围时,min不变,max等于mid减1
4.如果要查找的元素在mid右边,缩小范围时,min不变,max等于mid加1
优势:提高查找效率
9.1.3插值查找
要求:数据要有序,且数据分布尽可能的均匀一点
优势:满足要求,效率比二分查找快,否则反而会更慢
9.1.4分块查找
分块的原则1:前一块中的最大数据,小于后一块中的所有数据(块内无序,块间有序)
分块的原则2:块数数量一般等于数字的个数开根号,比如16个数字一般分为4块左右
核心思路:先确定要查找的元素在哪一块,然后再块内挨个查找
9.2排序算法
9.2.1冒泡排序
冒泡排序:相邻的数据两两比较,小的放前面,大的放后面
过程:1.相邻的数据两两比较,小的放左面,大的放右面
2. 第一轮循环结束,最大值已经找到,在数组的最右边
3.第二轮循环只要在剩余的元素找最大值就可以了
4.第二轮循环结束,次大值已经确定,第三轮循环继续在剩余数据中循环
注意:1.相邻的数据两两比较,小的放左面,大的放右面
2.第一轮比较完毕之后,最大值就已经确定,第二轮可以少循环一次,后面以此类推
3.如果数组中有n个数据,总共我们只要执行n-1轮的代码就可以
9.2.2选择排序
选择排序:从0索引开始,拿着每一个索引上的元素跟后面的元素依次比较,小的放前面,大的放后面,以此类推
过程:1.从0索引开始,跟后面的元素一一比较
2.小的放前面,大的放后面
3.第一轮循环结束后,最小的数据已经确定
4.第二轮循环从1索引开始以此类推
5.第三轮循环从2索引开始以此类推
6.第四轮循环从3索引开始以此类推
七.指针
1.指针
什么是指针:指针=内存地址
什么是指针变量:存储着内存地址的变量
指针的变量定义格式:
数据类型(要跟指向变量的类型保持一致) *(标记) 变量名(自己起的名字)
指针的作用:查询数据
指针的使用细节:
1.指针变量的名字
2.指针变量的数据类型要跟指向变量的类型保持一致
3.指针变量占用的大小,跟数据类型无关,跟编译器有关
4.给指针变量赋值的时候,不能把一个数值赋值给指针变量
2.指针的作用
2.1第一个作用
操作其他函数中的变量
细节:函数中变量的生命周期跟函数相关,函数结束了,变量也会消失
此时在其他函数中,就无法通过指针使用了
如果不想函数中的变量被回收,可以在变量前面加static关键字
2.2第二个作用
函数返回多个值
2.3第三个作用
函数的结果和计算状态分开