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

    0.展示PTA总分(0----2)

    1.本章学习总结(2分)

    1.1 学习内容总结

    • 数组中如何查找数据?

    1. 通过循环对数组中的元素逐个取值,并与参考值(要查询的值)做比对,并处理结果。
    2. 通过二分法对有序数组进行处理,从而查找数据。
    • 数组中如何插入数据?

    1. 以升序数组为例,找到数据需要插入的位置,将此位置之后的数据往右移动一格,最后将数据输入到需要插入的位置。
    2. 伪代码
    for i=0 to 数组最大下标 do
            if 插入数大于数组元素 then
                退出循环
            end if
    end for
    for j=数组最大下标 to i+1 do
            后一个数等于前一个数
    end for
        在插入位置放入插入数
    
    • 数组中如何删除数据?

    1. 删除某个位置的数。
    for i=0 to 数组最大下标 do
          if i大于或等于x-1  then
              前一个数等于后一个数
          end if
    end for
    
    1. 删除某数。
    for i=0 to 数组最大下标 do
           if a[i]等于x then
              记住x的下标为t
           end if
    end for
    for i=t to 数组最大下标 do
            前一个数等于后一个数
    end for
    
    1. 删除数组中的重复数据。
    for i=0 to 数组最大下标 do
        for j=i+1 to 数组最大下标 do
             if a[i]等于a[j] then 
                 前一个数等于后一个数
             end if
        end for
    end for 
    
    • 数组中目前学到排序方法

    1. 选择排序法: 相邻元素两两比较,每趟将最值沉底即可确定一个数在结果的位置,确定元素位置的顺序是从后往前,其余元素可能作相对位置的调整。可以进行升序或降序排序。

    2.冒泡排序法: 每趟是选出一个最值确定其在结果序列中的位置,确定元素的位置是从前往后,而每趟最多进行一次交换,其余元素的相对位置不变。可进行降序排序或升序排序。

    • 数组做枚举用法的案例

    1. 找鞍点
    2. c07- 7-5有重复的数据.
    3. c07- 7-11 求整数序列中出现次数最多的数
    • 哈希数组用法

    c07- 7-5有重复的数据.
    在这一道题中的用法:首先定义一个hash静态数组,用输入数组a[i]作为hash数组的下标。然后判断hash[a[i]]为0或1,若是0则hash[a[i]]==1,若是1,则肯定数组中有重复数。

    1.2 本章学习体会

    • 在这两周的学习过程中,我尽管挺努力听课的。但是在写pta的话,我还是很慢。总是一题写好久,难一点得,一个小时。 自己是觉得最好能够上课好好听课。
      争取在课堂上重复记忆关键知识点,才不会上完一节课,感觉自己脑袋空空。
    • 代码量

    2.PTA实验作业(7分)

    2.1 7-8 二分查找法

    2.1.1 伪代码

    定义key储存要查找的正整数
    定义a[N]储存数据
    定义left作为二分法的左边界
    定义right作为二分法的右边界
    定义mid来判断key是否在数组中
    定义flag作为命令标识符
    
    输入要查找的正整数
    while left小于右边 then
      mid = (left + right)
    
      if a[mid]等于key then
          flag等于1
          退出循环
      end if
    
      else if a[mid]小于等于key then
      left 等于 mid +1
      end if
    
      else
      right等于mid
      end if
    end while
    
    if flag等于1
       输出查找数所在的下标
    end if
    
    else
    输出not found
    end if 
    

    2.1.2 代码截图


    2.1.3 造测试数据

    2.1.4 PTA提交列表及说明

    部分正确:将while 里的条件写成left<right,只要改成left>right.
    部分正确:左右边界没有定义好,导致总是一个对,一个错。(剩下几个都一样)

    2.2 7-1 判断E-mail地址是否合法

    定义str[N]储存数据
    借用头文件#include<ctype.h>中的isalpha和isdigit函数来判断字符为字母或数字数据,用JudgeAddress函数进行封装。
    
    输入字符串
    if JudgeAddress(str)等于1 then
       输出YES
    else
       输出NO
    end if
    
    定义JudgeAddress(char str[])
    for i=0 to str[i] && str[i] != '
    ' do
        if  字符为字母或数字或_ then
        else if 字符为'@' then
           if 此字符前后的字符为数字或字母 then
              返回0
           end if
        else if 字符为'.' then 
            if 此字符后3个字符依次为com且第4个字符为'
    ',''. then 
            返回 0
            end if
        else 
            返回 0
        end if
    end for
     返回 1
    
    

    2.2.2 代码截图


    2.2.3 造测试数据

    2.2.4 PTA提交列表及说明

    段错误 : 数组越界
    编译错误:从VS复制到pta 少复制了#
    部分正确:思路错误了,把‘@前后只能是字母或者数字’理解成前后都要是,而不是理解成只要@前后2个是,就可以了。
    理解完题目之后,重新写题就可以了

    2.3 7-5 找鞍点

    2.3.1 数据处理

    定义a[N][N]储存数据
    定义flag作为命令标识符
    定义maxr,maxc作为找鞍点的行列下标
    
    输入n
    for i=0 to n-1 do
       for j=0 to n-1 do
          将字符输入a数组
       end for
    end for
    
    for i=0 to n-1 do
    
        for j=0 to n-1 do
            if 本行的数小于本行下一个数 then
               maxr,maxc等于较大数的行列标
            end if
        end for
     end for
    
     flag = 1
    
     for k=0 to n-1 do
       if  a[maxr][maxc] > a[k][maxc then
           flag=0
       end if
    
     if flag等于1 then
      输出 鞍点位置
      退出循环
     end if
     重置maxr和maxc
    end for
    if flag等于0 then
      输出NONE
    
    

    2.3.2 代码截图


    2.3.3 造测试数据

    2.3.4 PTA提交列表及说明

    部分正确:flag未重置,导致无论输入什么,只会出一个答案。
    部分正确:有并列极值时无法移动到下一个极值的位置,只要将a[i][maxc]<a[i][j]改成a[i][maxc]<= a[i][j]。

    3.阅读代码(-2--1分)

    题目:


    代码:



    • 我仔细地读完这代码,感觉对数组与指针理解更深一点。通过使用指针会比不使用指针更方便,因为可以直接调用地址,如需要调用单元中地内容,只要加上* 指针名。 当然这代代码借助struct 结构体语句用来定义一系列具有不同类型的数据构成的数据集合,更加便捷。
    • 除此之外, 也让我学到了namespace是指标识符的各种可见范围。命名空间用关键字namespace 来定义。命名空间是C++的一种机制,用来把单个标识符下的大量有逻辑联系的程序实体组合到一起。此标识符作为此组群的名字。
  • 相关阅读:
    git init 后关联github仓库是发生错误:
    node mysql模块写入中文字符时的乱码问题
    Error: ER_BAD_FIELD_ERROR: Unknown column 'xxx' in 'where clause'
    安装MariaDB
    yum命令无效
    文档管理系统介绍
    RichTextBox文字处理控件属性介绍
    Android调用相册拍照控件实现系统控件缩放切割图片
    苹果5S指纹扫描识别传感器Touch ID有利于iPhone的安全性
    在服务器端将XML转换成HTML
  • 原文地址:https://www.cnblogs.com/15980807959zjl/p/11877870.html
Copyright © 2011-2022 走看看