前言之前我们只用单个变量存数据比如int num1, num2, num3;。 如果要存储 50 个学生的成绩、20 个商品价格难道要手动定义 50 个变量代码会又臭又长完全没法维护。分支if/switch让程序会做选择循环for/while让程序重复干活而数组就是程序用来批量存放同类数据的 “收纳盒”。 有了数组我们不用一堆零散变量一行代码就能存几十上百个数据搭配循环遍历处理批量数据事半功倍。一、什么是一维数组1.1 基础定义语法数据类型 数组名[存储个数];通俗解释数据类型规定盒子里只能放同一种东西int 只能存整数、char 只能存字符数组名这个收纳盒的名字和变量命名规则一样[]里的数字这个盒子最多能装多少个数据示例// 能存放10个整数成绩的数组 int score[10]; // 能存放8个身高小数的数组 float height[8];1.2 数组下标核心规则新手必踩坑点数组里每一个格子都有编号这个编号叫做下标 ✅ 下标从0开始计数 长度为 5 的数组下标范围0、1、2、3、4❌ 不能使用下标 5会出现数组越界读取到乱码1.3 一维数组 3 种初始化写法// 写法1全部元素赋值 int arr1[5] {1,2,3,4,5}; // 写法2只给部分元素赋值剩下自动补0 int arr2[5] {10,20}; // 等价 {10,20,0,0,0} // 写法3省略长度编译器自动统计元素个数 int arr3[] {2,4,6,8}; // 数组长度自动为4二、数组 for 循环批量处理数据手动一个个打印数组元素非常麻烦for循环专门用来遍历数组所有下标一键读取全部数据。实战代码 1遍历打印全班成绩#include stdio.h int main() { // 存储5名学生成绩 int score[5] {85, 92, 78, 96, 66}; // i代表数组下标从0循环到4 for(int i 0; i 5; i) { printf(第%d名学生成绩%d\n, i1, score[i]); } return 0; }运行输出第1名学生成绩85 第2名学生成绩92 第3名学生成绩78 第4名学生成绩96 第5名学生成绩66实战代码 2输入成绩计算总分、平均分结合之前学的分支、循环、数组三合一综合案例#include stdio.h int main() { int score[5]; int sum 0; double avg; // 循环录入5个成绩存入数组 for(int i 0; i 5; i) { printf(请输入第%d位学生成绩, i1); scanf(%d, score[i]); sum score[i]; } avg sum / 5.0; printf(\n班级总分%d平均分%.2f\n, sum, avg); // if分支判断班级成绩是否合格 if(avg 60) { printf(班级平均成绩合格); } else { printf(班级平均分不及格需要加强练习); } return 0; }三、字符数组存放文字的数组int 数组存数字char字符数组专门存放单个文字、字母、符号是字符串的底层基础。3.1 字符数组基础用法#include stdio.h int main() { // 定义长度为6的字符数组存放5个字母 char ch[6] {H,e,l,l,o}; // 循环打印每个字符 for(int i 0; i 5; i) { printf(%c, ch[i]); } return 0; }输出结果Hello3.2 朴素认识字符串上面逐个写字符太麻烦C 语言给字符数组简化写法直接放一段文字这就是字符串// 简化写法等价 char str[6] {H,e,l,l,o,\0}; char str[6] Hello; 关键知识点 双引号包裹的文字会自动在末尾隐藏一个结束标记\0用来告诉程序文字到此结束。 我们平时写的文字、姓名、账号本质全是带\0的字符数组。3.3 字符串快速输入输出示例#include stdio.h int main() { char name[20]; // 最多存19个汉字/字母留1位给\0 printf(请输入你的名字); scanf(%s, name); // 字符串输入不用加 printf(你输入的名字是%s, name); return 0; }四、新手高频踩坑总结 ⚠️下标越界数组长度为 5只允许使用 0~4访问 arr [5] 会读取内存垃圾程序异常下标从 0 开始不要习惯性把循环起始值写成 1会漏掉第一个数据数组类型统一int 数组只能存数字char 数组只能存字符不能混合存放字符串预留结束位存放 Hello 至少要开辟长度 6 的字符数组给\0留位置下期预告下一篇专栏文章讲解二维数组实现多科目成绩存储、矩阵打印结合 while 菜单循环完成完整学生成绩管理系统巩固数组 分支 循环全套知识点。
《数组:让程序一下子记住一堆数据》
前言之前我们只用单个变量存数据比如int num1, num2, num3;。 如果要存储 50 个学生的成绩、20 个商品价格难道要手动定义 50 个变量代码会又臭又长完全没法维护。分支if/switch让程序会做选择循环for/while让程序重复干活而数组就是程序用来批量存放同类数据的 “收纳盒”。 有了数组我们不用一堆零散变量一行代码就能存几十上百个数据搭配循环遍历处理批量数据事半功倍。一、什么是一维数组1.1 基础定义语法数据类型 数组名[存储个数];通俗解释数据类型规定盒子里只能放同一种东西int 只能存整数、char 只能存字符数组名这个收纳盒的名字和变量命名规则一样[]里的数字这个盒子最多能装多少个数据示例// 能存放10个整数成绩的数组 int score[10]; // 能存放8个身高小数的数组 float height[8];1.2 数组下标核心规则新手必踩坑点数组里每一个格子都有编号这个编号叫做下标 ✅ 下标从0开始计数 长度为 5 的数组下标范围0、1、2、3、4❌ 不能使用下标 5会出现数组越界读取到乱码1.3 一维数组 3 种初始化写法// 写法1全部元素赋值 int arr1[5] {1,2,3,4,5}; // 写法2只给部分元素赋值剩下自动补0 int arr2[5] {10,20}; // 等价 {10,20,0,0,0} // 写法3省略长度编译器自动统计元素个数 int arr3[] {2,4,6,8}; // 数组长度自动为4二、数组 for 循环批量处理数据手动一个个打印数组元素非常麻烦for循环专门用来遍历数组所有下标一键读取全部数据。实战代码 1遍历打印全班成绩#include stdio.h int main() { // 存储5名学生成绩 int score[5] {85, 92, 78, 96, 66}; // i代表数组下标从0循环到4 for(int i 0; i 5; i) { printf(第%d名学生成绩%d\n, i1, score[i]); } return 0; }运行输出第1名学生成绩85 第2名学生成绩92 第3名学生成绩78 第4名学生成绩96 第5名学生成绩66实战代码 2输入成绩计算总分、平均分结合之前学的分支、循环、数组三合一综合案例#include stdio.h int main() { int score[5]; int sum 0; double avg; // 循环录入5个成绩存入数组 for(int i 0; i 5; i) { printf(请输入第%d位学生成绩, i1); scanf(%d, score[i]); sum score[i]; } avg sum / 5.0; printf(\n班级总分%d平均分%.2f\n, sum, avg); // if分支判断班级成绩是否合格 if(avg 60) { printf(班级平均成绩合格); } else { printf(班级平均分不及格需要加强练习); } return 0; }三、字符数组存放文字的数组int 数组存数字char字符数组专门存放单个文字、字母、符号是字符串的底层基础。3.1 字符数组基础用法#include stdio.h int main() { // 定义长度为6的字符数组存放5个字母 char ch[6] {H,e,l,l,o}; // 循环打印每个字符 for(int i 0; i 5; i) { printf(%c, ch[i]); } return 0; }输出结果Hello3.2 朴素认识字符串上面逐个写字符太麻烦C 语言给字符数组简化写法直接放一段文字这就是字符串// 简化写法等价 char str[6] {H,e,l,l,o,\0}; char str[6] Hello; 关键知识点 双引号包裹的文字会自动在末尾隐藏一个结束标记\0用来告诉程序文字到此结束。 我们平时写的文字、姓名、账号本质全是带\0的字符数组。3.3 字符串快速输入输出示例#include stdio.h int main() { char name[20]; // 最多存19个汉字/字母留1位给\0 printf(请输入你的名字); scanf(%s, name); // 字符串输入不用加 printf(你输入的名字是%s, name); return 0; }四、新手高频踩坑总结 ⚠️下标越界数组长度为 5只允许使用 0~4访问 arr [5] 会读取内存垃圾程序异常下标从 0 开始不要习惯性把循环起始值写成 1会漏掉第一个数据数组类型统一int 数组只能存数字char 数组只能存字符不能混合存放字符串预留结束位存放 Hello 至少要开辟长度 6 的字符数组给\0留位置下期预告下一篇专栏文章讲解二维数组实现多科目成绩存储、矩阵打印结合 while 菜单循环完成完整学生成绩管理系统巩固数组 分支 循环全套知识点。