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

    #0.展示PTA总分

    #1.本章学习总结 ##1.1学习内容总结 ###1.1.1一维数组

    #define M 10使后面修改数组长度时更加方便
    void Array(int a[],int M);一维数组函数声明
    int main()
    {
        int a[M];定义一维数组
        输入需要循环输入,传出也需要循环;
        Array(a,M);传入一维数组地址和长度
    }
    void Array(int a[],int M)
    {
        定义函数;
    }
    

    当需要将数组内的全部值需要定义成0时,可写成static int a[M];即将全部值初始化成0; ###1.1.2二维数组

    #define N 10
    #define M 10使后面修改数组长度时更加方便
    void Array(int a[M][N],int M,int N);二维数组函数声明
    int main()
    {
        int a[M][N];定义二维数组
        输入需要两层循环输入,传出也需要两层循环;
        Array(a,M,N);传入二维数组地址和长度
    }
    void Array(int a[M][N],int M,int N)
    {
        定义函数;
    }
    

    ###1.1.3字符数组和字符串 字符串由有效字符和‘’组成; 字符串用字符数组来保存; 字符输入由下面几种组成: (1).

    scanf("%s",str);
    遇空格or回车结束
    

    (2).

    循环输入(接受空格)
    i=0;
    while((str[i]=getchar())!='
    ')
    i++;
    str[i]='';必须给最后一个赋上字符串的结束标志,不然会结束不了
    

    (3).

    fgets:接收带空格的字符串
    char buf[10];
    fgets(buf,10,stdin);
    

    缺点就是当输入字符少于n-1时,会多带换行符; 解决方法就是加上

    for(i=0;buf[i]&&buf[i]!='
    ';i++);
    buf[i]='';
    

    字符输出由以下几种组成: (1).循环输出

    (2).

    printf("%s",str);
    or
    printf("%s","hello");
    遇‘’结束;
    

    (3).

    put(str);
    or
    put("hello");
    输出后自动换行
    

    字符数组传函数时不用传长度 ###1.1.4数组中如何查找数据,有哪些做法 ####(1)顺序查找 方法:通过遍历数组,从第一个数据开始查找,依次从第一个找到最后一个,找到匹配数据则成功,否则失败; 优点:算法简单,容易上手; 缺点:查找效率低,遇到较多数据时,容易运行超时,数据较多时,不建议用此方法 ####(2)二分查找法:前提:必须是有序排列 方法:不断的通过与中间数据比较,不断缩小范围,进而找到数据 优点:数据较多时,用此种方法效率减半,高效完成程序; 缺点:算法复杂,只能用于有序排列 ###1.1.5数组中如何插入数据,怎么做,可以写个伪代码或动态图展示方法 输入一个数据x,将数组中的每一个数据与x逐一比较,如果满足条件,则将这数据以后的下标往后移一位,将x插入该下标!

    ###1.1.6数组中如何删除数据,这个有多种做法,请一一展示 (1). 在一个数组中,在该需要删除数据的地方记录下标,将后面的数据依次往前移,即可做到删除该数据 如下图所示:

    (2). 用两个数组来进行操作,一个数组用来保存原来的数据,另一个数组用来保存删除后的数据 如下图所示: ###1.1.7数组中目前学到排序方法,主要思路? (1)选择排序法 主要思路:需要两次循环,第一次循环从第一个数据开始,第二层循环从第一次循环的数据开始,不断找出最小值放在第i个位置,直到n-2个位置的数据 (2)冒泡排序法 主要思路:将相邻的两个数据比较,将小的调到前面;经过第一趟比较后,最大的数已经在最底下了,然后对余下的数进行重复操作 (3)直接插入排序 方法较于简单,此处不介绍 ###1.1.8数组做枚举用法,有哪些案例? 阅览室题目应该有一点枚举的意思 ###1.1.9哈希数组用法,目前学过哪些案例,举例展示 用法:原来的数据可以直接通过哈希函数存储起来,这样在搜索的时候,等于每一个数据都有了自己的特定查找号码,所以在查找时,可以通过哈希函数,一步直接找到(不考虑冲突)。所以时间复杂度,接近O(1) 案例:类似于查重复数据一题: ##1.2本章学习体会 ###描述学习感受,也可以在这里提出你不理解地方、对教师教学建议等等 在数组学习中,在刚开始接触时,感觉有点难度,但题做多了以后,对数组也渐渐熟悉,运用也比以前更加灵活,现在又感觉对指针有难度了,还是好好敲代码吧 ###计算这两周代码量,是否达到目标 前一周521行 本周400行 #2.PTA实验作业 ##2.1题目名:天梯图书阅览室请你编写一个简单的图书借阅统计程序。当读者借书时,管理员输入书号并按下S键,程序开始计时;当读者还书时,管理员输入书号并按下E键,程序结束计时。书号为不超过1000的正整数。当管理员将0作为书号输入时,表示一天工作结束,你的程序应输出当天的读者借书次数和平均阅读时间。 ###2.1.1伪代码

    int main()
    {
        for(i到N天)
        {
            输入四列的数据;
            分别转化成二维数组a[k][0],a[k][1],a[k][2];
         }
         从第一行开始找a[i][1]为‘s’的数据;
         找到后找与之对应的‘E’;计算出时间;
         最后计算出count,平均值;
    }
    

    ###2.1.2代码截图 ###2.1.3造测试数据 | 输入数据 | 输出数据 | 说明 | | ----- | --------- | ----------- | | 3 1 S 08:10 2 S 08:35 1 E 10:00 2 E 13:16 0 S 17:00 0 S 17:00 3 E 08:10 1 S 08:20 2 S 09:00 1 E 09:20 0 E 17:00 | 2 196 0 0 1 60 | 题示数据 |
    |1 1 S 08:10 2 S 08:35 1 E 10:00 2 E 13:16 0 S 17:00 |2 196|一组数据 |
    ###2.1.4PTA提交列表及说明

    答案错误:没有考虑到出现一次书号出现两次‘S’的情况,导致题示数据错误
    解决:加上{if (a[l][1] == 'S' && a[i][0] == a[l][0]) break;}
    思路问题:不知道‘s’‘e’怎样去表示,并且完全不懂如何输入,判断时还准备用前面的书号去判断,结果不是这不对就是那不对;
    解决:在老师课堂上提了一嘴后,有了一点思路,再结合超星平台上林老师的讲法,便很快明白了
    

    ##2.2题目名:输入一个字符串,判断是否是合法邮箱(格式正确即可,不管是否真的存在)输入的只能是字母、数字、下划线、@以及.五种, @前后只能是字母或者数字,而且.后只能是com, 是则输出YES ,否则输出NO ###2.2.1代码截图 ###2.2.2伪代码

    int main()
    {
        fgets输入;
        while(a[i]!='')
        {
             if(判断是否是邮箱的合法字符)
                 if(判断是否为‘@’)
                      if判断前后是否为合法字符;
                  if判断是否为‘.’
                      if判断后面是否只有com;
         }
    

    ###2.2.3造测试数据 | 输入数据| 输出数据 | 说明 | | ----- | --------- | ----------- | |adf12@qw213.com | YES | 题示数据 | |adf12@qw213.com12|NO| com后面有后缀的 | |adf12@ qw213.com |NO | 不合法字符 | ###2.2.4PTA提交列表及说明 说明:

    段错误:用了getchar()来输入
    解决:其实两种应该都可以,但PTA似乎只认fgets()
    部分正确:.com后有后缀的
    解决:在判断.com时,a[i+4]必须等于‘’
    部分正确:邮箱地址内有非法字符,无法跳出判断
    解决:不符合条件时,return 0跳出,结束判断
    

    ##2.3题目名:向一个n×m的数组中输入一组整数(n<=10,m<=10),然后输出其中的最大值、最小值,并输出这两个值的下标 ###2.3.1伪代码

    int main()
    {
         while(输入==2)
               循环输入数组数据;
         for 0到n
              for 0到m
                   if判断最大的数据;
                   if判断最小的数据;
          输出答案;
    }
    

    ###2.3.2代码截图 ###2.3.3造测试数据 | 输入数据| 输出数据 | 说明 | | ----- | --------- | ----------- | |3 5 57 30 66 41 98 11 93 54 62 31 49 87 71 70 37| max=98 row=0 col=4 min=11 row=1 col=0 | 题示数据 | |3 5 57 30 66 41 98 11 93 54 62 31 11 93 54 62 98| max=98 row=0 col=4 min=11 row=1 col=0 |在同一数列中,同时有最大最小值| ###2.3.4PTA提交列表及说明 说明:

    答案错误:输入题型是ACM型,多组数据输入
    解决:去问了问学长(应该很6吧),告诉我用这种做法,并且叫我多多看看ACM,确实,ACM里有许多骚操作,自叹不如,以后一定会多多看看,让自己“骚起来”;
    格式错误:输出时空格不对
    解决:很神奇的输出,明明复制时有很明显的空格,但确是不加空格正确
    

    #阅读代码

    学习地方: (1)找到了一个与上面那输入多组数据的题相差无几,也是输入多组数据的题; (2)还有这句“strlen(st) != 4”统计字符串的长度; (3)简单看了一些ACM的题目,好像函数定义都是写在前面的,并没有像我们前面一个声明,后面一个定义,这种方法显然更节省时间; (4)还有一个不一样的地方,就是他的定义int i;int len;在中间,对于我们初学者我觉得应该还是定义在前面;但以后熟悉了应该也可以在需要的地方再进行定义也可以吧

  • 相关阅读:
    11、sqlite
    10、正则
    9、bs4
    8、异常与import
    7、文件
    6、函数
    4、字典及集合
    3、元组
    1、python基本语法
    shell编程 15 --- shell 脚本调试技巧
  • 原文地址:https://www.cnblogs.com/200157zy/p/11874809.html
Copyright © 2011-2022 走看看