当前位置: 首页 > article >正文

新手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


http://www.kler.cn/a/289591.html

相关文章:

  • Qwen2-VL:发票数据提取、视频聊天和使用 PDF 的多模态 RAG 的实践指南
  • 量化交易系统开发-实时行情自动化交易-3.4.1.2.A股交易数据
  • jmeter介绍、使用方法、性能测试、现参数化和数据驱动、分布式测试、压力测试、接口测试
  • 【自用】0-1背包问题与完全背包问题的Java实现
  • Postman上传图片如何处理
  • 探索Pillow库:Python图像处理的瑞士军刀
  • 免费GPU平台教程,助力你的AI, pytorch tensorflow 支持cuda
  • Vue3组件通信概览
  • [Raspberry Pi]如何利用docker執行motioneye,並利用Line Notify取得即時通知和照片?
  • 2024车牌识别系统十大品牌发布,车牌智能识别系统品牌哪家好?
  • 【408 数据结构】第1章绪论
  • 开发基础软件安装地址(持续更新中)
  • Spring Boot实战:运用享元模式优化微服务间共享资源
  • 使用VM创建centos7环境
  • 知识点复习3
  • 速盾:什么是高防cdn?高防cdn的特点和好处有哪些?
  • 微信小程序知识点(一)
  • 自然语言处理系列五十三》文本聚类算法》文本聚类介绍及相关算法
  • 【软件文档】系统安全保证措施(Word)
  • 【代码随想录训练营第42期 Day49打卡 - 接雨水和柱状图最大矩形问题
  • HTML基本概述
  • 2024升级zblog小程序开源源码/基于uniapp开发的(支持微信小程序、百度小程序、安卓APP)
  • linux文件的拓展属性
  • pod基础和镜像拉取策略
  • 《Few-shot Object Counting and Detection》CVPR2022
  • 学习笔记---自动驾驶