ARTICLE DETAIL

资讯详情

深耕网站SEO优化与搜索引擎排名提升的一线实战洞察。

循环接续 随机数 数组

循环接续 随机数 数组 一、for循环特点语法for(表达式1; 表达式2; 表达式3)表达式1循环变量的初始化表达式2循环结束的判断条件表达式3循环变量的调整循环体内多条语句必须用{}包裹建议养成习惯无论几条语句都加花括号。三个表达式支持省略例已经提前初始化变量可以省略表达式1写成for(; 表达式2; 表达式3)。关键要点表达式1在整个循环中只执行1次。之后重复执行判断表达式2 → 为真执行循环体 → 执行表达式3直到表达式2结果为0循环结束。适用场景适合循环次数已知的场景。写循环先想三件事从几开始、到几结束、每次变量变化多少。二、do while循环特点语法do 语句; while(表达式);先执行循环体后做条件判断循环体至少会执行一次注意末尾while后面的分号不能丢。适用场景适合逻辑上必须先执行一次再判断的场景。示例菜单打印、输入校验、数字位数统计。for、while也可以实现同等功能do while更贴合“先做再检查”的业务逻辑。三、rand 伪随机数函数定义伪随机数依靠算法种子生成并非真正意义上的随机。特性程序默认种子为1相同种子一定会生成完全一样的随机数列。头文件#include stdlib.h返回值返回0 ~ RAND_MAX的整数多数编译器RAND_MAX 32767。四、srand 种子初始化函数头文件#include stdlib.h作用初始化随机数生成器设置随机种子。使用规则必须在调用rand()之前调用。一次程序运行只调用一次不要循环内反复调用。核心逻辑种子相同 → 随机数列相同种子变化 → 随机数列变化问题想要随机数就需要随机种子但获取随机种子又需要随机数陷入死循环。解决方案使用系统时间作为种子。五、time 时间函数头文件#include time.h返回值返回从1970‑01‑01 00:00:00到当前时刻的秒数时间戳。参数传入NULL只获取时间戳。返回类型time_t本质是32位/64位整型。逻辑时间时刻在变化每次运行程序种子就不一样。标准初始化代码srand((unsignedint)time(NULL));time返回time_t类型需要强制转换unsigned int匹配srand参数。六、控制随机数取值范围通用公式生成[a, b]的随机整数a rand() % (b - a 1)示例0~99rand() % 1001~100rand() % 100 1100~200100 rand() % 101高频易错点取模%n余数范围是0 ~ n‑1一共n个数字。想要取到a到b一共b‑a1个数字除数必须写b‑a1不能写b‑a。错误示例100 rand() % 100取值 100‑199永远取不到200。数组1. 概念一组相同数据类型元素的集合。2. 特征C语言不允许空数组元素个数不能为0。数组内部所有元素类型必须完全一致不能混合int、char等不同类型。3. 分类一维数组、多维数组最常用多维数组为二维数组。4. 创建数组语法type arr_name[常量值];type元素数据类型 char / short / int / float / double 等arr_name数组名命名规则和普通变量一致常量值数组容量必须是常量/常量表达式示例intmath[20];//存储20个人数学成绩charch[8];//存储8个字符doublescore[10];//存储10个double浮点数5. 数组初始化大括号{}赋值完全初始化全部元素显式赋值int arr[5] {1,2,3,4,5};不完全初始化只写部分数值剩余元素自动置0int arr2[6] {1};//第一个元素1剩下全部为0初始化元素数量超过数组容量 → 编译报错如果提供初始化列表可以省略数组容量数组大小等于初始化元素个数。int arr[] {1,2,3}; //数组大小自动为36. 数组类型去掉数组名剩下的就是数组类型。int arr[10];数组类型为int [10]int [10]和int [12]属于两种完全不同数组类型。7. 数组下标C语言下标从0开始。n个元素数组下标范围0 ~ n‑1最后一个元素下标永远是n‑1。访问语法数组名[下标]例arr[7]读取或者修改下标7位置元素。可以搭配for循环遍历全部下标。8. 数组输入使用scanf读取数组元素记得加取地址符。9. 内存存储特性数组所有元素在内存中连续存储。下标增大地址由小到大。int数组相邻两个元素地址相差4字节。连续内存是指针访问数组的底层基础可以通过首地址偏移访问任意元素。10. sizeof计算数组元素个数szsizeof(arr)/sizeof(arr[0]);逻辑sizeof(arr)数组整体占用总字节sizeof(arr[0])单个数组元素字节大小两者相除得到数组实际元素数量。11. 二维数组创建把一维数组当做元素就构成二维数组。二维数组作为元素得到三维数组二维以上统称多维数组。语法type arr_name[常量1][常量2];示例int arr[3][5];3代表行数5代表列数总元素15个。访问元素需要同时指定行下标、列下标。12. 二维数组初始化不完全初始化未显式赋值的元素全部置0int arr1[3][5] {1,2};完全初始化把所有元素平铺写在大括号内int arr3[3][5] {1,2,3,4,5,2,3,4,5,6,3,4,5,6,7};按行初始化每行使用独立大括号包裹int arr4[3][5] {{1,2},{3,4},{5,6}};重要规则初始化二维数组列数绝对不能省略行数可以让编译器自动推算。13. 二维数组使用行下标、列下标全部从0开始。例arr[2][4]代表第3行第5列。遍历使用嵌套for循环外层循环控制行内层循环控制列。14. 二维数组内存存储整体是一整块连续内存按行优先存储先存第0行全部再存第1行……同一行相邻元素地址差4字节(int)上一行末尾和下一行开头地址也相差4字节。15. 变长数组 C99标准C99之前数组大小只能写常量C99允许用变量指定数组大小称为变长数组。intn10;intarr[n];关键点不能在定义的时候初始化。不是大小可以随时改变运行时确定容量之后数组大小固定不变。运行时分配对应长度内存避免空间浪费。简单理解变长数组 可以用变量指定容量一旦创建完毕大小固定。
返回列表