C语言第九天笔记

server/2024/10/11 7:33:26/

数组的概念

什 么是数组

数组是 相同类型, 有序数据的集合。

数 组的特征

数组中的数据被称为数组的 元素,是同构的

数组中的元素存放在内存空间里 (char player_name[6]:申请在内存中开辟6块连续的基于char类 型的变量空间)

衍生概念:

下标(索引)

下标或索引代表了数组中元素距离第一个元素的偏移位置。

数组中元素的地址值,下标越大,地址值越大。(每一块内存空间都有一个独有的内存地址)。

数组的下标是从0开始的

一维数组

数 1 组的定义

说明:

数组的 类型说明符由数组中的 元素来决定,也就是元素是什么类型,数组就是什么类型

数组名也是标识符, 我们所说的 数组(名),大家可以理解为 数据类型是数组的变量(名)。

数组容量也可以叫做常量表达式,举例: int ages[10]、int lcd[1024*768]

类型:代表了数组中元素的类型

容量:数组中能存储多少个元素,数组容量可以是一个常量、常量表达式,还可以是符号常量,但必 须是整型。

深入理解:

定义一个数组,相当于申请了一个可以容纳所指定元素数量的内存单元。所申请的内存单元是连续 的。

定义一个数组,相当于定义了多个匿名变量,这些变量可以通过

举例:

 // 定义一个数组

int arr[10];

// 问题:上面数组中,最小下标0,最大下标9 数组名[下标] 来标识。

经过上面的案例,分析得到

数组的最大下标 = 数组元素个数(数组容量) - 1

数 组元素的访问

原则:数组中的元素不能一次性访问所有元素,只能一个一个的访问。

访问方式:

数组名[下标];

举例:

注意:数组元素的访问一定不能越界。

案例:

数组的初始化

定义

数组的同时,用指定数据来给对应元素赋值。

简化数组定义后,需要对元素一一赋值操作。

语法规则:

类型 数组名[容量] = {常量1,常量2,常量3...};

注意事项:

数组可以部分初始化:也就是可以给数组中前几个元素初始化,未被初始化的元素系统将自动初始 化,如0;如果定义数组时未指定数据容量,则系统会根据初始化元素的个数来决定数组容量。

衍生概念:

柔性数组:柔性数组的概念是在C99标准,针对结构体的最后一个成员可以是一个未指定大小的数 组;

广义简单理解:数组容量待定或者待确定的数组,举例:int arr[] = {1,2,3,4,5}

面试题: 在不知道数组类型的情况下,如何确定数组元素的个数

 int length = sizeof(arr) / sizeof(arr[0]) int arr[] = {1,2,3,4,5}

说明:

一维数组案例

案例1:

数组的典型应用:

数据排序

冒泡排序

向后冒泡

思想:

1. 一次只排好一个数,针对n个数,最差情况需要 n-1次就可以排好

2. 每次排序将相邻数据两两比较,将较大或较小的数据向后交换,等所有数据都比较完成,将较 大/较小的数就会出现在最后,这也是该数应该有的位置。

3. 在余下的数中,再次应用第2步的操作,直到只剩下一个数。

向前冒泡

思想:

1. 一次只排好一个数,针对n个数,最差情况需要n-1次就可以排好

2. 每次排序假定第一个元素是最大/最小的,用第一个元素的后面的元素一一与第一个元素比较, 遇到较大/较小的和第一个元素交换,访问完数组的最后一个元素,就排好了一个数;

3. 在余下的数中,再次应用第2步的操作,直到只剩下一个数。

一维数组案例

案例2:

#include <stdio.h>
int main()
{
    int arr[11];
    int k,j,t;
    int length=sizeof(arr)/sizeof(int);
    printf("请输入11个数组:\n");
    for(k=0;k<length;k++)
    {
        scanf("%d",&arr[k]);
    }
    printf("\n");
    for(int i=0;i<length-1;i++)
    {
        for(int j=0;j<length-1-i;j++)
        {
            if(arr[j]>arr[j+1])
            {
                t=arr[j];
                arr[j]=arr[j+1];
                arr[j+1]=t;
            }
        }
    }
    printf("冒泡排序后的遍历数组:\n");
    for(k=0;k<length;k++)
    {
        printf("%4d",arr[k]);
    }
    printf("\n");
    return 0;
}

案例3:

章节作业

一维数组练习题

1. 键盘录入一组数列,利用冒泡排序将数据由大到小排序

2. 从键盘输入年、月、日,计算并输出该日是该年第几天

3. 键盘录入一组数列,求最大数、最小数、均值

4. 从键盘录入一组数列,判断是否是回文,举例:12321,abba,121

