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

    0.展示PTA总分

    1.本章学习总结

    1.1 学习内容总结

    • 数组可通过下标查找数据,每个下标就像是“地址”,可通过找下标查找数据。还可以通过数组中的特殊元素查找,比如字符串数组中的''等。
    • 数组插入数据时,可先找到插入位置,然后将插入位置后的全部元素右移一位,在将数据放入插入位置。
    for n to loc do//从数组最后到插入位置将数组右移一位
         a[n+1]=a[n];
    a[loc]=number;//插入位置放入插入数据
    
    • 数组删除数据
      1.找到要删除元素的下标,删除值后面的元素都往前移一位, 要删除的值直接被覆盖。
      2.将要删除的元素赋特殊值,将除特殊值外的元素放入另一数组。
      3.字符型数组可从第一个字符开始对比,凡是非删除对象都按下标顺序赋值回字符串,最后重新加上''。
    • 数组中数据的的排序
      1.顺序排序法,主要思路:从首位循环到末位,每次循环中都找到最大(小)值的下标,交换两个位置的数,从下个位置继续在剩余数中寻找最大(小)值的下标,保证每次循环都把一个较大(小)的数放在循环开头。
      2.冒泡排序法,主要思路:对比相邻两数的大小,交换两数位置,每轮循环都把最大(小)数放到循环末位,经n-1轮循环即可实现排序。
    • 数组做枚举用法。
      1.调查电视节目受欢迎程度,用数组下标1~8作为节目名称,在数组中存放每个节目得分。
      2.找是否有重复数据中用hash数组通过下标的方式,存放每个数是否重复的信息。
      3.在阅览室题目中,可用数组的下标作为书号的存放。
    • 哈希数组用法。
      1.判断数组是否存在重复数据。主要思路:遍历一遍原数组,遇到的每个元素都将其当做哈希数组的下标,并将哈希数组该下标对应的数由0改为1,若某个元素对应哈希数组的值已经为1则说明该数据重复,退出循环。
      2.将给定字符串去掉重复的字符后,按照字符ASCII码顺序从小到大排序后输出。主要思路:将ASCII码由小到大作为哈希数组的下标并初始化为0。遍历原数组,按ASCII码存入哈希数组对应位置,输入哈希数组中不为0的数据即为去掉重复的字符后的排序好的数据。

    1.2 本章学习体会

    • 本章的难度明显较前几章有很大的提高,代码的理解难度更大,对读代码能力要求更高。
    • 解决问题的方法思路更加丰富多样,对数组的操作有多种类型,而每种类型又有多种方法,熟练掌握每种方法就要加强代码的理解记忆。
    • 在数组操作方法上,有时会混淆或记忆错误。
    • 在VS编译器上对数组的操作时,各种问题浮出水面,经常出现各种看不懂的错误警告和提示。
    • PTA题中代码出错后,查错也变的更加困难。
    • 涉及字符数组的操作总是复杂、繁琐和易错,各种输入和输出字符串的方法差异微妙。
    • 这两周的代码量约为:970行。

    2.PTA实验作业

    2.1大数加法

    2.1.1 伪代码

    char a[1000];
    char b[1000];//两个相加数存放在数组a和b中
    static int c[1100];//和存放数组c中
    int i=0 , j=0 , k=0 ;//循环变量,顺带记录a、b数组长度
    int up, m;//up为两数相差的位数,m为循环变量
    
    循环计数,得出a,b两数的位数和位数差
    if(up>0)//a的位数多于b
     数组b右移up位,前面补上''
    else if(up<0)//a的位数小于b
     数组a右移up位,前面补上''
    while (i >= 0 && j >= 0)
    {
        c[k++] += (a[i--] - '0') + (b[j--] - '0');//a+b的和放入数组c
        if (c[k - 1] > 9) 该位减10,下一位加1
    }
    逆序输出数组c即为a+b的和
    

    2.1.2 代码截图

    2.1.3 造测试数据

    输入数据 输出数据 说明
    大数
    最高位进位
    最高位不进位
    个位

    2.1.4 PTA提交列表及说明

    1.部分正确:a、b两数位数不相等时,只能进行两数等位部分的计算,导致答案错误。最开始想让多余的数直接输出在计算出的和之前。
    2.部分正确:最开始的想法是错误的,当需要进位时,该方法就不适用了。后来想让短的数前补上0让两数位数相同。
    3.答案正确:先计算出两个数的长度差(a-b),差大于0表示a数位数多于b,让数组b右移差值位并在b数组前补差值个''使两数位数相等后再进行计算。
    

    2.2删除重复字符

    2.2.1 数据处理

    char s[80];//存放输入的字符
    static char hash[256];//,初始化为'',作用:覆盖重复字符,按ASCII码输出
    int i;//循环变量
    int k;//hash数组的下标
    i=0;
    

    2.2.2 代码截图

    2.2.3 造测试数据

    输入数据 输出数据 说明
    hellowworld11 1dehlorw 字母和数字无空格
    wwe 22 2ew 存在空格重复
    ------ - 全空格('-'代表一个空格)

    2.2.4 PTA提交列表及说明

    1.部分正确:hash数组的长度不足,当字符串中的字符ASCII码过大时会出现错误。修改hash数组长度。
    2.部分正确:出现有空格的情况出现错误,原因是使用了scanf("%s",s)语句导致遇到空格输入就结束了,之后将输入语句改为while循环输入解决空格的问题。
    2.编译错误:修改输入语句时,最后一个分号变成中文的分号了。
    3.答案正确:检查更改符号,将scanf("%s",s)语句更改为其它的输入语句,更改hash数组长度为127。
    

    2.3螺旋方阵

    2.3.1 数据处理

    int n;//矩阵阶数
    static int a[10][10];//储存矩阵中数据,使用静态数组为了后面的递增和螺旋条件判断
    int i = 0;//行标
    int j = 0;//列标
    int k = 0;//循环变量
    

    2.3.2 代码截图

    2.3.3 造测试数据

    输入数据 输出数据 说明
    1 1 最小n
    9 最大n
    6 偶数n

    2.3.4 PTA提交列表及说明

    1.部分正确:在某个转弯处行列的变化出现错误,导致某些阶数的螺旋矩阵出错。
    2.部分正确:当n=1时,答案错误。
    2.答案正确:首先单独处理n=1的情况,其次仔细跟着编译器一步一步差错找规律,看行列的变化情况,更改行列的数值以及自增符。
    

    3.阅读代码

    插入排序,代码如下:

    演示:

    • 该代码介绍了一种新的排序方法,思路上与数组插入数据类似。
    • 插入排序的基本思想是将每步将一个待排序的记录,按其关键码值的大小插入到前面已经排序的数组中的适当位置上,直到全部插入完为止。
    • 该排序方法和冒泡排序与选择排序相比较为直观,比较不同的排序方法对比它们之间的差异可以拓展思路,学习分析解决问题的方法
  • 相关阅读:
    MVC Areas的使用
    每日踩坑 2019-07-30 H5 使用 iframe 底部有白边
    C# 使用 MsieJavaScriptEngine 引擎运行JavaScript
    Javascript获取value值的三种方法及注意点
    java编程(2)——servlet和Ajax异步请求的接口编程(有调用数据库的数据)
    java编程(1)——servlet和Ajax异步请求的接口编程(没有调用数据库的数据)
    eclipse的常用设置
    Junit4单元测试
    Java异常
    Java的抽象类和接口
  • 原文地址:https://www.cnblogs.com/c4412/p/11830228.html
Copyright © 2011-2022 走看看