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

    0.展示PTA总分



    1.本章学习总结

    1.1 学习内容总结

    1.int a[10];为定义数组,表示数组有10个数
    2.数组的下标都是从0开始,到n-1结束
    3.数组里元素的个数不能大于数组的长度
    4.数组长度必须是常量,不能是变量。如int a[x]错误
    5.静态数组使用方法,static 类型名 数组名[数组长度]
    6.静态数组若没有初始化,系统会自动给数组元素赋值0
    7.二维数组a[i][j],i代表行标,j代表列标,行和列都从0开始,列长度不能省略
    8.字符数组的结束符为'',用其来控制循环
    9.字符数组定义:例如char a[100]
    
    查找数据:可用顺序查找法
               scanf输入要查找的值x
               for(从数组下标0到n-1)
               {if所要查找的值与数组中某个值相等
                    输出该数的下标}
    
    数组中插入数据
      for{找出a[i]>x;
           退出循环}
      for(循环从n开始,且循环条件为k>i)
         {另数组中的后一个数等于前一个数}
      另a[i]=x;
      for(条件为i<n+1)
       {输出数组}
    
    数组中删除数据:
      法一:定义一个新数组
          for(遍历数组)
          {flag=0;
            for(二次遍历数组)
            {if(a[i]=a[j]说明有重复数据)
              flag=1;       }   
             if(flag==0)说明该数据不重复
                b[j]=a[i]这样便能将重复的数据都删除
                  }
      法二:for(i=0;i<=k;i++;k表示要删除的次数)
               {输入x为数据的下标;
                      for(j=x;循环从x开始)    
                         a[j-1]=a[j]  另前一个数等于后一个数    }
           for循环至n-k  printf输出
    
    排序方法
      法一:选择排序法
           再数组中再到最小数,将min与a[0]交换
           再从a[1]到a[n-1]找min,a[1]与min交换
           ....以此类推
      法二:冒泡排序法
            从头到尾比较相邻两个数
            运用两层循环,若a[j]>a[j+1],交换两个数的值
    

    枚举法数组案例:顺序查找法,逐个比较数组中元素查找重复数据

    哈希数组案例:查找重复数据
                  定义一个数组static int hash[max]该数组里的数都为0
                  for循环输入数据
                  if(hash[用输入的数据作下标])
                  {if(hash[x]==1)说明有重复数据
                     else让hash[x]=1   }
    

    1.2 本章学习体会

    1.数组内容较多且复杂,特别是字符数组有些乱,且方法很多也容易乱,使用起来较为困难
    2.代码量700行左右,达到目标

    2.PTA实验作业

    2.1 题目名:二分查找法

    2.1.1 伪代码

    定义数组a[10]={1,2,3,4,5,6,7,8,9,10}
    定义upper为数组的左下标,top为右下标;
    int b为中间值,key
    scanf输入key
    for{
    b=(upper+top)/2另b为中间值
    比较a[b]与key的大小
    若等于,printf输出b
    若大于,top=b-1
    若小于,upper=b+1
    }

    2.1.2 代码截图

    2.1.3 造测试数据

    输入数据 输出数据 说明
    4 weizhi:3 题目要求数据
    1 weizhi:0 端点数据
    11 not found 数组中没有的数据

    2.1.4 PTA提交列表及说明

    • 第一次提交错误是由于找到a[b]=key之后没有用break结束循环,使运行超时,且当a[b]>key时和a[b]<key时之后的操作错误
    • 第二次提交错误修改了break的错误,但a[b]>key时和a[b]<key时之后的操作仍然错误
    • 修改为a[b]>key,top=b-1,a[b]<key,upper=b+1,答案正确

    2.2题目名:字符串转换成十进制整数

    2.2.1 数据处理

    定义变量i,k,j;定义字符数组a[100]来储存输入的字符,定义b[100]来储存十六进制的字符,定义number作为转化后的十进制数,定义flag来控制是否输出负号

    2.2.2 代码截图


    2.2.3 造测试数据

    输入数据 输出数据 说明
    +-P-xf4+-1!# -3905 题目要求数据
    10# 16 全为数字的数据
    ab# 171 全为小写字母的数据
    AB# 171 全为大写字母的数据

    2.2.4 PTA提交列表及说明

    • 由于没有注意到是否应该输出负号而导致第一个测试点错误
    • 定义了flag来控制是否输出负号后还是错误,错误代码如下
      if (i >= 1&&flag==0)
      {
      for (j = i-1; j >= 0; j--)
      {
      if (a[j] == '-')
      {
      flag = 1;
      break;
      }
      }
      }
      此代码只考虑到第一个十六进制字符前有没有负号,而错误在于若第一个十六进制字符前无负号,而第二个十六进制字符前有负号,还是会输出负号,所以错误
    • 填入了flag=2之后在输出时忘了flag=1或0时都不用输出负号
    • 修改后如上代码正确

    2.3 题目名3:判断E-mail地址是否合法

    2.3.1 数据处理

    定义字符数组str[100]储存输入的字符,定义flag对输出“YES”还是“NO”作判断,定义i,i用于循环语句

    2.3.2 代码截图


    2.3.3 造测试数据

    输入数据 输出数据 说明
    adf12@qw213.com YES 题目要求数据
    #10@q98.com NO 输入非字母数字,下划线,’.'和@的符号
    102q@_12.com NO 输入@前后不全是字母和数字的数据
    263qw@c2.com23 NO com后还有其他的数据

    2.3.4 PTA提交列表及说明

    • 段错误是由于使用scanf输入字符,后改用fgets
    • 部分正确1:由于条件中str[i]>'a'和str[i]<z中没有加等号
    • 部分正确2:没有对com后还有数据进行判断,添加代码如下:
      else if (str[i + 1] && 'c' && str[i + 2] == 'o' && str[i + 3] == 'm')
      {
      i = i + 4;
      if (str[i] != '')
      {
      flag = 0;
      break;
      }
      }
    • 部分正确3:修改代码后仍错误,调试后发现''前还有一个字符数据' ',为fgets输入时自动加入的,将i=i+4改为i=i+5
    • 最后提交正确

    3.阅读代码


    题目为输出A数组中有而B数组中没有的数据,该代码优点为循环次数少,思路简单,容易懂
    通过遍历数组A和B而找出都有的数据,并改变A[i]的值为1,最后选择输出A[i]的值不等于1的数据
    比起通过再设一个数组来储存数据方便得多

  • 相关阅读:
    如何强制360浏览器以极速模式打开页面
    如何解决Android SDK无法下载Package的问题(.net)
    Xamarin 安装步骤
    使用require.js和backbone实现简单单页应用实践
    HBuilder之初体验
    ClassLoader&双亲委派&类初始化过程
    List remove ConcurrentModificationException源码分析
    二十九、简谈设计模式
    二十八、Java基础--------正则表达式
    二十七、JDK1.5新特性---Annotation
  • 原文地址:https://www.cnblogs.com/sym2446/p/11815729.html
Copyright © 2011-2022 走看看