新手c语言讲解及题目分享(十)——数组专项练习

C语言中的数组是一个用于存储多个同类型数据的集合。数组在内存中是连续分配的,可以通过索引访问其中的元素。以下是对C语言数组的详细讲解:

1. 数组的定义

数组的定义格式如下:

cs 复制代码
type arrayName[arraySize];
  • `type`:数组中元素的数据类型(如 `int`, `float`, `char` 等)。

  • `arrayName`:数组的名称。

  • `arraySize`:数组的大小,表示可以存储的元素数量。

示例:

int numbers[5]; // 定义一个可以存储5个整数的数组

2. 数组的初始化

数组可以在定义时进行初始化,格式如下:

cs 复制代码
type arrayName[arraySize] = {value1, value2, ..., valueN};

如果数组的大小未指定,编译器会根据初始化的元素数量自动推断。

示例:

cs 复制代码
int numbers[5] = {1, 2, 3, 4, 5}; // 定义并初始化一个整数数组
int moreNumbers[] = {10, 20, 30}; // 编译器自动推断大小为3

3. 访问数组元素

数组元素通过索引访问,索引从0开始。例如,`arrayName[index]`表示访问数组中第`index`个元素。

示例:

cs 复制代码
int numbers[5] = {1, 2, 3, 4, 5};
printf("%d\n", numbers[0]); // 输出第一个元素: 1
printf("%d\n", numbers[2]); // 输出第三个元素: 3

4. 数组的大小

可以使用 `sizeof` 运算符来获取数组的大小(以字节为单位),然后通过元素大小计算元素数量。

示例:

cs 复制代码
int numbers[5] = {1, 2, 3, 4, 5};
int size = sizeof(numbers) / sizeof(numbers[0]); // 计算数组元素数量
printf("数组大小: %d\n", size); // 输出: 5

5. 多维数组

C语言支持多维数组,最常见的是二维数组。定义格式如下:

cs 复制代码
type arrayName[size1][size2];

示例:

int matrix[3][4]; // 定义一个3行4列的二维数组

可以通过两个索引访问元素:

matrix[0][1] = 5; // 将第一行第二列的元素设置为5

6. 数组作为函数参数

数组可以作为函数参数传递。需要注意的是,传递数组时,实际上是传递数组的指针。示例:

cs 复制代码
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;
}
  1. 注意事项
  • 数组的大小在定义后不能更改。

  • 访问数组时,确保索引在有效范围内(0到`size-1`),否则会导致未定义行为。

  • C语言不提供数组边界检查,因此需要手动管理数组的大小和索引。

总结

数组是C语言中非常重要的数据结构,适用于存储和处理多个同类型的数据。理解数组的定义、初始化、访问和传递是掌握C语言的基础。如果您有任何具体问题或需要更深入的讲解,请告诉我!

1.数组的最大值和最小值

cs 复制代码
#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.数组元素的平均值

cs 复制代码
#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.反转数组

cs 复制代码
#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.合并两个数组

cs 复制代码
#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.查找数组中的重复元素

cs 复制代码
#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次并输出结果。)

cs 复制代码
#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

相关推荐
杨荧22 分钟前
【JAVA毕业设计】基于Vue和SpringBoot的服装商城系统学科竞赛管理系统
java·开发语言·vue.js·spring boot·spring cloud·java-ee·kafka
白子寰28 分钟前
【C++打怪之路Lv14】- “多态“篇
开发语言·c++
王俊山IT40 分钟前
C++学习笔记----10、模块、头文件及各种主题(一)---- 模块(5)
开发语言·c++·笔记·学习
为将者,自当识天晓地。42 分钟前
c++多线程
java·开发语言
小政爱学习!44 分钟前
封装axios、环境变量、api解耦、解决跨域、全局组件注入
开发语言·前端·javascript
k09331 小时前
sourceTree回滚版本到某次提交
开发语言·前端·javascript
神奇夜光杯1 小时前
Python酷库之旅-第三方库Pandas(202)
开发语言·人工智能·python·excel·pandas·标准库及第三方库·学习与成长
Themberfue1 小时前
Java多线程详解⑤(全程干货!!!)线程安全问题 || 锁 || synchronized
java·开发语言·线程·多线程·synchronized·
plmm烟酒僧1 小时前
Windows下QT调用MinGW编译的OpenCV
开发语言·windows·qt·opencv
EricWang13581 小时前
[OS] 项目三-2-proc.c: exit(int status)
服务器·c语言·前端