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

    1.本章学习总结

    1.1 思维导图

    1.2 本章学习体会及代码量学习体会

    1.2.1 学习体会

    • 本章学习了数组,学习了如何定义数组,数组的输入与输出,以及一维数组二维数组字符串数组的运用等。
    • 定义数组时后其中的所有元素会被的随机赋值,可以加上static将其中的所有元素初始化为0。
    • 运用数组时要注意数组下标不能越界,越界了程序会崩溃
    • 在解答特定的问题时可以再定义一个数组,以空间换取时间
    • 数组题型和之前题目比较难度明显提升,写代码耗时也就更长,这时候有没有思路就显得很重要,写代码之前最好先写伪代码再编程,不然会耗费很多时间还写不出来。
    • 在写字符数组代码过程中,不能确定字符数组的长度。可以用strlen函数就解决了

    1.2.2 代码累计

    2.PTA总分

    2.1截图PTA三次题目集:一维数组、二维数组和字符数组共3次题目集的排名得分



    2.2 我的总分:

    • 130+85+200=415分

    3.PTA实验作业

    3.1 PTA题目1

    • 给定两个整型数组,本题要求找出不是两者共有的元素。

    3.1.1 算法分析

     int N,M,i,j,k;
     static int flag[41]//定义一个数组用来判断数组是否重复
     int lenc
     for i=0 to N     输入num1[i]     end for          
     for j=0 to M    输入num2[j]     end for
     lenc=N+M//两个数组的长度
     int num[lenc]//储存两个数组
     //对数组进行连接
     for i=0 to N    num[i]=num1[i]    end for 
     for j=0 to M    num[N+i]=num2[i]    end for 
     for i=0 to lenc 
          for j=i+1 to  lenc 
                 if   num[i]==num[j]&&i<N&&j>=N    then   flag[j]=1 flag[i]=1
                 if   num[i]==num[j]&&j<N    then   flag[j]=1
                 if   num[i]==num[j]&&i>=N   then  flag[i]=1
     输出num[i]
    

    3.1.2 代码截图


    3.1.3 PTA提交列表及说明

    • Q1:一开始定义flag数组的时候只定义长度为40,结果出错。
    • A1:后来发现定义长度要多一点才可以通过,改成41就过了。
    • Q2:一直找不到比较好的方法解此题,试了很多种方法,也错了很多次。
    • A2:后来使用老师讲的将两个数组结合起来进行比较,就过了。

    3.2 PTA题目2

    • 一个矩阵元素的“鞍点”是指该位置上的元素值在该行上最大、在该列上最小。本题要求编写程序,求一个给定的n阶方阵的鞍点。

    3.2.1 算法分析

     int n,i,j,k
     int index1,index2;//定义储存行下标和列下表
     int flag=0对输出进行控制
     循环输入num[i][j]
     for i=0 to n
          index1=index2=0
          for j=0 to n
                  if  num[i][j]>=num[i][index2]    then   index2=j  //记下最大值的列下标   end  for
          for k=0 to n
                  if  num[k][index2]<=num[index1][index2]    then    index1=k  //在最大值那一列开始找列的最小值   end  for
          if  index1==i   then  flag=1  break
     end for
     if  flag==1   then  printf ("%d %d",index1,index2)
     else printf ("NONE")
    

    3.2.2 代码截图

    3.2.3 PTA提交列表及说明

    • Q1:一开始忘了每次循环都需要给index1和index2重新赋值为0,进行每一次的计算。
    • A1:后面在每次循环时加上index1=index2=0,结果正确。
    • Q2:一开始一直找不出如何判断找到的元素是否满足题目的要求,试了好多次。
    • A2:后面加上一个判断条件index1==i就正确了。

    3.3 PTA题目3

    • 本题要求编写程序,将给定字符串去掉重复的字符后,按照字符ASCII码顺序从小到大排序后输出。

    3.3.1 算法分析

     int i,j,min,len=0,index=0
     char temp用来交换元素
     char str[81] //定义数组
     gets(str) //输入数组
     for  i=0  to  str[i]&&str[i]!='
    '  len++  end for //得出输入的数组的长度
     for  i=0  to  len
           min=i
            for  j=i  to  len
                  if  str[j]<=str[min]   then  min=j  //对数组进行排序
            end for
            //交换元素
            temp=str[i];
             str[i]=str[min];
    	  str[min]=temp;
             //删除重复的元素并对数组进行新的赋值
             if   str[i]!=str[i-1]   then   str[index++]=str[i]
     end for
     str[index]=''
     输出str
    

    3.3.2 代码截图

    3.3.3 PTA提交列表及说明

    • Q1:一开始定义数组长度时只有80,结果出错。
    • A1:后来改成81,结果就正确了。
    • Q2:一开始又定义了个数组用来输出结果。
    • A2:但是后来老师讲了可以重置数组,不用重新定义。

    4.代码互评

    4.1 代码截图

    • 同学的代码

    • 我的代码

    4.2 二者的不同

    • 同学的代码时每行都是从头开始找的,也就是都是从下标0开始,这样会使计算的时间增加。
    • 我的代码则是从第几个之后开始找的,也就是从下标i开始,这样会使计算的时间缩短,提高效率。
    • 同学的代码找到符合的元素时并没有跳出循环而是继续找,这样做等于做无用功,只要找到了符合的元素就不会有别的元素符合了,可以直接跳出。
    • 我的代码则是如果找到了符合的元素时,则跳出循环,不用做多余的无用功,效率更高。
  • 相关阅读:
    vue-动画
    vue笔记-路由,组件
    自定义键盘信息
    自定义指令
    vue-笔记2
    轻松搭建基于 Serverless 的文档图片在线转换服务
    轻松搭建基于 SpringBoot + Vue 的 Web 商城应用
    一小时快速搭建基于阿里云容器服务-Kubernetes的Web应用
    阿里云正式推出内容平台“云栖号”:全面助力企业和个人上云决策
    云原生安全-更安全的密文管理 Vault on ACK
  • 原文地址:https://www.cnblogs.com/wcrbailun/p/10088861.html
Copyright © 2011-2022 走看看