新手c语言讲解及题目分享(十)——数组专项练习
C语言中的数组是一个用于存储多个同类型数据的集合。数组在内存中是连续分配的,可以通过索引访问其中的元素。以下是对C语言数组的详细讲解:
1. 数组的定义
数组的定义格式如下:
type arrayName[arraySize];
- `type`:数组中元素的数据类型(如 `int`, `float`, `char` 等)。
- `arrayName`:数组的名称。
- `arraySize`:数组的大小,表示可以存储的元素数量。
示例:
int numbers[5]; // 定义一个可以存储5个整数的数组
2. 数组的初始化
数组可以在定义时进行初始化,格式如下:
type arrayName[arraySize] = {value1, value2, ..., valueN};
如果数组的大小未指定,编译器会根据初始化的元素数量自动推断。
示例:
int numbers[5] = {1, 2, 3, 4, 5}; // 定义并初始化一个整数数组
int moreNumbers[] = {10, 20, 30}; // 编译器自动推断大小为3
3. 访问数组元素
数组元素通过索引访问,索引从0开始。例如,`arrayName[index]`表示访问数组中第`index`个元素。
示例:
int numbers[5] = {1, 2, 3, 4, 5};
printf("%d\n", numbers[0]); // 输出第一个元素: 1
printf("%d\n", numbers[2]); // 输出第三个元素: 3
4. 数组的大小
可以使用 `sizeof` 运算符来获取数组的大小(以字节为单位),然后通过元素大小计算元素数量。
示例:
int numbers[5] = {1, 2, 3, 4, 5};
int size = sizeof(numbers) / sizeof(numbers[0]); // 计算数组元素数量
printf("数组大小: %d\n", size); // 输出: 5
5. 多维数组
C语言支持多维数组,最常见的是二维数组。定义格式如下:
type arrayName[size1][size2];
示例:
int matrix[3][4]; // 定义一个3行4列的二维数组
可以通过两个索引访问元素:
matrix[0][1] = 5; // 将第一行第二列的元素设置为5
6. 数组作为函数参数
数组可以作为函数参数传递。需要注意的是,传递数组时,实际上是传递数组的指针。示例:
void printArray(int arr[], int size) {
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
int main() {
int numbers[] = {1, 2, 3, 4, 5};
printArray(numbers, sizeof(numbers) / sizeof(numbers[0])); // 传递数组
return 0;
}
7. 注意事项
- 数组的大小在定义后不能更改。
- 访问数组时,确保索引在有效范围内(0到`size-1`),否则会导致未定义行为。
- C语言不提供数组边界检查,因此需要手动管理数组的大小和索引。
总结
数组是C语言中非常重要的数据结构,适用于存储和处理多个同类型的数据。理解数组的定义、初始化、访问和传递是掌握C语言的基础。如果您有任何具体问题或需要更深入的讲解,请告诉我!
1.数组的最大值和最小值
#include <stdio.h>
int main() {
int n;
// 提示用户输入整数个数
printf("请输入整数的个数: ");
scanf("%d", &n);
int arr[n];
// 输入整数
printf("请输入 %d 个整数:\n", n);
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
int max = arr[0];
int min = arr[0];
// 查找最大值和最小值
for (int i = 1; i < n; i++) {
if (arr[i] > max) {
max = arr[i];
}
if (arr[i] < min) {
min = arr[i];
}
}
printf("最大值: %d\n", max);
printf("最小值: %d\n", min);
return 0;
}
2.数组元素的平均值
#include <stdio.h>
int main() {
int n;
// 提示用户输入整数个数
printf("请输入整数的个数: ");
scanf("%d", &n);
int arr[n];
// 输入整数
printf("请输入 %d 个整数:\n", n);
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
int sum = 0;
// 计算总和
for (int i = 0; i < n; i++) {
sum += arr[i];
}
double average = (double)sum / n; // 计算平均值
printf("平均值: %.2f\n", average);
return 0;
}
3.反转数组
#include <stdio.h>
int main() {
int n;
// 提示用户输入整数个数
printf("请输入整数的个数: ");
scanf("%d", &n);
int arr[n];
// 输入整数
printf("请输入 %d 个整数:\n", n);
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
// 反转数组
printf("反转后的数组:\n");
for (int i = n - 1; i >= 0; i--) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
4.合并两个数组
#include <stdio.h>
int main() {
int n1, n2;
// 输入第一个数组的大小
printf("请输入第一个数组的大小: ");
scanf("%d", &n1);
int arr1[n1];
// 输入第一个数组的元素
printf("请输入第一个数组的 %d 个整数:\n", n1);
for (int i = 0; i < n1; i++) {
scanf("%d", &arr1[i]);
}
// 输入第二个数组的大小
printf("请输入第二个数组的大小: ");
scanf("%d", &n2);
int arr2[n2];
// 输入第二个数组的元素
printf("请输入第二个数组的 %d 个整数:\n", n2);
for (int i = 0; i < n2; i++) {
scanf("%d", &arr2[i]);
}
// 合并数组
int merged[n1 + n2];
for (int i = 0; i < n1; i++) {
merged[i] = arr1[i];
}
for (int i = 0; i < n2; i++) {
merged[n1 + i] = arr2[i];
}
// 输出合并后的数组
printf("合并后的数组:\n");
for (int i = 0; i < n1 + n2; i++) {
printf("%d ", merged[i]);
}
printf("\n");
return 0;
}
5.查找数组中的重复元素
#include <stdio.h>
int main() {
int n;
// 输入数组大小
printf("请输入整数的个数: ");
scanf("%d", &n);
int arr[n];
// 输入数组元素
printf("请输入 %d 个整数:\n", n);
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
printf("重复的元素有:\n");
int found[n]; // 用于标记已找到的重复元素
int found_count = 0;
for (int i = 0; i < n; i++) {
int is_duplicate = 0;
for (int j = 0; j < i; j++) {
if (arr[i] == arr[j]) {
is_duplicate = 1;
break;
}
}
if (is_duplicate) {
// 检查是否已经输出过该重复元素
int already_found = 0;
for (int k = 0; k < found_count; k++) {
if (arr[i] == found[k]) {
already_found = 1;
break;
}
}
if (!already_found) {
found[found_count++] = arr[i];
printf("%d ", arr[i]);
}
}
}
printf("\n");
return 0;
}
6.旋转数组( 编写一个程序,要求用户输入一个整数数组和一个旋转次数k,程序将数组向右旋转k次并输出结果。)
#include <stdio.h>
void rotate(int arr[], int n, int k) {
k = k % n; // 处理k大于n的情况
int temp[n];
// 将后k个元素放到临时数组的前面
for (int i = 0; i < k; i++) {
temp[i] = arr[n - k + i];
}
// 将前n-k个元素放到临时数组的后面
for (int i = 0; i < n - k; i++) {
temp[k + i] = arr[i];
}
// 将临时数组的内容复制回原数组
for (int i = 0; i < n; i++) {
arr[i] = temp[i];
}
}
int main() {
int n, k;
// 输入数组大小
printf("请输入整数的个数: ");
scanf("%d", &n);
int arr[n];
// 输入数组元素
printf("请输入 %d 个整数:\n", n);
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
// 输入旋转次数
printf("请输入旋转次数k: ");
scanf("%d", &k);
// 旋转数组
rotate(arr, n, k);
// 输出旋转后的数组
printf("旋转后的数组:\n");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
每天不定时分享一些c语言题目和32项目,如果喜欢就点点关注吧!!!!大佬们,以下是32项目的链接
https://blog.csdn.net/qq_74267366/article/details/141721460?spm=1001.2014.3001.5501