c语言学习笔记:循环辅助语句与数组
循环辅助语句写循环的时候有时候不想让它老老实实跑完所有轮次就需要这几个语句来控制流程break —— 直接跳出当前整个循环。多层嵌套的话只跳出它所在的那一层。continue —— 跳过本次循环剩下的部分直接进入下一轮。遇到continue之后循环体里它后面的代码就不执行了。return —— 跳出当前函数。如果return写在main函数里整个程序直接结束。这三个用得挺多的尤其是break和continue配合条件判断能省不少事。数组数组就是用来存一堆相同类型数据的东西比如存10个学生的成绩总不能定义10个变量吧。数组的定义和访问定义格式 类型 数组名[元素个数];比如 int a[10]; 就是定义了一个能存10个int的数组占40个字节。访问元素用下标 数组名[下标] 下标从0开始到元素个数减1结束。一定要注意数组越界的问题访问超出范围的下标是很危险的可能会把别的数据搞坏。初始化数组不初始化的话里面存的是随机值。常见的初始化方式- 全部初始化 int a[5] {1, 2, 3, 4, 5};- 局部初始化 int a[10] {1, 2, 3}; —— 前面三个有值后面自动补0- 全0初始化 int a[10] {0}; —— 所有元素都是0- 省略个数 int a[] {1, 2, 3}; —— 编译器自动根据初始化值确定个数存储特点数组在内存里是连续存放的每个元素类型一致按下标顺序排列。这三个特性单一性、有序性、连续性很重要后面学指针的时候会经常用到。数组排序排序是数组最常见的操作了这里记几个基础的排序算法。选择排序思路每一轮从待排位置往后找把最小的升序的话换到当前位置。时间复杂度O(n²)空间复杂度O(1)不稳定排序。冒泡排序思路相邻两个数两两比较大的往后挪每一趟确定一个最大值。时间复杂度O(n²)空间复杂度O(1)稳定排序。插入排序把数组分成已排序和未排序两部分每次从未排序部分取一个数插到已排序部分的合适位置。这个思路比较直观就像打扑克理牌一样。二分查找这个不是排序算法但是和有序数组配合使用效率很高。前提是数组必须已经排好序了。思路每次和中间位置的数比较大了就去右半边找小了就去左半边找每次砍掉一半。时间复杂度O(logn)比遍历查找快得多数据量大的时候优势特别明显。字符数组字符数组就是存字符的数组本质上和普通数组一样但因为经常用来存字符串所以单独拿出来说。初始化用字符串字面量初始化的时候末尾会自动加一个\0作为结束标志。这就是为什么hello看起来5个字符实际占6个字节。输入输出输出可以用 printf(%s, str) 或者 puts(str) puts会自动换行。输入的话 scanf(%s, str) 遇到空格、tab、回车就停止读了。 gets() 能读整行但是不安全容易越界实际开发中尽量少用。常用字符串函数C标准库提供了几个操作字符串的函数挺实用的- strlen计算字符串长度不包括\0- strcpy把一个字符串拷贝到另一个字符数组- strcat把一个字符串拼接到另一个字符串后面- strcmp比较两个字符串的大小这些函数都需要包含 string.h 头文件。数组这块内容还是挺多的排序算法建议自己手写几遍光看是记不住的。下次再接着记函数的部分。