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


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



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

    1.1 学习内容总结##

    • 数组中查找数据一般有顺序查找法和二分查找法。顺序查找法就是把数组中的每一个元素依次和要查找的数据相比较,二分查找法就是每次和中间的一个数据比较,逐渐缩小范围。
    • 数组中插入数据
    定义一个数组a,一个要插入的数x,数组的长度n,要插入的位置m。
    
    输入一个数组
    输入插入的数和位置
    for(i=n;i>m;i--)
        a[i]=a[i-1];
    end for
    a[m]=x;
    输出一个新的数组
    
    • 数组中删除数据
    定义一个数组a,要删除的数据num,数组长度n。
    
    输入一个数组
    输入要删除的数据
    
    for(i=0;i<n;i++)
    {
     if(a[i] == num)
     {
       for(j=i;j<n-1;j++)
        a[j]=a[j+1];
       end for
       n--;
     }
     end if
    }
    end for
    输出删除了num后的数组a
    
    • 数组中目前学到排序方法有冒泡排序法和选择排序法。冒泡排序法的思路是外循环经过n-1次循环,内循环主要是第一个和第二个数比较,第二个和第三个比较,以此类推,相邻两个数比较,并作交换;选择排序法的主要思路是外循环也经过n-1次循环,而内循环是找到最小的,让它和第一个元素交换。

    • 数组做枚举用法:计算一年中的某一天在该年的天数。

    • 一维数组的定义一般形式为:类型名 数组名 [数组长度],下标取值范围是[0,数组长度-1],初始化一般形式为:类型名 数组名 [数组长度]={初始值}。

    • 二维数组的定义一般形式为:类型名 数组名 [行长度][列长度]={初值表}。

    • 学到了怎么判断一个字符串是否回文,输入一行字符串是,一般以回车结束,而在数组中则是以''结束,学到了怎么把回车转换成数组中的''。字符数组的定义,比如char ch[有效长度],对字符数组初始化时,比如char ch[6]="Happy";其中"Happy"的有效长度为5,但因为含有'',所以数组长度为6,字符串由有效数字和字符串结束符''组成。学到了进制的转换,对于n 进制,数字字符时,number = number * n + a [i]-'0',字母时,number = number *n+ a [i]-'A'+10或者number = number *n+ a [i]-'a'+10。

    1.2 本章学习体会##

    • 经过对本章的学习,发现很多问题用数组来解决会变得特别方便简单,也很巧妙,就拿以前在pta上做过的一道题来说,就是那道某天在一年中的天数的题,没学数组前,方法特别笨,写了很长很宽,但学了数组后,巧妙运用数组很快就写出来了,代码量也很少。从数组开始,好像题量有些增加,又加上我做题速度特别慢,因为还有其他的事情,就有点跟不上了,很乏力,越来越抽不出时间了,我也不知道为什么别人就可以做那么快,思路和飞了一样,突然就想,有些东西好像不单单只靠努力就行的,还要有天赋,我就是可能没计算机这方面的天赋,接受起来就很慢,别人一个小时接受的,我可能要一天,就好比别人数学比我差点,大概我就是数学方面有些天赋吧,真的有时候想要放弃,感觉再怎么努力也没用,因为我没天赋啊,但我又想不能放弃,如果放弃了,就白白浪费了前面十几年的努力,所以我还要坚持,把所有零碎时间都挤出来,放假不休息,虽然追上别人很难现在看来,但我能追一点是一点,也有可能一点都追不上,但起码会比以前的自己好点,默默给自己加油!加油!加油!加油!(好累)
    • 代码量大概只有736行。

    2.PTA实验作业(7分)#

    2.1 7-4 数组循环左移##

    2.1.1 伪代码###

    定义一个数组a,数组长度n,行为i,记录移动次数的变量j,移动次数m,存放数据变量item。
    
    输入数组长度和移动次数
    输入一个数组
    
    for(j=1;j<=m;j++)
    {
          item = a[0];
          for (i = 1; i < n; i++)
          {
    	   a[i - 1] = a[i];
          }
          end for
          a[n - 1] = item;
    }
    end for
    
    输出新数组
    

    2.1.2 代码截图###


    2.1.3 造测试数据###

    输入数据 输出数据 说明
    8 3 1 2 3 4 5 6 7 8 4 5 6 7 8 1 2 3 一般情况
    3 6 1 2 3 1 2 3 m比n大,且刚好是n的倍数
    4 5 1 2 3 4 2 3 4 1 m比n大

    2.1.4 PTA提交列表及说明###


    提交列表说明:###

    1.部分正确:少考虑了m比n大时。
    2.答案正确:重新设计了一下代码,再结合超星平台讲解,把所有情况都考虑了,就正确了。
    

    2.2 7-3 判断上三角矩阵##

    2.2.1伪代码###

    定义二维数组a用来存放矩阵,一维数组b用来输出YES和NO,行和列为i和j,flag作为判断是否结束循环,矩阵的个数为T,t来存放T,k用来输出数组b,n为几阶矩阵。
    
    输入矩阵个数
    t=T;
    while (T--)
    {
         输入矩阵阶数
         输入一个矩阵
    
         for (i = 0; i < n; i++)
         {
    	     flag = 1;
    	     for (j = 0; j < n; j++)
    	     {
    		如果行大于列时,元素不等于零,flag等于0,结束次循环
    	     }
                 end for
    		如果flag等于0,结束次循环
         }
         end for
         if (flag == 0)
    	b[k] = 0;
         end if
         k++;
    }
    end while
    
    根据b数组中的元素,输出YES或NO,为1则输出YES,为0则输出NO
    

    2.2.2代码截图###



    2.2.3造测试数据###

    输入数据 输出数据 说明
    sample等价,重复若干遍

    2.2.4 PTA提交列表及说明###

    提交列表说明:###

    1.答案错误:因为没换行输出。
    2.答案错误:因为放在循环里面了,输出了多个YES或NO。
    3.答案错误:因为在外面输出YES或NO的时候,循环条件错了。
    4.答案错误:还是没注意到循环条件错误,以为是最后一次输出换行导致的错误。
    5.部分正确:因为我以为对角线不能等于0。
    6.答案正确:把对角不等于0的条件去掉了,然后就对了。
    

    **2.3 7-1 判断E-mail地址是否合法 **##

    2.3.1伪代码###

    定义字符数组char,和判断输出的变量flag。
    
    输入一串字符
    flag=1;
    
    for (int i = 0; str[i]; i++)
    {
        判断字符是'@'时的情况,根据情况改变flag的值
        判断字符是'.'时的情况,根据情况改变flag的值
        判断字符是否为所要求的字符,根据情况改变flag的值
    }
    end for
    
    if (flag == 1)
        输出YES
    else
        输出NO
    end if
    

    2.3.2代码截图###

    2.3.3造测试数据###

    输入数据 输出数据 说明
    adf12@qw213.com YES 样例
    198@qq.comk NO .com后有多余字符
    19 8@qq.com NO 字符中有空格
    198@qq.com% NO 合法地址后有非法字符

    2.3.4PTA提交列表及说明###

    PTA提交列表及说明###

    1.段错误:我用的是while循环产生的一个字符数组,根据pta的段错误规定,可能是递归调用层数太多。
    2.编译错误:改了一下数组产生的方式,但函数调用时,函数写错了。
    3.部分正确:少考虑了.com后面不能有多余字符。
    4.编译错误:还是有个函数写错了。
    5.部分正确:加的一个条件不正确,没能过测试点。
    6.答案正确:改了一下条件,然后就对了,改成了str[i+4]!='';。
    

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


    • 这段代码的功能是给定两个整数M,N,生成一个M*N的矩阵,矩阵中元素取值为A至Z的26个字母中的一个,A在左上角,其余各数按顺时针方向旋转前进,依次递增放置,当超过26时又从A开始填充。
    • 优点是巧妙运用了while循环,并且外层循环条件控制的非常好,我们pta中就有一道类似的题,我差不多就是用这种方法做的,但又不一样,我的看着比较不好理解,而他的循环里面用的四个while比较清晰。
  • 相关阅读:
    C++程序设计第二周作业
    navicat 连接windows服务器中的mysql数据库
    Python 多进程(二度回顾)
    MySQl 合并结构相同的多张表
    Python 验证码识别-- tesserocr
    Navicat Premium 修改MySQL密码(忘记密码的情况下)
    Navicat Premium 出现2059错误解决办法
    MySQL 1053错误 服务无法正常启动的解决方法
    mysql触发器trigger 实例详解
    navicat for mysql 连接报错1251详细解决步骤
  • 原文地址:https://www.cnblogs.com/wangtianxue/p/11876204.html
Copyright © 2020-2023  润新知