首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >C语言数组处理批量数据详解。

C语言数组处理批量数据详解。

作者头像
晚霞的不甘
发布2025-12-23 10:19:10
发布2025-12-23 10:19:10
1110
举报

一、数组的基本概念

1.1 什么是数组

数组是相同数据类型元素的集合,这些元素在内存中连续存储,通过下标访问。

1.2 数组的声明

代码语言:javascript
复制
数据类型 数组名[数组长度];

示例:

代码语言:javascript
复制
int scores[50];        // 存储50个学生成绩
float temperatures[7]; // 存储一周温度
char name[20];         // 存储姓名

二、一维数组

2.1 声明与初始化

代码语言:javascript
复制
// 方式1:先声明后赋值
int numbers[5];
numbers[0] = 10;
numbers[1] = 20;

// 方式2:声明时初始化
int numbers[5] = {10, 20, 30, 40, 50};

// 方式3:不指定长度,自动推断
int numbers[] = {1, 2, 3, 4, 5};

// 方式4:部分初始化,其余为0
int numbers[5] = {1, 2}; // [1,2,0,0,0]

2.2 内存示意图

代码语言:javascript
复制
数组: int arr[5] = {10, 20, 30, 40, 50};

内存布局:
地址:   1000  1004  1008  1012  1016
下标:   [0]   [1]   [2]   [3]   [4]
值:     10    20    30    40    50

2.3 实例:学生成绩统计

代码语言:javascript
复制
#include <stdio.h>

int main() {
    int scores[10] = {85, 92, 78, 90, 65, 88, 76, 95, 80, 72};
    int sum = 0;
    float average;
    int max = scores[0], min = scores[0];
    
    // 计算总分、平均分、最高分、最低分
    for(int i = 0; i < 10; i++) {
        sum += scores[i];
        if(scores[i] > max) max = scores[i];
        if(scores[i] < min) min = scores[i];
    }
    
    average = (float)sum / 10;
    
    printf("总分: %d\n", sum);
    printf("平均分: %.2f\n", average);
    printf("最高分: %d\n", max);
    printf("最低分: %d\n", min);
    
    return 0;
}

三、二维数组

3.1 声明与初始化

代码语言:javascript
复制
// 3行4列的二维数组
int matrix[3][4] = {
    {1, 2, 3, 4},
    {5, 6, 7, 8},
    {9, 10, 11, 12}
};

// 部分初始化
int matrix[3][4] = {
    {1, 2},
    {5, 6, 7},
    {9}
};

3.2 内存示意图

代码语言:javascript
复制
二维数组: int arr[3][4] = {{1,2,3,4}, {5,6,7,8}, {9,10,11,12}}

内存布局(按行存储):
行0: [0][0]=1  [0][1]=2  [0][2]=3  [0][3]=4
行1: [1][0]=5  [1][1]=6  [1][2]=7  [1][3]=8
行2: [2][0]=9  [2][1]=10 [2][2]=11 [2][3]=12

3.3 实例:矩阵运算

代码语言:javascript
复制
#include <stdio.h>

#define ROWS 3
#define COLS 3

int main() {
    int matrix1[ROWS][COLS] = {
        {1, 2, 3},
        {4, 5, 6},
        {7, 8, 9}
    };
    
    int matrix2[ROWS][COLS] = {
        {9, 8, 7},
        {6, 5, 4},
        {3, 2, 1}
    };
    
    int result[ROWS][COLS];
    
    // 矩阵相加
    printf("矩阵相加结果:\n");
    for(int i = 0; i < ROWS; i++) {
        for(int j = 0; j < COLS; j++) {
            result[i][j] = matrix1[i][j] + matrix2[i][j];
            printf("%3d ", result[i][j]);
        }
        printf("\n");
    }
    
    return 0;
}

四、字符数组与字符串

4.1 字符数组

代码语言:javascript
复制
// 字符数组声明
char str1[10] = {'H', 'e', 'l', 'l', 'o', '\0'};
char str2[] = "Hello";  // 自动添加'\0'
char str3[10] = "Hello";

4.2 字符串处理函数

代码语言:javascript
复制
#include <stdio.h>
#include <string.h>

int main() {
    char str1[20] = "Hello";
    char str2[20] = "World";
    char result[40];
    
    // 字符串长度
    printf("str1长度: %lu\n", strlen(str1));
    
    // 字符串复制
    strcpy(result, str1);
    printf("复制结果: %s\n", result);
    
    // 字符串连接
    strcat(result, " ");
    strcat(result, str2);
    printf("连接结果: %s\n", result);
    
    // 字符串比较
    if(strcmp(str1, str2) == 0) {
        printf("字符串相等\n");
    } else {
        printf("字符串不相等\n");
    }
    
    return 0;
}

五、数组作为函数参数

