zoukankan      html  css  js  c++  java
  • C语言博客作业04--数组

    0.展示PTA总分

    一维数组:

    二维数组:

    字符数组:

    1.本章学习总结

    1.1 学习内容总结

    1、关于数组中如何查找数据
    ·一维数组中:
    利用一次循环进行查找,若数组中数值为我们所要查找内容,记下行标列标后break结束循环。
    具体代码如下:

    ·二维数组中:
    利用嵌套循环,对数组进行扫描直到我们查找到我们所需要的内容,其做法与一维数组大致相同,也需记下所要行标列标。
    具体代码如下:

    2、关于数组中如何插入数据
    ·方法1:
    先把所需要插入的数据与数组进行比较,判断所要插入的位置,再将后面的数组进行往后移的操作。最后,将数值插入数组中。
    具体代码如下:

    ·方法2:
    将数据放于数组的最后面,再利用排序法整理数组。
    具体代码如下:

    注:这类型的数组必须为有序数列,这样才能对位置进行判断。
    3、关于数组中如何删除数据
    ·一维数组
    在输入所需要删除元素的下标,读取到下标后利用循环直接将后面的数据对这一元素进行覆盖,从而形成一个完整数组。
    具体代码如下:

    ·二维数组
    关于删除重复字符这一题

    4、排序方法
    (1)选择排序法
    若我们现在要进行的是一个从小到大的排序
    具体思路:
    扫描数组,从第一个数开始与后面的数进行比较,后面的数据比它小就进行交换。然后第二个数,第三个...都与后面数据进行比较直到结束。
    其主要流程图如下:

    伪代码:

    (2)冒泡排序法
    若我们现在要进行的是一个从小到大的排序
    具体思路:对相邻的两个数值进行比较,进行n趟比较。在嵌套循环中的内循环中,每一次比较都可以把该次比较的最大值放于最后。
    我们来看看2 3 5 1 6 4这组数据的变化过程:

    具体代码如下:

    关于选择排序和冒泡排序:
    ·两者都使用了嵌套循环
    ·两个方法的思维方式是不同的。单单看代码要进行区分的话可以从嵌套循环中区分,选择排序法中在内循环中j是从i+1开始的,而冒泡循环中内循环是从j=0开始的。选择排序中的外循环代表的是第几个数与后面数值比较,而冒泡排序是指比较n趟。
    5、数组做枚举用法
    这让我想到了电视节目受欢迎程度这道题目。
    具体代码如下:

    巧妙地将电视台节目序号作为数组下标,有人投这个节目,那么他的数值就+1,就这样循环唱票结束后。我们就能得到所有节目所得到的票数。巧妙地将时间换空间解决了这道题目。
    6、哈希数组用法
    ·通过超星平台上的视频我了解了关于hash[]数组的用法。下面就是利用hash[]解决问题的一道题目:

    具体代码如下:

    我们通过设置一个hash[]数组并且将其初始化为0,接着对原数组进行扫描,将数值作为hash数组的下标。扫描到该数据就将该数据下标的hash数组赋值为1,当有重复数据我们已经将该hash数组赋值为1了,这就说明了有重复,所以返回1输出YES。

    1.2 本章学习体会

    学习体会
    感觉数组所要学习的内容较多也都较为重要。感觉数组跟循环一样,思路较不清晰就容易乱...我就很容易思路中断或者突然乱掉,逻辑思维能力又很差。害...所以我做题目有些吃力。记得高三那时候很爱说的一句话:守得云开见月明。我也很喜欢这句话,我会冲破云雾的桎梏而终得月明。一维,二维,字符这主要的三大部分呢,我个人觉得字符数组较有难度,关于一些fgets()等输入我也并不能很熟练的掌握。而且我也需要多读读别人的优秀代码,每次自己写起来就十分冗长麻烦,看得又不清晰...总之,继续加油啊。
    代码量:
    一维数组:388
    二维数组:331
    字符数组:337
    总计:1056

    2.PTA实验作业

    2.1 判断上三角矩阵

    2.1.1 数据处理

    ·k:用于判断趟数
    ·n:表示为n×n的矩阵
    ·i,j:表示数值的行列标
    ·flag:引入flag进行判断
    伪代码:

    2.1.2 代码截图

    2.1.3 造测试数据

    输入数据 输出数据 说明
    正常数据
    只有一个0
    全为0

    2.1.4 PTA提交列表及说明


    ·部分正确:写完代码,提交pta我并不是很能理解pta上的最后一个测试点:

    这是我初步代码的部分截图:

    后来我认为可能是n=0或n=1的情况,于是我加入了下列语句

    结果可以看得出他十分的冗长麻烦,但还是过不了测试点,emmmmm...之后我拿着我的代码去询问林丽老师。

    之后我看了我舍友的代码,我没有很用心的去了解上三角矩阵的特性。只要使i>j就可以说明数值处于下三角,判断是否为0就可以说明是否为上三角矩阵。真的是比我原来的简便太多。
    后来终于答案正确了...也说明确实阅读别人好的代码很重要。

    2.2 删除重复字符

    2.2.1 数据处理

    a[]:定义字符串数组
    op:定义op用于数组交换
    len:用于储存数组长度
    flag:引入flag进行判断
    伪代码:

    2.2.2 代码截图

    2.2.3 造测试数据

    输入数据 输出数据 说明
    ad2f3adjfeainzzzv 23adefijnvz 正常数据
    ad2f3adj fea in zzzv 23adefijnvz 字符中含有空格

    2.2.4 PTA提交列表及说明


    部分正确:刚开始我的思路是把相同的字符变为‘ ’,然后不输出空格输出其他就行了。但是如果遇到中间有空格就行不通这个思路就错啦
    格式错误:我用了fgets()方法进行输入,但是它会吸收换行符,所以就格式错误啦。
    答案正确:后来我就改成了VS并不支持的gets(),然后就对了。

    2.3 求矩阵中的最大小值

    2.3.1 数据处理

    变量:
    ·a[][]:定义一个二维数组
    ·i,j:i代表行标 j代表列标
    ·max,min:定义最大值最小值
    ·row1,col2:最大值的下标
    ·row2,col2:最小值的下标
    伪代码:

    2.3.2 代码截图

    2.3.3 造测试数据

    输入数据 输出数据 说明
    正常数据
    正常数据

    2.3.4 PTA提交列表及说明

    答案错误:
    ·首先我的代码是这样的:

    我觉得非常奇怪,因为我在VS上测试有着和pta上一模一样的输出样例。
    ·后来林丽老师说是用ACM的测试点需要加上while ((scanf("%d %d", &n, &m))==2),这条语句呢主要是想表达输入的数据是为两个整数
    ·再后来,他还是显示错误,我询问舍友,发现他们的做法是将行和列分开表示。思路确实不容易混乱,但是再看我的代码,我感觉没什么问题
    ·最后,拿去询问林丽老师,终于找出来答案,在关于题目的
    标识中,我思考有误,我先扫描了行,但是题目要求的是先扫描列。所以,最终就正确了。
    ·在过程中我们也可以发现是无法跳出循环的,这就关于其中的while语句了,我们只需要输入两个不是整数的字符就可以跳出循环了。

    3.阅读代码

    题目:

    输入输出样例:

    代码如下:

    ·可以看出这段代码其实大部分都在进行输入,36行13在进行数据的输入。
    ·他非常巧妙地利用了sign[]来输入“am”,如果时间是在下午,便利用<string.h>头文件中的strcpy()函数将sign[]里面的内容更换成“pm”,之后直接输出sign就可以啦。
    ·整段代码的思路十分清晰,将中午12时作为一个分界线,将上午和下午进行处理
    ·值得学习的是代码的简洁直接,可能换做我来写,又要写了一大堆。并且关于strcpy()函数的利用,让我对于新学习到的一个知识点有了更好的理解。我也更加明白了,新学习的内容需要去应用去实践才能真正掌握。

  • 相关阅读:
    Go入门笔记-14 EdgeX读取配置文件
    Go入门笔记-13 使用EdgeX日志输出
    Go入门笔记-12 输出unix时间戳
    Go入门笔记-11 Go 获取Linux系统CPU占用率
    htop使用
    Ubuntu子系统默认使用root登录
    函数参数传递数组
    c 'CRTSCTS' undeclared
    c 数组指针使用
    使用SD卡刷OpenWRT后,调整分区大小
  • 原文地址:https://www.cnblogs.com/lz0149/p/11837278.html
Copyright © 2011-2022 走看看