• C语言博客作业04--数组


    0.展示PTA总分

    1.本章学习总结

    1.1 学习内容总结

    1.1.1 数组中查找数据:顺序查找和二分查找,

    • 如果数组的顺序是从小到大或者从大到小用二分查找更为方便。
    • 如果数组的顺序杂乱,用顺序查找更为妥当。

    1.1.2 数组中插入数据:

    • 如果是在杂乱的数组中插入一个数据到特定的位置,例如数组a[]中有20个元素,现将一个数x(已知数)插入到某个下标k(1~19)则可以
              a[i+1]=a[i];
          a[k]=x;````将下标k及k之后的数往后移一个位置,再将x赋值给a[K]。
      
    • 如果是在按一定排列的顺序的数组中插入一个数并排列好,例如数组a[]中有20个元素,现要将x插入,则可以:
              if(x<a[i])
                  a[i+1]=a[i];
              else
                   a[i+1]=x;````(数组a[]从小到大排序)将比x大的往后移就可以达到插入并排序的目的。
      
      

    1.1.3数组中如何删除数据:

    • 第一种方法:将要删除的数据往后移并将数组的长度减小。如图

    上图的代码就是将要删除的数往后移,这样能导致前面的n-k个数为没被删除的数而输出。

    • 第二种方法:用后面的来覆盖前面的

    将要删除的第k个数用它后面的数来覆盖。

    1.1.4数组中目前学到排序方法:

    • 冒泡排序法:对相邻的两个数进行比较并将大的数转移到前面,重复多次(具体凭感觉,没感觉的多测试几次找到规律)
    • 选择排序法:让k=i并将a[k]与i之后的元素进行比较,比a[k]大则交换。

    1.1.5数组做枚举用法案例:

    • 如c07中的7-11 求整数序列中出现次数最多的数,将用户输入的数与之前的数进行比较并存入另一个数组,若遇见重复的数则让零一数组的值累加,并比较出最多的数输出。

    1.1.6哈希数组的用法:

    • 如c07中的7-5有重复数据,将每个数与之后的数比较,如果有相等,就代表有重复的数据。

    1.2本章学习体会:

    1.2.1学习感受:

    • 本章的学习,让我学到了一个存储变量的变量,让我之前每次只能定义一个变量,怎么能过存多个变量的疑惑得到了解决。

    1.2.2本章的代码量:

    • 共957行,还不够努力。。。

    2.PTA作业:

    2.1c07一维数组 7-9调查电视节目受欢迎程度:

    2.1.1伪代码:

    #define N 9 宏定义N=9
    static int a[N]; 定义一个含有九个数整型数组,并初始化为0
    int i; 定义一个整型变量i,作为循环变量
    int n; 定义一个整型变量n,用来存储调查的人数
    int num; 定义一个整型变量num,用来存储用户的投票
    从键盘抓取调查人数n
    for
    抓取用户的投票num;
    对应的num下标的a数组+1;
    end for
    for
    输出节目1-8和1-8的投票情况
    end for

    2.1.2代码截图:

    2.1.3造测试数据:

    调查人数 投票情况 运行结果
    10人 如题目 答案正确
    10人 全部投1号 答案正确

    2.1.3PTA提交列表及说明:

    • 部分正确:刚开始我用的是另一种代码,因为做这题时我们是把二维数组教完了,我看着输出的样例就用了二维数组,所以出现了一些错误,当时找不到错误。
    • 答案正确:然后就改为用一维数组的再做了一遍,就没出现这种错误了。

    2.2c0二维数组 7-7螺旋方阵:

    2.1.1伪代码:

    int a[N][N];定义一个二维数组
    int n;定义一个整型n用于获取用户输入的方阵的长宽
    int i=0;定义一个i用于循环
    int j=0;定义一个j用于循环
    int flag=0;定义一个flag用于判断累加输出的方向
    int count=1;定义一个count用于判断累加输出的方向
    从键盘抓取n
    while
    if判断是否加到了n*n
    for循环累加
    if循环再次判断
    for循环累加
    if循环再次判断
    for循环累加
    if循环再次判断
    for循环累加
    flag累加使for循环的累加规则改变
    if循环判断是否退出while循环
    for循环输出
    end for

    2.2.2代码截图:

    2.2.3造测试数据:

    行数 运行结果
    1行 答案正确
    5行 答案正确
    10行 答案正确

    2.2.4PTA提交列表及说明:

    • 虽然我提交列表是一遍过,但我是在VS上测试修改直到最后运行的结果和答案一样才在PTA上提交。
    • 选这题是因为我想要告诉自己在VS上运行调试的好处,在VS上运行好的可能在PTA上就可以一遍过。

    2.3c09 7-7 jmu-c-大数加法:

    2.3.1伪代码:

    int i;循环变量i
    int j;循环变量j
    int k;循环变量k
    int sum;定义变量sum用于计算每一位的和
    int answer[1001];定义数组answer用于储存和
    char num1[1001];定义字符数组num1用于存储输入第一个数
    char num2[1001];定义字符数组num2用于存储输入第二个数
    while循环获取num1
    end while
    while循环获取num2
    end while
    用''取代num1,num2中的最后一个' '
    for循环计算并储存在answer
    if判断是否有一个数组小于另一个
    将大的数组存储进answer
    输出answer数组代表答案

    2.3.2代码截图:



    2.3.3造测试数据

    输入数据 输出答案 运行结果
    如题目 如题目 答案正确
    第一个数组小 答案正确 答案正确
    第二个数组小 答案正确 答案正确

    2.3.4PTA提交列表及说明:

    • 1.2.答案错误:我将结果存储在其中一个数组中,发现数组过小,导致少输出了第一个1
    • 2.3.4.5.6.部分正确:我交给数组扩大,将题目的输入数据达成了,但没达到另外两个测试点,还多次修改。
    • 7.答案错误:我另造了一个数组,但出现了没有存储的数。
    • 8.9.部分正确:经修改,题目的实现了,但还是没有实现另外两个测试点。
    • 10.答案正确:加入了if判断有无数组小后答对了题目。

    3.阅读代码:

    代码来源:朱振豪同学pta作业c07一维数组7-6数组元素的删除

    小朱同学用了覆盖的方法,将要删除的第i个数组元素用i之后的元素将之覆盖,然后输出n-k个数(n表示数组原有的元素,k表示要删除的数)
    这题他用到了宏定义N=100,这点值得学习,使用简单宏定义可用宏代替一个在程序中经常使用的常量,这样在将该常量改变时,不用对整个程序进行修改,只修改宏定义的字符串即可,而且当常量比较长时, 我们可以用较短的有意义的标识符来写程序,这样更方便一些。使用带参数的宏定义可完成函数调用的功能,又能减少系统开销,提高运行效率。
    相比于我的代码,小朱同学的代码更加简便,可读性更高

  • 相关阅读:
    竞赛题解
    学习笔记
    竞赛题解
    学习笔记
    竞赛题解
    竞赛题解
    竞赛题解
    「链接」原博客链接
    「杂录」THUWC 2020 游记
    「杂录」CSP-S 2019 爆炸记&题解
  • 原文地址:https://www.cnblogs.com/ye736660997/p/11845984.html
Copyright © 2020-2023  润新知