zoukankan      html  css  js  c++  java
  • C语言--第4次作业

    1.本章学习总结

    1.1思维导图

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

    1.2.1学习体会

    • 初识数组:这几周第一次接触数组,感觉有点懵,是一个很陌生的知识点,但是运用范围及其广泛,大大简化了程序,增大了代码的可读性,于此同时,内容也极其丰富,包括一维数组、二维数组和字符数组,真是让人头大啊
    • 遇到的问题:1.老师上课比较快a,基本上一节课一种数组,对于二维数组和字符数组的掌握真的很不牢固,缺少课后巩固和复习的时间;
      2.对于数组元素交换位置不知道怎么处理,对于冒泡、选择、重构数组,哈希查找等使用方法了解,但是缺少实际运用的能力;
      3.数组的题目可谓是又多又难,可能因为对于代码的算法还是不熟悉不习惯,很容易对着题目毫无思路,二维数组的for循环或是if, while等语句的使用太多,很容易搞乱嵌套。
    • 之后的学习:1.由于数组的内容掌握真的很烂,上次上机考试脑子一团乱麻,很多小板块不明白,直接放弃了考试,这种心态真的要改,最近又 碰上线代考试,pta最近也有些荒废,现在在学习指针的同时,也要重新理一下数组的思路,在题目之中体会各种方法的使用方法,代码能力较弱应 该多加练习,课前预习,课上好好听老师的拓展,课后认真复习总结, 对于课堂派上的代码也要认真分析,希望这样糟糕的状态不会再出现!
      2.数组真的很重要,要学会跟之前的函数连接起来,跟后面的指针也是息息相关的

    1.2.2代码累计

    2.PTA总分

    2.1



    2.2我的总分

    一维数组:200分;
    二维数组:105分;
    字符数组:150分;
    总分:455分

    3.PTA实验作业

    3.1PTA题目1

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

    3.1.1算法分析

    1. 分别输入两个数组a[num1],b[num2]
    int c[num3];num3=0;// 存放非共有元素
    2.查找a数组中独有元素存入c中 a[num1],b[num2]; 
    for i=0 to num1
    for j=0 to num2
         if(a[i]==b[j])then //是重复元素
           flag=1;
        end if
        if (flag==0) then //不是两者共有元素
           for k=0 to num3
               if(c[k]==a[i]) then //检查c中有无重复
                  temp=1;
               end if
               if(temp==0) then
                  c[num3]==a[i]; //非重复元素存入c中
                  num3++;
               end if
              end for
    end for
    end for      
    3. 查找b数组独有元素存入c中,步骤同2         
    

    ​ 4. 输出c数组
    for i=0 to num3
    printf("%d",c[i]);
    end for

    3.1.2代码截图


    3.1.3 PTA提交列表及说明

    Q:只是把a、b中独有的元素存入c中,忽略a、b中存在重复元素
    A: 再设计一个循环,比较a,c数组和b,c数组,将不相同的元素存入c中;
    Q:for循环太多,嵌套出现错误
    A:在草稿纸上将思路又理了一遍,先写外循环,再写内循环,进行拼接。
    PS:老师的方法,先分别检查a,b数组中是否有重复元素并删去,将a,b数组合并,查找重复元素删去,再输出。

    3.2题目二

    图书借阅系统

    • 当读者借书时,管理员输入书号并按下S键,程序开始计时;当读者还书时,管理员输入书号并按下E键,程序结束计时;
    • 0作为书号输入时,表示一天工作结束;
    • 输出当天的读者借书次数和平均阅读时间
    • 只有S没有E,或者只有E没有S的纪录,系统应能自动忽略这种无效纪录。另外,题目保证书号是书的唯一标识,同一本书在任何时间区间内只可 能被一位读者借阅。

    3.2.1算法分析

    1.定义一个二维数组存放数据,输入天数days,时分分开;
    int a[1001][3];
    static flag[1001];//存放结果
    2.计算合格数据的时间
    for i=0 to days
    输入书号、借书or还书、时间
        while(书号不为0)
           if 借书
              flag[book]=1;
              a[book][1]=60*hour+minute;
           end if
           if 还书
              if  flag[book]=1
                 a[book][2]=60*hour+minute;
                 sendtime+=a[book][2]-a[book][1];
                 count++;//累计借书量
                 flag[book]=0;//初始化
              end if
           end if
           输入书号、借书or还书、时间
        end while
        if (count==0) 直接输出0 0;
        else 输出结果
        
        初始化a数组和flag数组,便于下一次存放数据
    end for
    

    3.2.2代码截图


    3.2.3 PTA提交列表及说明

    3.3题目三

    • 将运算数、运算符和括号等toker分开并输出

    3.3.1算法分析

    1.定义字符数组存放表达式
     char str [41];
     for i=0 to str[i]
       if str[i+1] 为数字或是小数点
          输出 str[i]
         else
            输出 str[i] 和一个换行符
       else if str[i]为运算符
             if str[i-1]是数字或是括号
                 输出 str[i] 和一个换行符
               else 输出输出 str[i]
             end if
       end if
       else 
            输出str[i];
     end for        
    

    3.3.2代码截图

    3.3.3PTA提交列表及说明

    ps: 这道题问题不大,还是比较简单,但是有些麻烦,需要分很多情况考虑,有点昏了,要么就是考虑的重复了,要么就是考虑的不够充分,反反复复的之后我就请教了一下同学的代码,这样比较简洁,可读性较大

    4.代码互评

    4.1代码截图

    范华同学的代码

    我的代码

    4.2二者的不同

    范华同学采用的方法比较新颖,而我的比较常规,根据代码的规律采用for循环控制数据,而范华同学的算法很简洁,采用数组清零,学习能力比较强,对于算法的积累较多,值得学习。
    这道题我不怎么会,我的写法也是同学教的,这种规律题一直都是我比较不擅长的,每次碰到都会没有思路,这次相当于总结了两位同学的代码,通过找异同点,可以使我慢慢熟悉这种题的道路。

    加油鸭!

  • 相关阅读:
    Linux下汇编语言学习笔记51 ---
    Linux下汇编语言学习笔记50 ---
    Linux下汇编语言学习笔记47 ---
    Linux下汇编语言学习笔记46 ---
    Linux下汇编语言学习笔记45 ---
    Java奇葩笔试题
    Java奇葩笔试题
    Xcode 5 下的单元测试
    Xcode 5 下的单元测试
    Xcode5 统计单元测试覆盖率(仅限XCTest)
  • 原文地址:https://www.cnblogs.com/victory0917/p/10088760.html
Copyright © 2011-2022 走看看