数组+随机数+循环的中断

数组+随机数+循环的中断 一、循环break / continue / gotobreak跳出整个循环循环直接结束continue仅跳过本次循环剩下代码直接进入下一轮循环goto语法作用函数内部跳转多用于错误处理、跳出多层循环不推荐滥用goto会打乱代码阅读逻辑#include stdio.hint main(){printf(“A\n”);goto next; // 直接跳到next标签中间printf不会执行printf(“B\n”);next:printf(“C\n”);return 0;}格式goto next ;next:二、随机数 rand srand time头文件rand() 、 srand() → #include stdlib.htime() → #include time.hrand() 生成随机整数种子不变每次运行出来的随机数序列一模一样可以预测printf(“%d\n”, rand());种子rand生成随机数的基准数值。种子固定随机序列固定。srand(种子) 设置随机数种子。time(NULL) 返回系统当前时间差值时间一直在变化拿来做种子实现真随机。标准写法srand((unsigned int)time(NULL));time(NULL) 拿到时间数值(unsigned int) 强制类型转换匹配srand参数类型随机数范围公式通用公式 a rand() % (b‑a 1) 生成 [a , b] 的整数0~99 rand() % 100;1~100 rand() % 100 1;100~200 100 rand() % (200‑100 1);注意 srand() 整个程序只调用一次不要写在循环内部。放在头文件下面三、数组数组一组相同数据类型元素的集合。分为一维数组、多维二维数组。定义格式类型 数组名[元素个数];//示例存放20个人数学成绩int math[20];类型可以 char short int float数组初始化完全初始化int arr[2] {1,2};不完全初始化int arr[6] {1};只给第一个元素赋值剩下全部自动补0字符数组 vs 字符串字符串末尾自带隐藏结束符 \0char arr[] “abc”; // 自动末尾补’\0’普通字符数组没有 \0 不能直接当字符串打印char arr[3] {‘1’,‘2’,‘3’};重点用 %s 打印必须保证内存后面存在 \0 否则乱码。3.szeaof 和strlen的区别sizeof运算符操作符算整个数组占内存总字节数int arr[5] sizeof(arr) 5*420字节数组传参变成指针之后sizeof就得不到数组真实大小这个求的是内存的大小不管内存里面放了什么东西在循环中经常见到szszeaof(arr[5])/szeaof(arr[0]);strlen库函数 string.h 只针对字符串统计 ‘\0’ 之前有效字符个数不包含结束符 \0普通char数组没有 \0 绝对不能用strlen结果乱码随机值这个要头函数 #includestring.h;数组的[]定义int arr[10];[10] 数组元素总容量一共10个元素下标0‑9访问arr[3] 10;[3] 下标索引取第4个元素陷阱定义写10最大合法下标是9arr[10]越界下标是从0开始的数组初始化小要点int arr[5]{1,2};不完全初始化剩下元素自动赋值0char字符串数组 char str[]“abc” 编译器自动补 \0 如果是 char str[]{‘a’,‘b’,‘c’} 不会自带 \0 。易错点汇总break 结束整个循环 continue 只跳过这一轮。goto只能在同一个函数内部跳转不能跨函数。rand不写srand每次运行随机数完全一样。srand((unsigned int)time(NULL)); 只写一次放main开头。数组不完全初始化未赋值元素默认是0。字符串自带 \0 普通字符数组不会自动加 \0 。