include函数,是引入的意思,stdio.h文件,函数都在stdio.h这个文件
printf 的第一个参数,必须是双引号字符串
%d %f %lf %c %p 都是格式占位符,因为C语言是面向过程的语言,所以所有的细节都要告诉计算机你再干什么,所以需要写的详写告诉计算机告诉你使用的是整数还是浮点数还是字符

sizeof不是函数,他是运算符

float浮点数会丢失精度,规定至少保留6位精度。小数默认是double双精度类型
const

scanf函数,输入,需要加&,取地址符

代码中的{}
{
xxx
xxx
}
这是1条语句。会隔离开来。
if语句

switch语句
case匹配值,会执行对应语句。程序按序执行,推出后,后面不会进行匹配,会继续执行后续输出语句,所以每个case后,对应一个break,执行完直接退出。
if和switch的区别,一个区间用if,不确定这个值是多少时,具体一个值,可以用switch

for循环
初始值:循环体:条件控制赋值

while语句

do while语句
do先去执行

break;continue;goto

break阻断自己所在的循环(如果存在多个for循环嵌套,有多少个循环就需要多少个break。这时候就可以用goto,无条件跳转,但要慎用)。continue跳出本次循环,后续继续。
数组
类型相同,内存连续的数据组合。

数组中的内存

CPU 通用寄存器宽度:CPU 一次运算最多处理多少 bit 数据,64 位 CPU 一次可以处理 64bit 的数据,运算更快
32位,有2的32次方 个内存地址。正好是4GB。

内存中都是用2进制存储的。但是为了方便阅读,是用16进制表示。
数组在内存中的表现
首地址来表示一个数据的地址

int类型 4个字节,图中1个格子表示1个字节,所以占4个格子。
数组也是同理

二维数组

三维数组




调试
F10逐过程:不进入到调用函数里面
F11逐语句:进入调用函数里面
函数
一个程序由多个函数组成,c++和java有类的概念。
函数的定义要是在 main主函数的下面。就需要在maim的上方进行函数的声明。


数组作为函数的参数
数组作为函数的参数,传递的是一个地址(空间) 。址传递比较特殊

函数的递归

随机函数原理

#include<stdlib.h>
伪随机数。
现有1个种子,赋值,再进行一个公式,生成随机数。
但,每次输出,随机数都是固定的。原因是种子没有变。
所以不能传常量。比较合适的就是时间,不会重复。
1970年1月1日,C语言创立日期 截止到现在的秒数,时间戳

随机种子变化,随机数就不会重复。
随机数控制区间

记住公式即可。
数组之字符数组

字符数组,没赋值默认是0,编译的时候默认是\0。
字符数组一定要留一个位置存放\0,\0代表字符数组。
遇到\0,后面的字符不会输出,就已经是结束了。
算法之查找算法
cpp
/*
查找数据
*/
int findData(int arr[], int len, int data) {
for (int i = 0; i < len; i++) {
if (arr[i] == data) {
return i;
}
}
return -1;
}
void main() {
int arr[] = { 1,2,3,6,8,10,7 };
int len = sizeof(arr) / sizeof(int);
int index = findData(arr, len, 8);
printf("%d\n", index);
}
算法练习之二分查找
cpp
/*
查找数据
二分查找:
1、数组里面的数据是连续的,有序
2、每查找一次,都会减少一半的查找范围
注意:
1、如果每次查找的数据index比目标数据小,舍去index及其左边的数据,min = index+1
2、如果每次查找的数据index比目标数据大,舍去index及其右边的数据,max = index-1
3、如果min>max,那么查找的数据就不在数组当中
*/
//二分查找
int findDataTwo(int arr[], int len, int data) {
int min = 0;
int max = len - 1;
while (min <= max) {
int index = (min + max) / 2;
if (arr[index] > data) {
max = index - 1;
}
else if (arr[index] < data) {
min = index + 1;
}
else {
return index;
}
}
return -1;
}
void main() {
int arr[] = { 1,2,3,4,5 };
int len = sizeof(arr) / sizeof(int);
int index = findDataTwo(arr, len, 4);
printf("%d\n", index);
}
算法练习之插值查找
int mid = low + (high - low) * (key - arrlow) / (arrhigh - arrlow) ;low表示左边索引left,high表示右边索引right. key 就是需要查找的值。
初始的时候,找到大概的index位置。
插值查找的特点
(1)查找的序列必须有序
(2)对于数据量大 的以及关键字 分布均匀的有序序列来说,插值查找的速度较快。
(3)对于分布不均匀的有序序列来说,该算法不一定比二分查找要好。
算法练习之分块查找
算法练习之哈希查找
排序算法之冒泡排序法

每次排序,会把当前遍历集合中最大值放到 遍历集合 末尾。
cpp
#include<stdio.h>
void main() {
//冒泡排序法
int arr[] = { 1,5,3,8,6,9,7,10,1,11 };
int len = sizeof(arr) / sizeof(int);
//10个数,循环9次,即可完成排序
for (int j = 0; j < len - 1; j++) {
//每次减去一个排好的数。第一次,和外层循环一致,10个数9次比较。
for (int i = 0; i < len - 1 - j; i++) {
if (arr[i] > arr[i + 1]) {
int temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
}
}
//输出排序后的数组
for (int i = 0; i < len; i++) {
printf("%d ", arr[i]);
}
}