• 七天学会C语言-第四天(数组)


    在这里插入图片描述

    1. 定义一维数组

    在C语言中,一维数组是具有相同数据类型的元素的有序集合。定义一维数组的基本语法如下:

    data_type array_name[array_size];
    
    • 1

    其中:

    • data_type 是数组元素的数据类型,可以是整数、浮点数、字符等。
    • array_name 是数组的名称,你可以自定义。
    • array_size 是数组的大小,指定了数组可以容纳的元素数量。

    例 1:对 10 个数组元素依次赋值为0、1、2、3、4、5、6、7、8、9并按倒序输出。

    #include 
    
    int main() {
        int i;
        int a[10];  // 定义一个包含10个整数的数组
    
        // 使用循环为数组元素赋值
        for (i = 0; i < 10; i++) {
            a[i] = i; // 数组的每个元素赋值为它的索引
        }
    
        // 倒序输出数组元素
        for (i = 9; i >= 0; i--) {
            printf("%d\t", a[i]); // 输出数组元素的值
        }
        printf("\n");
    
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    运行结果:

    在这里插入图片描述

    例 2:输入 10 个地区的面积(面积为整数),对它们由小到大排序并输出排序后的结果。

    用两种不同的排序算法,一种是选择排序,另一种是冒泡排序。

    选择法(选择排序):

    #include
    
    int main()
    {
        int a[10];
        int i, j, t;
    
        // 输入10个面积值
        printf("请输入10个面积:\n");
        for (i = 0; i < 10; i++)
            scanf("%d", &a[i]);
    
        // 选择排序算法
        for (i = 0; i < 9; i++) {
            for (j = i + 1; j < 10; j++) {
                if (a[i] > a[j]) {
                    // 交换元素
                    t = a[i];
                    a[i] = a[j];
                    a[j] = t;
                }
            }
        }
    
        // 输出排序后的面积值
        printf("排序后的面积依次是:\n");
        for (i = 0; i < 10; i++)
            printf("%d\t", a[i]);
        printf("\n");
    
        return 0;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    运行结果:

    在这里插入图片描述

    冒泡法(沉底法、冒泡排序):

    #include
    
    int main()
    {
        int a[10];
        int i, j, t;
    
        // 输入10个面积值
        printf("请输入10个面积:\n");
        for (i = 0; i < 10; i++)
            scanf("%d", &a[i]);
    
        // 冒泡排序算法
        for (j = 0; j < 9; j++) {
            for (i = 0; i < 9 - j; i++) {
                if (a[i] > a[i + 1]) {
                    // 交换元素
                    t = a[i];
                    a[i] = a[i + 1];
                    a[i + 1] = t;
                }
            }
        }
    
        // 输出排序后的面积值
        printf("排序后的面积依次是:\n");
        for (i = 0; i < 10; i++)
            printf("%d\t", a[i]);
        printf("\n");
    
        return 0;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    运行结果:

    在这里插入图片描述

    选择排序的原理是从未排序部分找到最小值,然后与未排序部分的第一个元素交换,然后将未排序部分缩小,继续这个过程,直到整个数组排序完成。而冒泡排序的原理是比较相邻的元素,如果顺序不对则交换它们,这个过程一直重复,直到整个数组排序完成。

    两者的核心思想不同,选择排序每轮只选择一个最小值,而冒泡排序每轮都可能有多次交换操作。这两种算法都可以正确地对输入的面积值进行排序,但选择排序在每轮中只交换一次元素,而冒泡排序可能在每轮中交换多次元素。

    2. 定义二维数组

    与一维数组类似,二维数组是一个具有两个维度的数组。它通常用于表示矩阵或表格数据。定义二维数组的语法如下:

    data_type array_name[row_size][column_size];
    
    • 1

    其中:

    • data_type 是数组元素的数据类型,同样可以是整数、浮点数、字符等。
    • array_name 是数组的名称。
    • row_sizecolumn_size 分别表示二维数组的行数和列数。

    例如,定义一个3x3的整数二维数组:

    int matrix[3][3];
    
    • 1

    例1:将一个二维数组在这里插入图片描述
    的行列元素互换,存到另一个二维数组 b 中并输出。

    #include 
    
    int main() {
        int a[2][3] = {{1, 2, 3}, {4, 5, 6}};
        int b[3][2];
        int i, j;
    
        // 使用循环将数组a转置为数组b
        for (i = 0; i <= 1; i++) {
            for (j = 0; j <= 2; j++) {
                b[j][i] = a[i][j];
            }
        }
    
        // 输出数组b
        printf("数组 b 为:\n");
        for (j = 0; j <= 2; j++) {
            for (i = 0; i <= 1; i++) {
                printf("%d\t", b[j][i]);
            }
            printf("\n");
        }
    
        return 0;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    运行结果:

    在这里插入图片描述

    例 2:已知矩阵在这里插入图片描述
    ,请编程求出其中值最大的那个元素。

    #include 
    
    int main() {
        int i, j, max;
        int a[3][3] = {{1, 2, 3}, {9, 8, 7}, {-10, 10, -5}};
    
        // 假设最大值为数组的第一个元素
        max = a[0][0];
    
        // 使用嵌套循环遍历数组,找到最大值
        for (i = 0; i <= 2; i++) {
            for (j = 0; j <= 2; j++) {
                if (a[i][j] > max) {
                    max = a[i][j];
                }
            }
        }
    
        // 输出最大值
        printf("最大元素的值为 %d\n", max);
    
        return 0;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    运行结果:

    在这里插入图片描述

    3. 定义字符数组

    字符数组是一种特殊的数组,用于存储字符串。字符串是字符的序列,以空字符 '\0' 结尾。定义字符数组的方式如下:

    char string_name[length];
    
    • 1

    其中:

    • char 表示字符数组的元素类型。
    • string_name 是字符数组的名称。
    • length 是字符数组的长度,包括字符串末尾的空字符 '\0'

    例如,定义一个存储名字的字符数组:

    char name[20];
    
    • 1

    例1:定义一个存储名字的字符数组

    #include 
    
    int main() {
        // 声明并初始化一个字符数组来存储名字
        char name[20]; // 假设名字最多包含19个字符,留一个位置给空字符 '\0'
    
        // 输入名字
        printf("请输入你的名字: ");
        scanf("%19s", name); // 限制输入的字符数不超过19个,并自动在末尾添加 '\0'
    
        // 打印名字
        printf("你好,%s!\n", name);
    
        return 0;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    运行结果:

    在这里插入图片描述

    4. 输出字符数组

    要输出字符数组,你可以使用C语言的标准库函数 printf()。以下是一个示例:

    char name[] = "John";
    printf("Name: %s\n", name);
    
    • 1
    • 2

    这将输出:Name: John

    例1:定义一个字符串“Hi,Everybody!!”,然后输出这个字符串。

    #include
    
    int main() {
        char c[15] = {'H', 'i', ',', ' ', 'E', 'v', 'e', 'r', 'y', 'b', 'o', 'd', 'y', '!', '!'};
    
        int i;
        for (i = 0; c[i] != '\0'; i++) {
            printf("%c", c[i]);
        }
    
        printf("\n");
        return 0;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    运行结果:

    在这里插入图片描述

    例2:输出一个在这里插入图片描述
    图案

    #include
    
    int main() {
        char c[3][3] = {{' ', '*', ' '}, {'*', ' ', '*'}, {' ', '*', ' '}};
    
        int i, j;
        for (i = 0; i <= 2; i++) {
            for (j = 0; j <= 2; j++) {
                printf("%c", c[i][j]);
            }
            printf("\n");
        }
    
        return 0;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    运行结果:

    在这里插入图片描述

    5. 输入字符数组

    要从用户那里接收输入并存储到字符数组中,可以使用标准库函数 scanf()gets()。以下是一个示例:

    使用 scanf()

    char name[20];
    printf("Enter your name: ");
    scanf("%s", name);
    
    • 1
    • 2
    • 3

    使用 gets()(注意:不建议使用,因为它存在安全问题):

    char name[20];
    printf("Enter your name: ");
    gets(name);
    
    • 1
    • 2
    • 3

    例1:输入一行由空格和单词组成的字符(字符数在 80 以内), 请统计有多少个单词。

    #include 
    #include 
    #include 
    
    int main() {
        char input[80]; // 声明一个字符数组来存储输入
        int wordCount = 0; // 用于统计单词数量
        bool inWord = false; // 用于标记是否在单词中
    
        // 提示用户输入字符数组
        printf("请输入一行由空格和单词组成的字符 (最多80个字符):\n");
    
        // 使用fgets函数获取用户输入
        fgets(input, sizeof(input), stdin);
    
        // 去掉输入中的换行符
        size_t len = strlen(input);
        if (len > 0 && input[len - 1] == '\n') {
            input[len - 1] = '\0';
        }
    
        // 遍历输入的字符数组来统计单词数量
        for (int i = 0; i < len; i++) {
            if (input[i] == ' ' || input[i] == '\t') {
                // 遇到空格或制表符,标记不在单词中
                inWord = false;
            } else {
                if (!inWord) {
                    // 进入新单词,增加单词数量
                    wordCount++;
                    inWord = true;
                }
            }
        }
    
        // 输出统计结果
        printf("输入的字符包含 %d 个单词。\n", wordCount);
    
        return 0;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41

    运行结果:

    在这里插入图片描述

  • 相关阅读:
    一致性哈希算法
    代码随想录算法训练营19期第44天
    亚马逊云科技:让生成式AI真正走向普惠
    【进程复制】
    VR博物馆:让博物馆传播转化为品牌影响力
    tomcat启动,测试被拒绝连接
    C/C++大学课程信息系统
    ubuntu修改apt源为阿里源
    JMeter类比loadrunner断言、参数化、集合点、关联、事务——学习笔记
    妈妈再也不用担心我搞不懂——log4j/logback/log4j2原理了
  • 原文地址:https://blog.csdn.net/m0_53918860/article/details/133045213