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

    0.展示PTA总分

    1.本章学习总结

    1.1 学习内容总结

    • 数组中如何查找数据,有哪些做法
      1.首先,定义数组,并对数组元素进行赋值
      2.输入位置值,输出相应的元素值(先判断位置是否合法,不合法,则输出位置错误,请重新输入:位置合法,则把位置值转为数组下标,通过下标来确定数据,进行输出,如:第一个元素的下标为0,第二个为1等等
      3.输入一个数值,输出相应的下标循环遍历数组,检查数组中的各位数据是否与待查数值相等(如果相等,则提前结束循环:break;否则,继续循环,检查下一个数)
      4.遍历完所有数组元素后,结束循环循环结束后,检查循环变量值是否超过数组元素总数,如果未超过,表示找到了相应数据,输出其下标位置,否则,输出未找到相应元素。

    • 数组中如何插入数据,怎么做,可以写个伪代码或动态图展示方法
      1.输入一个数据x,将数组中的数据与x逐一比较,如果大于x,记录下数据的下标,然后此数据下标和其后的数据的下标都加一,相当于都向后挪一位,然后将x赋值给数组的那个下标;

      2.改段代码是从PTA题目上的一维数组来的,改题则就是简化的插入排序的题目
      这个就很好的理解这个插入数据的意思了。

    • 数组中如何删除数据,这个有多种做法.
      1.数组删除想到了如下:

      2.改段代码是从PTA上的题目集

    • 数组中目前学到排序方法,主要思路?
      1.冒泡排序法


    2.选择排序法


    • 数组做枚举用法,有哪些案例?
      枚举变量用法中是默认第一个变量的数值为0,之后的变量依次累加。所以枚举的方式可以表达数组的下标。
      二维数组的PTA还不太熟,就从一维数组看了一下.

    • 哈希数组用法,目前学过哪些案例,举例展示。
      哈希数组不太懂是什么,就从PTA找了一个,哈希数组没有怎么听到过.


    1.2 本章学习体会

    • 学习数组的时候,到现在也停留在一维数组的懵懂上面,在二维数组和字符数组还是很不熟悉,在昨天的PTA数组上机考试中,一维数组的题目都差不多有写,而二维数组的只是部分得分,在字符数组那里连思路都没有;本章学习的话,感觉数组还没有懂就已经进入到了指针的魔爪中,听老师说指针是C语言的灵魂,所以也是很紧张的。我感觉老师的上课方式是很好的,互动的时间不仅可以了解同学们的听课效率,还可以让那些走神的或者是没有跟上节奏的同学们迅速调整回来;老师知道我的上课效率比较低,就是下课后就不知道怎么做了,所以老师也经常提问我,这样能提高的自己的警惕性。所以关于数组就是要多刷代码,林老师说的就是没错,只有代码刷的够多,才能做对。

    • 计算这两周代码量,是否达到目标。

      从代码量上面看,字符数组的题目还没有深刻的进行理解,一维数组刚学的完,所以这周代码量目标没有达到,希望在下一周的时间补回来。

    2.PTA实验作业

    2.1 数组循环左移

    2.1.1 伪代码

    - 定义整形变量m,n,i,j;
    - 定义数组a[100];
    - 输入题目数值n m;
    - for(i的循环到i<n累加)
      { 
        输入a[i];
      }
    - for(i的循环到i<m累加)
      {
       定义temp为a[0];
       for(i的循环到i<n-1累加)
            a[j]=a[j+1];/*数组左移*/
            a[n-1]=temp;
       }
    - for (i = 0; i < n; i++)
       if (i)
    	printf(" ");
       printf("%d", a[i]);
    

    2.1.2 代码截图

    2.1.3 造测试数据

    2.1.4 PTA提交列表及说明


    1.格式错误
    这个格式错误,是因为答案的格式与测试数据的格式不同,主要原因就是空格的存在与否。
    解决方式:
    用VS测试了好几次,看着都对,可是就是弄不出来,后来就加了这个,以来防止最后一个也打出空格。
    2.格式错误
    这个题目主要是格式的问题,难度不是很大,在VS上面直接调试到成功。


    2.2二维数组每列排序

    2.2.1伪代码

    - 定义二维数组a[4][5],i,j,temp,k;
    - 进行两重循环输出a[i][j];
    - for (i = 0; i < 5; i++)
          for (k = 0; k < 3; k++)
               for (j = 0; j < 3 - k; j++)
                    if(前面的数比后面的大)
                      { 
                           就将两个数进行交换;
                       }
    - 最后运用双重循环将a[i][j]输出
    - 最后得到结果
    

    2.2.2 代码截图

    2.2.3 造测试数据

    2.2.4 PTA提交列表及说明

    • 格式错误,这个错误一直都是很小的错误,就是刚开始在VS做的时候看就对了,但是忘了把数字前面的三个空格加进去.
      改正:后来直接用%4d的方法写就可以了.
    • 这个题目林老师在PTA上机课上有讲过了,所以错误比较少.

    2.3 查电视节目受欢迎程度

    2.3.1伪代码

     - 定义n;以及数组a,定义i,j;
     - 并且定义并初始化n1到n9值为0;
     - 输入n;
     - for (i = 0; i < n; i++)
        每次循环都输入一次a[i];
         switch(a[i])
          { 
            case 1:
    		n1++; break;
    	case 2:
    	        n2++; break;
            case 3:
    		n3++; break;
            case 4:
    		n4++; break;
    	case 5:
    		n5++; break;
    	case 6:
    		n6++; break;
    	case 7:
    		n7++; break;
    	case 8:
    		n8++; break;
             }
     - 最后输出:
            printf("   1%4d
    ", n1);
    	printf("   2%4d
    ", n2);
    	printf("   3%4d
    ", n3);
    	printf("   4%4d
    ", n4);
    	printf("   5%4d
    ", n5);
    	printf("   6%4d
    ", n6);
    	printf("   7%4d
    ", n7);
    	printf("   8%4d
    ", n8);
    }
    
    

    2.3.2 代码截图


    2.3.3 造测试数据

    2.3.4 PTA提交列表及说明

    • 1.部分正确:是因为答案在n1到n9的循环中出现了错误,n7的计算弄成了n7--,所以导致计算错误,所以部分正确
      改正就是改成n7++;
    • 2.编译错误:就是在第一个错误要改正的时候,由n7--改成n7++是不小心把逗号删除掉了
    • 3.编译错误:接上一个,在添加逗号时,没有换成英文的逗号,所以出现了错误;

    3.阅读代码

    • 首先改段代码在定义也是一样的,先定义a[20]a[20];然后接受字符getchar();

    • 这一块对字符串的应用可以好好吸收,因为我字符串还是比较弱的
    • 该代码好好地利用了index的定义来应用于题目的解题
    • 这段代码其实并不是很长,他将所有的条件全部放在一个while的循环里面,再用if-else的语句进行分类来解题,思路一看就很清晰,非常的让人容易理解。
  • 相关阅读:
    如何在mysql客户端即mysql提示符下执行操作系统命令
    干掉safedog命令
    面试题-----判断两个无环单链表是否交叉,如果交叉返回交叉点
    面试题-----单链表的反转
    面试题-----ICMP协议简介
    面试题-------SSL协议简介
    面试题-----求单链表的倒数第k个节点
    面试题---两个有序单链表的合并
    面试题---求一个串中的最大连续递增数字串
    面试题---两个大整数相乘
  • 原文地址:https://www.cnblogs.com/w-y-h--/p/11878200.html
Copyright © 2011-2022 走看看