网站LOGO
云与雾Blog
页面加载中
11月21日
网站LOGO 云与雾Blog
分享你我所热爱的。
菜单
  • 云与雾Blog
    分享你我所热爱的。
    用户的头像
    首次访问
    上次留言
    累计留言
    我的等级
    我的角色
    打赏二维码
    打赏博主
    C语言笔记---(7)数组篇
    点击复制本页信息
    微信扫一扫
    文章二维码
    文章图片 文章标题
    创建时间
  • 一 言
    确认删除此评论么? 确认
  • 本弹窗介绍内容来自,本网站不对其中内容负责。

    C语言笔记---(7)数组篇

    小北 · 原创 ·
    👑C语言📓学习笔记 · 暂无标签
    共 4047 字 · 约 3 分钟 · 1058
    本文最后更新于2024年06月27日,已经过了146天没有更新,若内容或图片失效,请留言反馈

    一、初识数组

    1.数组的概念

    数组是由一系列类型相同的数据对象依次排列组合而成

    组成数组的数据对象被称作数组的元素

    重点:

    • 依次排列
    • 类型相同

    2.声明数组

    c 代码:
    //格式:
    元素类型 数组名[元素数量];
    //示例:
    
    char c[5];
    int n[10];
    long l[3];
    float f[2];
    double df[1];

    3.数组初始化

    c 代码:
    //格式如下:
    
    元素类型 数组名[元素数量] = {逗号分割的元素内容};
    
    //示例:
    
    int arr[10] = {1,2,3,4,5,6,7,8,9,0};
    
    //等号右边被称为初始化列表,初始化列表写明了数组的元素分别需要被初始化为哪些值。

    注意事项:

    1. 如果元素内容小于元素数量,那么会被自动填补为0
    2. 如果元素内容多于元素数量,那么将会无法编译
    3. 元素数量可以不填写,让初始化列表决定数组长度

    4.访问数组

    c 代码:
    //格式:
    
    数组名[下标] 
    
    //示例代码:
    int arr[10] = {1,2,3,4,5,6,7,8,9,0};
    printf("%d\n", arr[0]);
    printf("%d\n", arr[1]);
    printf("%d\n", arr[2]);
    printf("%d\n", arr[3]);
    printf("%d\n", arr[4]);
    printf("%d\n", arr[5]);
    printf("%d\n", arr[6]);
    printf("%d\n", arr[7]);
    printf("%d\n", arr[8]);
    printf("%d\n", arr[9]);

    注意事项:

    1. 数组下标是从0开始的,如果有九个元素,那么下标为10

    5.修改数组的值

    代码示例:

    c 代码:
    int arr[10] = {};
    printf("%d\n", arr[5]);
    arr[5] = 123;
    printf("%d\n", arr[5]);

    注意事项:

    1. 数组越界错误

    当数组元素有一个固定数量时,请勿访问或修改数组元素内以外的元素。C语言编译器不会检查数组是否越界。

    1. 数组不一定初始化,但是之后需要赋值,避免使用无意义数值

    6.数组所占空间大小

    数组所占的空间 = 单个元素所占空间大小*数组元素个数

    7.数组的整体赋值

    数组不能整体赋值,且初始化列表智能存在于初始化。那么如何赋值整个数组的数据呢?

    有两种方法:

    1. 使用循环遍历赋值
    c 代码:
    int arr1[];
    int arr2[1,2,3,4,5];
    for (i=0;i<4;i++);
        arr1[i]=arr2[i]
    1. 使用memcpy内存复制函数
    c 代码:
    //memcpy函数格式
    
    memcpy(目标数组, 原始数组, 需要复制多少字节数据);
    
    //示例:
    
    memcpy(arr1, arr2, sizeof(arr1));
    
    /*注意事项
    使用memcpy函数需要引入头文件<memory.h>
    假设需要复制的数据字节数为N;
    目标数组大小不能小于N,否则没有足够空间存放数据;
    原始数组的数据大小不能小于N,否则将复制无意义内容;
    */

    8.小练习

    逆序输出一组数字

    c 代码:
    #include<stdio.h>
    void main(){
        int i;
        int a[10] = {0};
        for(i = 0;i<10;i++){
            printf("输入数字:");
            scanf("%d",&a[i]);
        }
        
        printf("逆序数字排列为:");
        
        for(i = 9;i>=0;i--){
            printf("%d ",a[i]);    
        }
    }

    二、二维数组

    2.1 二维数组的概念

    二维数组就是由多个一维数组组成的数组int score[5][10]

    二维数组的每个元素都是一维数组

    一维数组的每个元素表示的都是一个储存区

    在定义一个二维数组的时候,需要提供两个整数

    前一个整数表示一维数组的个数,后一个整数表示一维数组里的储存区个数

    数据类型表示的是每个储存区的类型

    imgimg c 代码:
    int score[5][10]
    //定义了1个二维数组,一共分为了5个数组.每个一维数组中有10个int类型的储存区

    2.2 二维数组的格式

    c 代码:
    //格式:
    元素类型 数组名[二维数组长度][一维数组长度] = {{...},{...}...};
        二维数组长度 = 二维数组中有几个一维数组
        一维数组长度 = 一维数组中有几个储存区
    //举例:
            int a[3][4] = {{1,2,3,4,},{5,6,7,8},{9,10,11,12}};
    
    //可以把二维数组当作一维数组进行初始化,二维数组本质上还是一维数组
            int mat[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
            int mat[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};

    2.3 二维数组的使用

    c 代码:
    int mat[3][4] = {{1,2,3,4},[5,6,7,8],[9,10,11,12]};
    //mat[0]表示第一个一维数组,是第一个一维数组的名字
    //mat[0][1]表示访问mat[0]一维数组下标为1的储存区

    二维数组名称后可以只写一个下标,这个下标作为组下标使用,这个写法可以表示组下标对应组里第一个储存区的地址

    二维数组名称后加组下标也可以作为一维数组名称使用,这个一维数组里包含组下标对应组里所有的储存区

    2.4 随机数

    c 代码:
    #include <stdlib.h>        //srand() rand()
    #include <time.h>        //time()
    srand(time(0));            //设置一个随机数种子
    
    rand()            //表示一个随机的整数
    rand() % 10        //表示的是0~9之间随机数

    2.5 小练习

    双色球

    获取6个1-33之间的数字(不可重复)作为红球

    获取1个1-16之间的数字作为蓝球

    c 代码:
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    int main() {
        srand(time(NULL)); // 设置随机数种子
    
        // 生成6个1-33之间的不重复的随机数作为红球
        int red_balls[6];
        for (int i = 0; i < 6; i++) {
            int temp;
            while (1) {
                temp = rand() % 33 + 1;
                int flag = 0;
                for (int j = 0; j < i; j++) {
                    if (red_balls[j] == temp) {
                        flag = 1;
                        break;
                    }
                }
                if (!flag) {
                    red_balls[i] = temp;
                    break;
                }
            }
        }
    
        // 生成1个1-16之间的随机数作为蓝球
        int blue_ball;
        blue_ball = rand() % 17 + 1;
    
        // 输出结果
        printf("红球:");
        for (int i = 0; i < 6; i++) {
            printf("%d ", red_balls[i]);
        }
        printf("蓝球:%d", blue_ball);
    
        return 0;
    }

    2.6 小结

    imgimg
    声明:本文由 小北(博主)原创,依据 CC-BY-NC-SA 4.0 许可协议 授权,转载请注明出处。

    还没有人喜爱这篇文章呢

    我要发表评论 我要发表评论
    博客logo 云与雾Blog 分享你我所热爱的。 51统计
    MOEICP 萌ICP备20228088号 ICP 晋ICP备2021016398号 又拍云 本站由又拍云提供CDN加速/云存储服务

    💻️ 小北 11月8日 在线

    🕛

    本站已运行 3 年 278 天 21 小时 20 分
    云与雾Blog. © 2021 ~ 2024.
    网站logo

    云与雾Blog 分享你我所热爱的。