5. 用数组存储10个整型数,通过键盘输入一个数,找出该数在数组中的下标值;

6. 通过键盘输入 10 个学员成绩,

1)输出不及格学员的成绩和下标。

2)求最高分的下标值

3)求最低成绩的下标值

4)求总成绩及平均成绩

二维数组练习题

7. 一个二维数组赋了初值,用户输入一个数,在该二维数组中查找。找到则返回行列位置,没找到则 提示。

8. 二维整型数组,求所有元素平均值,求每行最大值,求每列最小值。

9. 在行列相等数组计算主对角线元素的和

10. 计算一个矩阵下三角元素的和

11. 电影院为了答谢影迷的支持,在某一排的某一列座位上放置了一个大礼包,放置礼物的位置具有这 样的规则(行和列的平方和为开店日期 512(5月12日)); 请设计程序找出大礼包的位置,(假定电影院有20排,每排25个座位)

字 符数组练习题

12. 编写一个程序,读取用户输入的字符串,并将其反转输出。

13. 编写一个程序,判断用户输入的字符串是否为回文(即正反读都一样的字符串)。

思 考题【选做】:

14. 求出一个矩阵的鞍点。鞍点的含义为行上最大同时列上也最大。


http://www.ppmy.cn/server/93528.html

相关文章

【c++】多线程

多线程可以解决什么问题&#xff0c;最重要的用途是什么&#xff1f; 多线程技术在现代软件开发中扮演着至关重要的角色&#xff0c;它可以解决多种问题并带来显著的好处。以下是多线程最重要的几个用途&#xff1a; 资源利用最大化: 多线程可以充分利用多核处理器的能力&…

实验21.实现 printf

已完成实验 已完成实验链接 简介 实验 21. 实现 printf 总结 简化系统调用和中断&#xff0c;用 eax 代表调用号参数&#xff0c;ebx,ecx,edx 来代表参数(syscall.c kernel.s) 添加 write 的系统调用接口(syscall.c, syscall-init.c, print.s) 注意&#xff1a;要更改 p…

注册中心--Eureka

&#x1f3a5; 个人主页&#xff1a;Dikz12&#x1f525;个人专栏&#xff1a;Spring Cloud实战&#x1f4d5;格言&#xff1a;吾愚多不敏&#xff0c;而愿加学欢迎大家&#x1f44d;点赞✍评论⭐收藏 目录 1.项目问题 2.解决URL问题 2.1解决思路 2.2注册中心 2.3 CAP理…

【个人亲试最新】WSL2中的Ubuntu 22.04安装Docker

文章目录 Wsl2中的Ubuntu22.04安装Docker报错解决完全卸载Docker参考博客 &#x1f60a;点此到文末惊喜↩︎ Wsl2中的Ubuntu22.04安装Docker 友情提示&#xff1a;确定为wsl2ubuntu22.04&#xff0c;若按照以下步骤失败&#xff0c;请完全卸载后重装docker&#xff0c;并检查ws…

jdk1.8中HashMap为什么不直接用红黑树

最开始使用链表的时候&#xff0c;空间占用比较少&#xff0c;而且由于链表短&#xff0c;所以查询时间也没有太大的问题。可是当链表越来越长&#xff0c;需要用红黑树的形式来保证查询的效率。 参考资料&#xff1a; https://blog.51cto.com/u_13294304/3075723

抖音短视频矩阵管理系统:短视频运营的得力助手

1. 抖音短视频矩阵管理系统介绍 随着短视频行业的迅速发展&#xff0c;越来越多的企业和自媒体人开始关注短视频运营。抖音作为国内最受欢迎的短视频平台之一&#xff0c;拥有庞大的用户群体和丰富的内容资源。为了更好地管理和运营短视频&#xff0c;抖音短视频矩阵管理系统应…

uniapp手写滚动选择器

文章目录 效果展示HTML/Template部分&#xff1a;JavaScript部分&#xff1a;CSS部分&#xff1a;完整代码 没有符合项目要求的选择器 就手写了一个 效果展示 实现一个时间选择器的功能&#xff0c;可以选择小时和分钟&#xff1a; HTML/Template部分&#xff1a; <picker…

【算法】动态规划-斐波那契数列模型

目录 1、第N个泰波那契数 1.1 算法原理讲解 1.1.1 状态表示 1.1.2 状态转移方程 1.1.3 初始化 1.1.4 填表顺序 1.1.5 返回值 1.2 代码实现 1.3 空间优化 2、三步问题 2.1 算法原理讲解 2.1.1 状态表示 2.1.2 状态转移方程 2.1.3 初始化 2.1.4 填表顺序 2.1.5 返…