5.1 传递一维数组

代码语言:javascript
复制
#include <stdio.h>

// 函数声明
void printArray(int arr[], int size);
void modifyArray(int arr[], int size);

int main() {
    int numbers[5] = {1, 2, 3, 4, 5};
    
    printf("原数组: ");
    printArray(numbers, 5);
    
    modifyArray(numbers, 5);
    
    printf("修改后: ");
    printArray(numbers, 5);
    
    return 0;
}

// 打印数组
void printArray(int arr[], int size) {
    for(int i = 0; i < size; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
}

// 修改数组(每个元素加倍)
void modifyArray(int arr[], int size) {
    for(int i = 0; i < size; i++) {
        arr[i] *= 2;
    }
}

5.2 传递二维数组

代码语言:javascript
复制
#include <stdio.h>

// 必须指定列数
void printMatrix(int mat[][3], int rows) {
    for(int i = 0; i < rows; i++) {
        for(int j = 0; j < 3; j++) {
            printf("%3d ", mat[i][j]);
        }
        printf("\n");
    }
}

int main() {
    int matrix[2][3] = {{1,2,3}, {4,5,6}};
    printMatrix(matrix, 2);
    return 0;
}

六、综合实例:学生管理系统

代码语言:javascript
复制
#include <stdio.h>
#include <string.h>

#define MAX_STUDENTS 100
#define NAME_LENGTH 20

struct Student {
    int id;
    char name[NAME_LENGTH];
    float score;
};

int main() {
    struct Student students[MAX_STUDENTS];
    int count = 0;
    int choice;
    
    do {
        printf("\n=== 学生管理系统 ===\n");
        printf("1. 添加学生\n");
        printf("2. 显示所有学生\n");
        printf("3. 查找学生\n");
        printf("4. 统计平均分\n");
        printf("0. 退出\n");
        printf("请选择: ");
        scanf("%d", &choice);
        
        switch(choice) {
            case 1: // 添加学生
                if(count < MAX_STUDENTS) {
                    printf("输入学号: ");
                    scanf("%d", &students[count].id);
                    printf("输入姓名: ");
                    scanf("%s", students[count].name);
                    printf("输入成绩: ");
                    scanf("%f", &students[count].score);
                    count++;
                    printf("添加成功!\n");
                } else {
                    printf("学生数量已达上限!\n");
                }
                break;
                
            case 2: // 显示所有学生
                printf("\n学号\t姓名\t成绩\n");
                for(int i = 0; i < count; i++) {
                    printf("%d\t%s\t%.2f\n", 
                           students[i].id, 
                           students[i].name, 
                           students[i].score);
                }
                break;
                
            case 3: // 查找学生
                {
                    char searchName[NAME_LENGTH];
                    printf("输入要查找的姓名: ");
                    scanf("%s", searchName);
                    
                    int found = 0;
                    for(int i = 0; i < count; i++) {
                        if(strcmp(students[i].name, searchName) == 0) {
                            printf("找到学生: 学号=%d, 姓名=%s, 成绩=%.2f\n",
                                   students[i].id, students[i].name, students[i].score);
                            found = 1;
                        }
                    }
                    if(!found) {
                        printf("未找到该学生!\n");
                    }
                }
                break;
                
            case 4: // 统计平均分
                if(count > 0) {
                    float sum = 0;
                    for(int i = 0; i < count; i++) {
                        sum += students[i].score;
                    }
                    printf("平均分: %.2f\n", sum / count);
                } else {
                    printf("暂无学生数据!\n");
                }
                break;
        }
    } while(choice != 0);
    
    return 0;
}

七、重要注意事项

7.1 数组边界检查

代码语言:javascript
复制
int arr[5] = {1,2,3,4,5};
// 错误:访问越界
// printf("%d", arr[5]); // 未定义行为

// 正确做法
for(int i = 0; i < 5; i++) {
    printf("%d ", arr[i]);
}

7.2 数组初始化

代码语言:javascript
复制
// 错误:数组大小不能是变量(C89标准)
// int n = 10;
// int arr[n]; // 错误

// 正确:使用常量或宏定义
#define SIZE 10
int arr[SIZE];

7.3 数组名与指针

代码语言:javascript
复制
int arr[5] = {1,2,3,4,5};
printf("%p\n", arr);    // 数组首地址
printf("%p\n", &arr[0]); // 同上
printf("%d\n", *arr);   // 第一个元素

总结

数组是C语言中处理批量数据的重要工具,具有以下特点:

· 相同数据类型元素的集合 · 内存连续存储 · 通过下标访问元素 · 可以是一维、二维或多维 · 数组名代表数组首地址

掌握数组的使用对于C语言编程至关重要,特别是在处理大量相似数据时,数组提供了高效的数据组织和访问方式。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-11-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档