📚 一维数组深入理解
什么是一维数组?
一维数组 是最简单的数组形式,可以理解为"一排格子"或"一条线"上的数据存储。
✅ 线性结构 :元素按顺序排列成一行
✅ 单一维度 :只需要一个索引就能定位元素
✅ 连续存储 :内存中相邻存放
✅ 随机访问 :可以通过索引直接访问任意元素
💡 形象比喻:
• 一维数组就像一排储物柜 ,每个柜子有编号(0, 1, 2...)
• 也像火车车厢 ,每节车厢有座位号
• 还像书架的一层 ,每本书有位置编号
一维数组的完整声明方式
#include <iostream>
using namespace std;
int main () {
int arr1[5 ];
arr1[0 ] = 10 ;
arr1[1 ] = 20 ;
arr1[2 ] = 30 ;
arr1[3 ] = 40 ;
arr1[4 ] = 50 ;
int arr2[5 ] = {10 , 20 , 30 , 40 , 50 };
int arr3[5 ] = {10 , 20 };
int arr4[] = {10 , 20 , 30 , 40 , 50 };
int arr5[5 ] = {0 };
return 0 ;
}
不同数据类型的数组
#include <iostream>
using namespace std;
int main () {
int ages[5 ] = {18 , 20 , 22 , 19 , 21 };
double prices[3 ] = {9.9 , 19.9 , 29.9 };
char grades[5 ] = {'A' , 'B' , 'C' , 'D' , 'E' };
bool flags[3 ] = {true , false , true };
cout << "年龄:" ;
for (int i = 0 ; i < 5 ; i++) {
cout << ages[i] << " " ;
}
cout << endl;
return 0 ;
}
⚙️ 数组的基本操作
输入数组元素
#include <iostream>
using namespace std;
int main () {
const int N = 5 ;
int scores[N];
cout << "请输入" << N << "个学生的成绩:" << endl;
for (int i = 0 ; i < N; i++) {
cout << "第" << (i + 1 ) << "个成绩:" ;
cin >> scores[i];
}
cout << "\n输入的成绩:" ;
for (int i = 0 ; i < N; i++) {
cout << scores[i] << " " ;
}
cout << endl;
return 0 ;
}
数组元素的修改
#include <iostream>
using namespace std;
int main () {
int arr[5 ] = {10 , 20 , 30 , 40 , 50 };
cout << "修改前:" ;
for (int i = 0 ; i < 5 ; i++) {
cout << arr[i] << " " ;
}
cout << endl;
arr[2 ] = 99 ;
arr[0 ] = arr[4 ];
cout << "修改后:" ;
for (int i = 0 ; i < 5 ; i++) {
cout << arr[i] << " " ;
}
cout << endl;
return 0 ;
}
数组的复制
#include <iostream>
using namespace std;
int main () {
int arr1[5 ] = {1 , 2 , 3 , 4 , 5 };
int arr2[5 ];
for (int i = 0 ; i < 5 ; i++) {
arr2[i] = arr1[i];
}
cout << "arr1:" ;
for (int i = 0 ; i < 5 ; i++) {
cout << arr1[i] << " " ;
}
cout << endl;
cout << "arr2:" ;
for (int i = 0 ; i < 5 ; i++) {
cout << arr2[i] << " " ;
}
cout << endl;
return 0 ;
}
⚠️ 重要提醒:
• 数组名代表数组的首地址,是常量指针
• 不能用=直接赋值整个数组
• 必须通过循环逐个元素复制
• 或者使用memcpy等库函数
🎮 互动实验:数组操作演示
输入一组数字,体验数组的各种操作
输入数字(用逗号分隔):
演示操作
输入数字后点击"演示操作"...
🛠️ 数组的常用算法
查找元素(线性查找)
#include <iostream>
using namespace std;
int main () {
int arr[7 ] = {23 , 45 , 12 , 67 , 34 , 89 , 56 };
int target = 34 ;
int foundIndex = -1 ;
for (int i = 0 ; i < 7 ; i++) {
if (arr[i] == target) {
foundIndex = i;
break ;
}
}
if (foundIndex != -1 ) {
cout << "找到目标 " << target << ",位置:" << foundIndex << endl;
} else {
cout << "未找到目标 " << target << endl;
}
return 0 ;
}
统计元素出现次数
#include <iostream>
using namespace std;
int main () {
int arr[10 ] = {3 , 5 , 3 , 7 , 5 , 3 , 8 , 5 , 3 , 9 };
int target = 3 ;
int count = 0 ;
for (int i = 0 ; i < 10 ; i++) {
if (arr[i] == target) {
count++;
}
}
cout << target << " 出现了 " << count << " 次" << endl;
return 0 ;
}
数组反转
#include <iostream>
using namespace std;
int main () {
int arr[5 ] = {1 , 2 , 3 , 4 , 5 };
cout << "反转前:" ;
for (int i = 0 ; i < 5 ; i++) {
cout << arr[i] << " " ;
}
cout << endl;
for (int i = 0 ; i < 5 / 2 ; i++) {
int temp = arr[i];
arr[i] = arr[4 - i];
arr[4 - i] = temp;
}
cout << "反转后:" ;
for (int i = 0 ; i < 5 ; i++) {
cout << arr[i] << " " ;
}
cout << endl;
return 0 ;
}
排序算法(冒泡排序)
#include <iostream>
using namespace std;
int main () {
int arr[5 ] = {64 , 34 , 25 , 12 , 22 };
cout << "排序前:" ;
for (int i = 0 ; i < 5 ; i++) {
cout << arr[i] << " " ;
}
cout << endl;
for (int i = 0 ; i < 5 - 1 ; i++) {
for (int j = 0 ; j < 5 - 1 - i; j++) {
if (arr[j] > arr[j + 1 ]) {
int temp = arr[j];
arr[j] = arr[j + 1 ];
arr[j + 1 ] = temp;
}
}
}
cout << "排序后:" ;
for (int i = 0 ; i < 5 ; i++) {
cout << arr[i] << " " ;
}
cout << endl;
return 0 ;
}
💡 冒泡排序原理:
• 比较相邻的两个元素
• 如果顺序错误就交换
• 每一轮把最大的数"冒泡"到最后
• 重复这个过程直到排序完成
🎯 数组算法实验室
选择算法,观察执行过程
输入数字(用逗号分隔):
线性查找
数组反转
冒泡排序
输入数字后选择算法...
🚀 数组的高级应用
数组作为函数参数
#include <iostream>
using namespace std;
double calculateAverage (int arr[], int size) {
int sum = 0 ;
for (int i = 0 ; i < size; i++) {
sum += arr[i];
}
return (double )sum / size;
}
int findMax (int arr[], int size) {
int maxVal = arr[0 ];
for (int i = 1 ; i < size; i++) {
if (arr[i] > maxVal) {
maxVal = arr[i];
}
}
return maxVal;
}
int main () {
int scores[5 ] = {85 , 92 , 78 , 95 , 88 };
double avg = calculateAverage(scores, 5 );
int maxScore = findMax(scores, 5 );
cout << "平均分:" << avg << endl;
cout << "最高分:" << maxScore << endl;
return 0 ;
}
💡 重要知识点:
• 数组作为参数传递的是地址 ,不是副本
• 函数内修改数组会影响原数组
• 需要同时传递数组和大小
• 这是C++中处理数组的标准方式
数组的实际应用场景
一维数组在实际编程中有广泛应用:
📊 数据统计 :存储和分析大量数据
🎮 游戏开发 :存储玩家分数、生命值等
📱 通讯录 :存储联系人信息列表
🌡️ 传感器数据 :记录温度、湿度等历史数据
💰 财务报表 :存储每月的收支数据
🎵 音频处理 :存储声音采样数据
性能优化技巧
for (int i = 0 ; i < n; i++) {
if (found) break ;
}
int sum = 0 ;
for (int i = 0 ; i < n; i++) {
sum += arr[i];
}
double avg = (double )sum / n;
const int MAX_SIZE = 100 ;
int arr[MAX_SIZE];
📝 实战练习
📝 理解测试
以下代码的输出是什么?
#include <iostream>
using namespace std;
int main () {
int arr[5 ] = {10 , 20 , 30 , 40 , 50 };
int sum = 0 ;
for (int i = 0 ; i < 5 ; i += 2 ) {
sum += arr[i];
}
cout << sum << endl;
return 0 ;
}
A. 150
B. 90
C. 60
D. 100
选择答案查看解析...
💻 综合挑战
题目: 创建一个程序,实现学生成绩管理系统。功能包括:输入成绩、显示所有成绩、计算平均分、找出最高分和最低分。
学生人数:
生成完整代码
输入人数后点击"生成完整代码"...