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. 字符串输入与输出
使用scanf
和printf
:
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;
}
练习
- 编写一个程序,输入10个整数存储在数组中,并计算它们的平均值。
- 编写一个程序,查找和打印一个给定整数数组中的最大值和最小值。
- 编写一个函数,输入一个字符串并输出它的反转字符串。
- 使用二维数组编写一个简单的矩阵加法程序。
- 编写一个程序,使用
strcmp
函数比较两个字符串,输出结果是相等还是不同。
完成这些练习后,你将掌握数组和字符串的使用方法。