一维数组是最基本的数组形式,用于存储线性序列数据。东巴文(db-w.cn) 将带你深入理解一维数组,掌握其核心应用。
💡 东巴文观点:一维数组是相同类型数据的线性集合,通过下标访问元素,是C语言数据组织的基础。
东巴文说明:一维数组是一组相同类型数据的有序集合,存储在连续的内存空间中,通过单个下标访问元素。
东巴文一维数组特点:
一维数组特点
├── 元素类型相同
├── 内存连续
├── 单下标访问
├── 长度固定
└── 线性结构
#include <stdio.h>
int main() {
printf("=== 东巴文一维数组声明 ===\n\n");
// 声明数组
int arr1[5]; // 声明但不初始化
double arr2[10]; // 声明double数组
char arr3[20]; // 声明char数组
// 声明并初始化
int arr4[5] = {1, 2, 3, 4, 5};
// 部分初始化
int arr5[5] = {1, 2}; // 其余元素为0
// 自动推断长度
int arr6[] = {1, 2, 3, 4, 5};
// 全部初始化为0
int arr7[5] = {0};
printf("arr4: ");
for (int i = 0; i < 5; i++) {
printf("%d ", arr4[i]);
}
printf("\n");
return 0;
}
#include <stdio.h>
int main() {
printf("=== 东巴文一维数组初始化规则 ===\n\n");
// 规则1:完全初始化
int arr1[5] = {1, 2, 3, 4, 5};
printf("完全初始化:");
for (int i = 0; i < 5; i++) {
printf("%d ", arr1[i]);
}
printf("\n");
// 规则2:部分初始化
int arr2[5] = {1, 2};
printf("部分初始化:");
for (int i = 0; i < 5; i++) {
printf("%d ", arr2[i]);
}
printf("\n");
// 规则3:省略大小
int arr3[] = {1, 2, 3, 4, 5};
printf("省略大小:");
for (int i = 0; i < 5; i++) {
printf("%d ", arr3[i]);
}
printf("\n");
// 规则4:初始化为0
int arr4[5] = {0};
printf("初始化为0:");
for (int i = 0; i < 5; i++) {
printf("%d ", arr4[i]);
}
printf("\n");
return 0;
}
#include <stdio.h>
int main() {
printf("=== 东巴文一维数组下标访问 ===\n\n");
int arr[5] = {10, 20, 30, 40, 50};
// 通过下标访问
printf("arr[0] = %d\n", arr[0]);
printf("arr[2] = %d\n", arr[2]);
printf("arr[4] = %d\n", arr[4]);
// 修改元素
arr[1] = 25;
printf("修改后 arr[1] = %d\n", arr[1]);
// 遍历数组
printf("\n遍历数组:\n");
for (int i = 0; i < 5; i++) {
printf("arr[%d] = %d\n", i, arr[i]);
}
return 0;
}
#include <stdio.h>
int main() {
printf("=== 东巴文一维数组内存布局 ===\n\n");
int arr[5] = {10, 20, 30, 40, 50};
printf("数组元素地址:\n");
for (int i = 0; i < 5; i++) {
printf("&arr[%d] = %p, 值 = %d\n", i, &arr[i], arr[i]);
}
printf("\n数组首地址:%p\n", arr);
printf("数组大小:%zu 字节\n", sizeof(arr));
printf("元素大小:%zu 字节\n", sizeof(arr[0]));
printf("元素个数:%zu\n", sizeof(arr) / sizeof(arr[0]));
return 0;
}
东巴文说明:
#include <stdio.h>
int main() {
printf("=== 东巴文一维数组输入输出 ===\n\n");
int arr[5];
// 输入数组元素
printf("请输入5个整数:\n");
for (int i = 0; i < 5; i++) {
scanf("%d", &arr[i]);
}
// 输出数组元素
printf("\n数组元素:\n");
for (int i = 0; i < 5; i++) {
printf("arr[%d] = %d\n", i, arr[i]);
}
return 0;
}
#include <stdio.h>
int main() {
printf("=== 东巴文一维数组求和与平均值 ===\n\n");
int scores[] = {85, 92, 78, 90, 88};
int count = sizeof(scores) / sizeof(scores[0]);
int sum = 0;
for (int i = 0; i < count; i++) {
sum += scores[i];
}
double average = (double)sum / count;
printf("分数:");
for (int i = 0; i < count; i++) {
printf("%d ", scores[i]);
}
printf("\n");
printf("总分:%d\n", sum);
printf("平均分:%.2f\n", average);
return 0;
}
#include <stdio.h>
int main() {
printf("=== 东巴文一维数组查找最值 ===\n\n");
int arr[] = {23, 45, 12, 67, 34, 89, 56};
int count = sizeof(arr) / sizeof(arr[0]);
int max = arr[0];
int min = arr[0];
int maxIndex = 0;
int minIndex = 0;
for (int i = 1; i < count; i++) {
if (arr[i] > max) {
max = arr[i];
maxIndex = i;
}
if (arr[i] < min) {
min = arr[i];
minIndex = i;
}
}
printf("数组:");
for (int i = 0; i < count; i++) {
printf("%d ", arr[i]);
}
printf("\n");
printf("最大值:arr[%d] = %d\n", maxIndex, max);
printf("最小值:arr[%d] = %d\n", minIndex, min);
return 0;
}
#include <stdio.h>
// 线性查找
int linearSearch(int arr[], int size, int target) {
for (int i = 0; i < size; i++) {
if (arr[i] == target) {
return i;
}
}
return -1;
}
// 二分查找(要求数组已排序)
int binarySearch(int arr[], int size, int target) {
int left = 0, right = size - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (arr[mid] == target) {
return mid;
} else if (arr[mid] < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1;
}
int main() {
printf("=== 东巴文一维数组查找 ===\n\n");
int arr[] = {10, 20, 30, 40, 50};
int size = sizeof(arr) / sizeof(arr[0]);
// 线性查找
int target = 30;
int index = linearSearch(arr, size, target);
if (index != -1) {
printf("线性查找:%d 在位置 %d\n", target, index);
} else {
printf("未找到 %d\n", target);
}
// 二分查找
target = 40;
index = binarySearch(arr, size, target);
if (index != -1) {
printf("二分查找:%d 在位置 %d\n", target, index);
} else {
printf("未找到 %d\n", target);
}
return 0;
}
#include <stdio.h>
// 冒泡排序
void bubbleSort(int arr[], int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
// 选择排序
void selectionSort(int arr[], int n) {
for (int i = 0; i < n - 1; i++) {
int minIndex = i;
for (int j = i + 1; j < n; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
if (minIndex != i) {
int temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
}
}
int main() {
printf("=== 东巴文一维数组排序 ===\n\n");
int arr1[] = {64, 34, 25, 12, 22, 11, 90};
int arr2[] = {64, 34, 25, 12, 22, 11, 90};
int count = sizeof(arr1) / sizeof(arr1[0]);
printf("排序前:");
for (int i = 0; i < count; i++) {
printf("%d ", arr1[i]);
}
printf("\n");
bubbleSort(arr1, count);
printf("冒泡排序后:");
for (int i = 0; i < count; i++) {
printf("%d ", arr1[i]);
}
printf("\n");
selectionSort(arr2, count);
printf("选择排序后:");
for (int i = 0; i < count; i++) {
printf("%d ", arr2[i]);
}
printf("\n");
return 0;
}
#include <stdio.h>
void reverse(int arr[], int size) {
for (int i = 0; i < size / 2; i++) {
int temp = arr[i];
arr[i] = arr[size - 1 - i];
arr[size - 1 - i] = temp;
}
}
int main() {
printf("=== 东巴文一维数组反转 ===\n\n");
int arr[] = {1, 2, 3, 4, 5};
int size = sizeof(arr) / sizeof(arr[0]);
printf("反转前:");
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
reverse(arr, size);
printf("反转后:");
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
#include <stdio.h>
int main() {
printf("=== 东巴文一维数组复制 ===\n\n");
int source[] = {1, 2, 3, 4, 5};
int dest[5];
int size = sizeof(source) / sizeof(source[0]);
// 复制数组
for (int i = 0; i < size; i++) {
dest[i] = source[i];
}
printf("原数组:");
for (int i = 0; i < size; i++) {
printf("%d ", source[i]);
}
printf("\n");
printf("目标数组:");
for (int i = 0; i < size; i++) {
printf("%d ", dest[i]);
}
printf("\n");
return 0;
}
#include <stdio.h>
// 数组作为参数
void printArray(int arr[], int size) {
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
// 修改数组元素
void doubleArray(int arr[], int size) {
for (int i = 0; i < size; i++) {
arr[i] *= 2;
}
}
// 计算数组元素和
int sumArray(int arr[], int size) {
int sum = 0;
for (int i = 0; i < size; i++) {
sum += arr[i];
}
return sum;
}
int main() {
printf("=== 东巴文一维数组与函数 ===\n\n");
int arr[] = {1, 2, 3, 4, 5};
int size = sizeof(arr) / sizeof(arr[0]);
printf("原数组:");
printArray(arr, size);
doubleArray(arr, size);
printf("翻倍后:");
printArray(arr, size);
int sum = sumArray(arr, size);
printf("数组元素和:%d\n", sum);
return 0;
}
东巴文说明:
#include <stdio.h>
#include <math.h>
int main() {
printf("=== 东巴文一维数组统计分析 ===\n\n");
double data[] = {85.5, 92.0, 78.5, 90.0, 88.5};
int count = sizeof(data) / sizeof(data[0]);
// 计算总和
double sum = 0;
for (int i = 0; i < count; i++) {
sum += data[i];
}
// 计算平均值
double mean = sum / count;
// 计算方差和标准差
double variance = 0;
for (int i = 0; i < count; i++) {
variance += pow(data[i] - mean, 2);
}
variance /= count;
double stdDev = sqrt(variance);
printf("数据:");
for (int i = 0; i < count; i++) {
printf("%.1f ", data[i]);
}
printf("\n");
printf("总和:%.2f\n", sum);
printf("平均值:%.2f\n", mean);
printf("方差:%.2f\n", variance);
printf("标准差:%.2f\n", stdDev);
return 0;
}
#include <stdio.h>
int removeDuplicates(int arr[], int size) {
if (size == 0) return 0;
int uniqueCount = 1;
for (int i = 1; i < size; i++) {
int j;
for (j = 0; j < uniqueCount; j++) {
if (arr[i] == arr[j]) {
break;
}
}
if (j == uniqueCount) {
arr[uniqueCount] = arr[i];
uniqueCount++;
}
}
return uniqueCount;
}
int main() {
printf("=== 东巴文一维数组去重 ===\n\n");
int arr[] = {1, 2, 3, 2, 4, 3, 5, 1, 6};
int size = sizeof(arr) / sizeof(arr[0]);
printf("原数组:");
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
int uniqueCount = removeDuplicates(arr, size);
printf("去重后:");
for (int i = 0; i < uniqueCount; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
#include <stdio.h>
int main() {
printf("=== 东巴文数组越界检查 ===\n\n");
int arr[5] = {1, 2, 3, 4, 5};
int size = sizeof(arr) / sizeof(arr[0]);
// ✅ 正确:检查边界
int index = 3;
if (index >= 0 && index < size) {
printf("arr[%d] = %d\n", index, arr[index]);
} else {
printf("索引越界\n");
}
return 0;
}
#include <stdio.h>
int main() {
printf("=== 东巴文计算数组长度 ===\n\n");
int arr[] = {1, 2, 3, 4, 5};
// ✅ 正确:使用sizeof
int size = sizeof(arr) / sizeof(arr[0]);
printf("数组长度:%d\n", size);
return 0;
}
#include <stdio.h>
int main() {
printf("=== 东巴文数组初始化 ===\n\n");
// ✅ 推荐:初始化为0
int arr1[5] = {0};
// ✅ 推荐:完全初始化
int arr2[5] = {1, 2, 3, 4, 5};
printf("arr1: ");
for (int i = 0; i < 5; i++) {
printf("%d ", arr1[i]);
}
printf("\n");
return 0;
}
完成本章学习后,请确认:
掌握一维数组后,你可以继续学习:
如果遇到问题,欢迎访问 东巴文(db-w.cn) 获取帮助!
东巴文(db-w.cn) - 让编程学习更简单
📦 东巴文一维数组提示:一维数组是C语言数据组织的基础,掌握一维数组是学习高级数据结构的关键。在 db-w.cn,我们会通过大量实例帮你掌握一维数组的使用!