Administrator
Administrator
发布于 2024-09-05 / 15 阅读
1
0

第7章:数组与字符串

7.1 数组的基本概念

数组是一组相同类型的元素的集合,它们在内存中是连续存储的。数组的每个元素都有一个索引,通过索引可以访问数组中的每个元素。

1. 一维数组

声明和初始化:

数据类型 数组名[大小];
数据类型 数组名[大小] = {值1, 值2, ..., 值n};

示例:

#include <stdio.h>

int main() {
    int numbers[5] = {1, 2, 3, 4, 5}; // 声明并初始化一个长度为5的整数数组

    // 访问和修改数组元素
    for (int i = 0; i < 5; i++) {
        printf("numbers[%d] = %d\n", i, numbers[i]);
    }

    numbers[0] = 10; // 修改第一个元素
    printf("After modification: numbers[0] = %d\n", numbers[0]);

    return 0;
}

2. 二维数组

二维数组可以看作是一个数组的数组,适用于表示矩阵等结构。

声明和初始化:

数据类型 数组名[行数][列数];
数据类型 数组名[行数][列数] = {{值1, 值2, ...}, {值3, 值4, ...}, ...};

示例:

#include <stdio.h>

int main() {
    int matrix[2][3] = {{1, 2, 3}, {4, 5, 6}}; // 2行3列的二维数组

    // 访问二维数组元素
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 3; j++) {
            printf("matrix[%d][%d] = %d\n", i, j, matrix[i][j]);
        }
    }

    return 0;
}

7.2 字符串

在C语言中,字符串是以字符数组形式存储的一系列字符,并且以空字符\0结尾。

1. 字符数组与字符串

声明和初始化:

char 字符数组名[大小];
char 字符数组名[大小] = "字符串";
char 字符数组名[] = "字符串"; // 自动计算大小

示例:

#include <stdio.h>

int main() {
    char greeting[] = "Hello, World!"; // 字符数组初始化为字符串

    // 输出字符串
    printf("%s\n", greeting);

    return 0;
}

2. 字符串输入与输出

使用scanfprintf

  • scanf读取字符串时会自动添加结束字符\0,但它会在遇到空格时停止读取。
  • printf使用%s格式符来输出字符串。

示例:

#include <stdio.h>

int main() {
    char name[50]; // 声明一个字符数组来存储输入的字符串

    printf("Enter your name: ");
    scanf("%s", name); // 读取用户输入的字符串
    printf("Hello, %s!\n", name);

    return 0;
}

7.3 字符串操作函数

C标准库<string.h>提供了多种字符串操作函数。

1. strlen

计算字符串的长度(不包括空字符\0)。

示例:

#include <stdio.h>
#include <string.h>

int main() {
    char str[] = "Hello, World!";
    int length = strlen(str); // 获取字符串长度
    printf("Length of the string is: %d\n", length);

    return 0;
}

2. strcpy

将源字符串复制到目标字符串。

示例:

#include <stdio.h>
#include <string.h>

int main() {
    char src[] = "Hello";
    char dest[20];

    strcpy(dest, src); // 复制字符串
    printf("Destination string after strcpy: %s\n", dest);

    return 0;
}

3. strcat

将一个字符串连接到另一个字符串的末尾。

示例:

#include <stdio.h>
#include <string.h>

int main() {
    char str1[20] = "Hello, ";
    char str2[] = "World!";

    strcat(str1, str2); // 连接字符串
    printf("After concatenation: %s\n", str1);

    return 0;
}

4. strcmp

比较两个字符串。如果相等,返回0;如果第一个字符串小于第二个,返回负值;如果大于,返回正值。

示例:

#include <stdio.h>
#include <string.h>

int main() {
    char str1[] = "Hello";
    char str2[] = "World";

    int result = strcmp(str1, str2); // 比较字符串
    printf("Result of strcmp: %d\n", result);

    return 0;
}

7.4 数组与函数

数组可以作为参数传递给函数。在C语言中,数组作为函数参数时,实际上传递的是指向数组首元素的指针。

示例:

#include <stdio.h>

// 函数声明:计算数组元素之和
int sumArray(int arr[], int size);

int main() {
    int numbers[] = {1, 2, 3, 4, 5};
    int size = sizeof(numbers) / sizeof(numbers[0]);

    int sum = sumArray(numbers, size); // 调用函数计算数组之和
    printf("Sum of array elements: %d\n", sum);

    return 0;
}

// 函数定义:计算数组元素之和
int sumArray(int arr[], int size) {
    int sum = 0;
    for (int i = 0; i < size; i++) {
        sum += arr[i];
    }
    return sum;
}

练习

  1. 编写一个程序,输入10个整数存储在数组中,并计算它们的平均值。
  2. 编写一个程序,查找和打印一个给定整数数组中的最大值和最小值。
  3. 编写一个函数,输入一个字符串并输出它的反转字符串。
  4. 使用二维数组编写一个简单的矩阵加法程序。
  5. 编写一个程序,使用strcmp函数比较两个字符串,输出结果是相等还是不同。

完成这些练习后,你将掌握数组和字符串的使用方法。


评论