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;在中间,对于我们初学者我觉得应该还是定义在前面;但以后熟悉了应该也可以在需要的地方再进行定义也可以吧

  • 相关阅读:
    LeetCode Missing Number (简单题)
    LeetCode Valid Anagram (简单题)
    LeetCode Single Number III (xor)
    LeetCode Best Time to Buy and Sell Stock II (简单题)
    LeetCode Move Zeroes (简单题)
    LeetCode Add Digits (规律题)
    DependencyProperty深入浅出
    SQL Server存储机制二
    WPF自定义RoutedEvent事件示例代码
    ViewModel命令ICommand对象定义
  • 原文地址:https://www.cnblogs.com/200157zy/p/11874809.html
Copyright © 2011-2022 走看看