• C语言中的数组使用方法及案例分享


    1. 一维数组

    1.1 一维数组的定义和初始化
    1.1.1一维数组的定义

    语法:
    数据类型 数组名[数组长度]
    解释说明:

    • 数组的数据类型就是数组元素的数据类型
    • 数组长度是数组能够包含的数组元素个数,为常量表达式

    例子:
    int a[10];

    1.1.2 数值型一维数组的初始化

    数组的初始化分为两种,一种为全部元素初始化,一种为部分元素初始化。详见下图:
    1.1.2.1

    1.1.3 字符串一维数组的初始化

    字符型数组是:据类型为字符型的数组,可用于存储字符串,每一个元素存放一个字符常量。
    对字符数组初始化时,可使用"\0"作为末尾元素值,存储字符串

    char str[4]={'s','i','x','\0'};
    
    • 1

    也可以使用一个字符串常量为字符数组进行初始化,系统自动在字符串尾部增加一个结束标志’\0’

    char str[4]='six';
    
    • 1

    如上,数组str的长度为4,内部占用5个字节空间。

    1.2 一维数组的引用

    数组元素的下标从0开始,当数组长度为n时,最末元素的下标是-1。
    char str[4]的全部元素:str[0]、str[1]、str[2]、str[3]。
    数组的输入和输出代码如下:

    char str[4];
    // 对第一个数组元素进行赋值
    scanf("%c", &str[0]);
    // 取第一个数组元素的值
    printf("%c", str[0]);
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2. 字符串

    2.1 字符串拼接与复制

    strcat(s1,s2):字符串拼接
    strcpy(s1,s2) : 字符串复制
    两个函数使用案例如下:

    #include
    #include
    void main(){
        char s1[20] = "include", s2[10] = "stdio", s3[5] = "hi";
        printf(" The origin s1: %s\n", s1);
        printf(" The origin s2: %s\n", s2);
        printf(" The origin s3: %s\n", s3);
        printf(" The s2 and s3 : %s\n", strcat(s2, s3));
        // 进行拷贝
        strcpy(s1, s3);
        printf(" The s1: %s\n", s1);
        printf(" The s2: %s\n", s2);
        printf(" The s3: %s\n", s3);
        for (int i = 0; i < 20; i++){
            printf("%c ", s1[i]);
            if (i == 19) printf("\n");
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    代码运行截图如下:
    2.1

    2.2 字符串比较函数

    strcmp(s1,s2) :比较字符串s1和字符串s2的大小。
    会自左至右逐个字符串比较字符串中个字符的ASCII码,遇到不同字符或’\0’时比较过程结束,此时,ASCII码值大的字符所在的字符串大。
    该函数会返回一个数值.

    • s1与s2相同:值为0
    • s1大于s2:值为正数
    • s1小于s2:值为负数
    2.3 大小写转换与字符长度

    strlwr(s):将大写转为小写
    strupr(s):将小写转为大写
    strlen(s): 求字符串的长度

    3.二维数组

    3.1 二维数组的定义

    语法:
    数据类型 数组名[表达式1][表达式2]:

    以下形式都是正确的定义:

    int a[3][5];
    int b[][3];
    
    • 1
    • 2
    3.2 二维数组的初始化
    3.2.1 按行初始化
    int a[2][3]={{1,2,3},{4,5,6}};
    int a[2][3]={{1,2,3},{4}}; //实际为1,2,3    4,0,0
    
    • 1
    • 2
    3.2.2 按列初始化
    int a[2][3]={1,2,3,4,5,6};
    int a[2][3]={1,2,3}; //实际为1,2,3    0,0,0
    
    • 1
    • 2
    3.2.3 省略行数的初始化
     int a[][4]={{1},{2,3}}; //实际为1,0,0,0    2,3,0,0
     int a[][3]={1,2,3,4,5,6,7} //实际为1,2,3   4,5,6   7,0,0
    
    • 1
    • 2

    4.相关应用案例

    4.1 输出斐波那契序列

    Fibonacci数列的前20项存储于一维数组,并输出

    #include
    #define N 20
    void main(){
        long int fib[N];
        int i;
        fib[0] = fib[1] = 1;
        for(i = 2; i < N; i++){
            fib[i] = fib[i - 1] + fib[i - 2];
        }
        for(i = 0; i < N; i++){
            printf("%-10ld", fib[i]);
            if ((i + 1) % 5 == 0) printf("\n");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    4.2 字符串拼接
    #include
    #include
    void main(){
        char s1[20] = "include", s2[10] = "stdio", s3[5] = "hi";
        printf(" The origin s1: %s\n", s1);
        printf(" The origin s2: %s\n", s2);
        printf(" The origin s3: %s\n", s3);
        printf(" The s2 and s3 : %s\n", strcat(s2, s3));
        // 进行拷贝
        strcpy(s1, s3);
        printf(" The s1: %s\n", s1);
        printf(" The s2: %s\n", s2);
        printf(" The s3: %s\n", s3);
        for (int i = 0; i < 20; i++){
            printf("%c ", s1[i]);
            if (i == 19) printf("\n");
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    4.3 杨辉三角

    打印出杨辉三角,如下图所示
    4.3

    实现完整C代码如下:

    #include
    # define N 6
    void main(){
        int yh[N][N], i, j;
        for (i = 0; i < N; i++){
            yh[i][0] = 1; 
            yh[i][i] = 1;
        };
        for (i = 2; i < N; i++){
            for (j = 1; j < i ; j++){
                yh[i][j] = yh[i - 1][j - 1] + yh[i - 1][j];
            }
        }
        for (i = 0; i < N; i++){
            for (j = 0; j <= i; j++){
                printf("%5d", yh[i][j]);
            }
            printf("\n");
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
  • 相关阅读:
    python爬虫之protobuf协议介绍
    数据库以及数据库常用概念、ER模型相关概念
    JZ69 跳台阶 JZ71 跳台阶扩展问题 JZ10 斐波那契数列
    四、分类算法 - 朴素贝叶斯算法
    微服务架构 | 架构演进
    一篇搞懂BFC
    [java]java读取excel
    GreenPlum的学习心得和知识总结(二)|打造Greenplum数据库内核开发环境
    setViaGenMode
    JVM学习六:类加载机制
  • 原文地址:https://blog.csdn.net/qq_41780234/article/details/126817134