泷泷。。  

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] != '\n' do
    if  字符为字母或数字或_ then
    else if 字符为'@' then
       if 此字符前后的字符为数字或字母 then
          返回0
       end if
    else if 字符为'.' then 
        if 此字符后3个字符依次为com且第4个字符为'\n','\0'. 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++的一种机制,用来把单个标识符下的大量有逻辑联系的程序实体组合到一起。此标识符作为此组群的名字。
posted on 2019-11-17 20:21  泷泷。。  阅读(177)  评论(0编辑  收藏  举报