对于刚接触C语言的同学来说,当需要处理多个同类型数据时,一个个定义变量不仅繁琐,还容易出错。这时候,数组就成了我们的好帮手。数组能像收纳盒一样,把多个同类型数据整齐存放,方便管理和使用。今天咱们就用最简单的方式,结合具体代码,一步步学会数组的使用。
想象一下,学校的储物柜一排有5个,每个柜子都能放书包,而且每个柜子都有自己的编号(1号、2号……5号)。数组就和这排储物柜很像,它是一组能存放相同类型数据的连续空间,每个空间都有自己的编号(专业叫“下标”)。
比如,要存放5个同学的数学成绩,用数组来存就很合适。这时候数组就像5个连在一起的“成绩储物柜”,每个柜子里放一个同学的成绩,而且所有成绩都是整数类型。
定义数组很简单,就像给储物柜做规划,只需要确定三件事:存什么类型的数据、给这组空间起个名字、一共有多少个空间。
数据类型 数组名[元素个数] = {初始值};int(整数)、float(小数)、char(字符),决定了数组能存什么类型的数据。[5]就表示数组有5个“空间”。比如定义一个能存5个整数的数组,用来放同学的成绩:
#include <stdio.h>
int main() {
// 定义一个有5个元素的整数数组,初始值为85、92、78、90、88
int scores[5] = {85, 92, 78, 90, 88};
return 0;
}这里的scores就是数组名,[5]表示数组有5个元素,每个元素都是整数,分别是85、92、78、90、88。
如果暂时不知道要存什么数据,可以先定义一个空数组,之后再往里面放数据:
int ages[3]; // 定义一个能存3个整数的数组,暂时不存数据如果在定义数组时给出了初始值,还可以省略元素个数,数组会自动根据初始值的数量确定元素个数:
int nums[] = {10, 20, 30, 40}; // 数组会自动变成有4个元素的数组数组的每个元素都有自己的“编号”(下标),下标从0开始,这是新手最容易搞错的地方。比如有5个元素的数组,下标分别是0、1、2、3、4,对应数组的第1到第5个元素。
要获取数组中的某个元素,只需要用“数组名[下标]”的格式:
#include <stdio.h>
int main() {
int scores[5] = {85, 92, 78, 90, 88};
// 访问第1个元素(下标0)
printf("第1个同学的成绩:%d\n", scores[0]);
// 访问第3个元素(下标2)
printf("第3个同学的成绩:%d\n", scores[2]);
// 访问第5个元素(下标4)
printf("第5个同学的成绩:%d\n", scores[4]);
return 0;
}运行结果:
第1个同学的成绩:85
第3个同学的成绩:78
第5个同学的成绩:88如果想修改数组中的某个元素,直接给对应下标的元素赋值即可:
#include <stdio.h>
int main() {
int scores[5] = {85, 92, 78, 90, 88};
// 修改第2个同学的成绩(下标1)
scores[1] = 95;
printf("修改后第2个同学的成绩:%d\n", scores[1]);
// 给空数组赋值
int ages[3];
ages[0] = 19; // 第1个元素存19
ages[1] = 20; // 第2个元素存20
ages[2] = 18; // 第3个元素存18
printf("3个同学的年龄:%d, %d, %d\n", ages[0], ages[1], ages[2]);
return 0;
}运行结果:
修改后第2个同学的成绩:95
3个同学的年龄:19, 20, 18数组的下标有范围限制,只能从0到“元素个数-1”。如果下标超过这个范围,就会出现“越界”错误,可能导致程序输出乱码甚至崩溃。
比如一个有5个元素的数组,下标最大是4,如果访问scores[5]就会越界:
#include <stdio.h>
int main() {
int scores[5] = {85, 92, 78, 90, 88};
// 错误示例:下标5超出范围(最大下标是4)
printf("越界访问的结果:%d\n", scores[5]);
return 0;
}运行这个程序,输出的结果是不确定的,可能是一串乱码,所以一定要避免下标越界。
当数组元素比较多时,一个个访问或修改太麻烦。这时候,循环就能派上大用场,尤其是for循环,能轻松遍历数组中的所有元素。
比如给一个有5个元素的数组赋值10、20、30、40、50:
#include <stdio.h>
int main() {
int nums[5]; // 定义一个有5个元素的数组
// 用for循环给数组赋值
for (int i = 0; i < 5; i++) {
nums[i] = (i + 1) * 10;
}
// 用循环打印数组元素
for (int i = 0; i < 5; i++) {
printf("nums[%d] = %d\n", i, nums[i]);
}
return 0;
}运行结果:
nums[0] = 10
nums[1] = 20
nums[2] = 30
nums[3] = 40
nums[4] = 50比如计算5个同学的成绩总和和平均分:
#include <stdio.h>
int main() {
int scores[5] = {85, 92, 78, 90, 88};
int sum = 0; // 用来存总和
float avg; // 用来存平均值
// 用循环计算总和
for (int i = 0; i < 5; i++) {
sum = sum + scores[i];
}
// 计算平均值(用5.0确保结果是小数)
avg = sum / 5.0;
printf("成绩总和:%d\n", sum);
printf("平均成绩:%.1f\n", avg);
return 0;
}运行结果:
成绩总和:433
平均成绩:86.6比如找出5个成绩中的最高分和最低分:
#include <stdio.h>
int main() {
int scores[5] = {85, 92, 78, 90, 88};
int max = scores[0]; // 假设第1个元素是最大值
int min = scores[0]; // 假设第1个元素是最小值
// 循环比较每个元素
for (int i = 1; i < 5; i++) {
if (scores[i] > max) {
max = scores[i]; // 更新最大值
}
if (scores[i] < min) {
min = scores[i]; // 更新最小值
}
}
printf("最高分:%d\n", max);
printf("最低分:%d\n", min);
return 0;
}运行结果:
最高分:92
最低分:78除了整数数组,字符数组和浮点型数组也很常用,它们的用法和整数数组基本一样。
字符数组可以存放单个字符,也可以存放字符串(一串字符):
#include <stdio.h>
int main() {
// 存放单个字符的数组
char chars[3] = {'A', 'B', 'C'}; // 注意用单引号
printf("字符数组中的元素:%c, %c, %c\n", chars[0], chars[1], chars[2]);
// 存放字符串的数组(字符串要用双引号)
char name[6] = "Lucy"; // "Lucy"有4个字符,数组长度至少要5(最后有一个结束标志'\0')
printf("字符串:%s\n", name); // 用%s输出字符串
return 0;
}运行结果:
字符数组中的元素:A, B, C
字符串:Lucy比如存放5个同学的身高(单位:米):
#include <stdio.h>
int main() {
float heights[5] = {1.75f, 1.68f, 1.82f, 1.70f, 1.65f};
// 用循环打印每个同学的身高
for (int i = 0; i < 5; i++) {
printf("第%d个同学的身高:%.2f米\n", i + 1, heights[i]);
}
return 0;
}运行结果:
第1个同学的身高:1.75米
第2个同学的身高:1.68米
第3个同学的身高:1.82米
第4个同学的身高:1.70米
第5个同学的身高:1.65米我们来综合运用数组和循环,做一个能输入5个学生的成绩,然后计算总分、平均分、最高分和最低分的小程序:
#include <stdio.h>
int main() {
int scores[5]; // 存放5个成绩
int sum = 0;
int max, min;
// 输入5个成绩
printf("请输入5个学生的成绩:\n");
for (int i = 0; i < 5; i++) {
printf("第%d个成绩:", i + 1);
scanf("%d", &scores[i]); // 输入成绩到数组
}
// 计算总分
for (int i = 0; i < 5; i++) {
sum += scores[i];
}
// 找最高分和最低分
max = scores[0];
min = scores[0];
for (int i = 1; i < 5; i++) {
if (scores[i] > max) {
max = scores[i];
}
if (scores[i] < min) {
min = scores[i];
}
}
// 输出结果
printf("\n===== 成绩统计结果 =====\n");
printf("总分:%d\n", sum);
printf("平均分:%.1f\n", sum / 5.0);
printf("最高分:%d\n", max);
printf("最低分:%d\n", min);
return 0;
}运行示例:
请输入5个学生的成绩:
第1个成绩:90
第2个成绩:85
第3个成绩:95
第4个成绩:80
第5个成绩:88
===== 成绩统计结果 =====
总分:438
平均分:87.6
最高分:95
最低分:80数据类型 数组名[元素个数] = {初始值};。数组名[下标]。for循环遍历数组更高效。数组是C语言中处理批量数据的基础,学会了数组,以后处理列表、统计数据等问题会变得非常简单。刚开始用的时候可能会记错下标,多写几次代码练习,很快就能熟练掌握。希望这篇文章能帮你轻松学会数组的使用,要是有不懂的地方,欢迎在评论区交流哦!