前言
之前我们只用单个变量存数据,比如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", i+1, 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位学生成绩:", i+1); 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; }输出结果:Hello
3.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 菜单循环,完成完整学生成绩管理系统,巩固数组 + 分支 + 循环全套知识点。