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

    这个作业属于哪个班级 C语言--网络2011,2012
    这个作业的地址 C语言博客作业04--数组
    这个作业的目标 学习数组相关内容
    姓名 王鑫

    0.PTA展示


    1.本章学习总结

    1.1学习内容总结

    1.1.1 数组总共如何查找数据

    如果这个数组是按照顺序的我们可以使用二分法查找,这样效率比较高

    
    for(int i=min;i>=0||i<=top;)
    {
     min=(top+bott)/2;//每轮把中间值更新
    //判断是否为我们需要的数值,并作出相应的变化
      if(date[min]==num)
    {
    printf("find it!");
    break;
    }
    else if(date[min]<num)
    bott=min+1;
    else
    top=min-1;
    }
    
    

    如果不是顺序排列我们可以用数组一个个找

    //设一个循环来做这件事
    for(int i=0;letter!='';i++)//字符型数组的结尾会自动带上一个'',ASCII码为0,所以字符型数组长度要多留一位
    {
    if(letter[i]==num)
    printf("find it");
    break;
    }
    

    1.1.2数组中如何插入数组

    /*先通过对比找到位置也就是下标*/
    for int i to n
    if date[i]=num
    then index=i;
    end if
    end for 
    /* 再把后面的数字一个个往后面移空出一个位置给我们新来的数字*/
    for int i=n to index i--//要从最后面开始挪,才能保留住数据不会被覆盖
    date[i]=date[i+1];
    end 
    date[index]=num;/* 最后把我们的数字插进去,这里本来的数字被我们往后面移了,数据就不会被覆盖*/
    
    • 下面是PTA 上的截图代码

    1.1.3数组中如何删除数据

    数组中的元素删除和数组中插入数据很像。一个是整体左移,一个是整体右移。

    • 像数组中删除数据就是整体左移,让后面的数据把前面要删除的数据覆盖,就能实现删除。
    • 还有一种方法就是重构数组,这个方法来自老师发布的测试用两个下标控制数组,当我们不需要这个元素时就控制一个小标不动,而另一个变换并赋值给前面下标控制的数组数,来达到删除的方式。也可以再创建一个数组,来放新的数组。
    //题目要求是把数组中不符合的空格删除
    int i=0,j=0;
    while(stri[i]!='')//字符型的往往是以''作为结束的标志,也是我们平时很好用的工具
    {
    if(str[i]!=' ')//当数组中的字符符合不是空格的条件
    {
    str[j++]=str[i];//我们就把字符移到新的下标,也就是j下标所在的数组数
    i++;//要让i++,来判断下一个字符
    }
    str[j]=0;//结束时要给最后的字符赋上结束标志
    }
    

    1.1.4数组中目前学到的排序方法,主要思路

    • 冒泡法小的往上交换,就会让小的像泡泡一样浮上去,就称之为冒泡法。
      主要思路:让数组中相邻的数字进行比较,小的往前移。(如果只是扫描一遍这个数组,只能把最大的放在了最后)我们要再多扫描几遍,扫描到所有数字都在自己的该呆的地方。所以这个交换的过程是一个循环,而每次最大的数字都在最后所以扫描的终点我们要再每次扫描时-1。控制扫描每次都在进行,且终点变化,这时我们就要在外面在设置一个循环来使扫描进行多次。
    • 选择排序法,多次扫描,把大的往后面放,来达到最终的排序
      主要思路:设置一个循环来做扫描的工作,在这个循环外面再套一个循环,使扫描我们想要的次数。

    1.1.5数组做枚举用法,有哪些案例

    • 计算某个月的天数
      因为天数和月份有对应关系,可以用二维数组来存放天数,再根据不同的月份找到相应的数字。
    int k,keep;
    /*数组初始化,将每月的天数赋给数组*/
    innt tab[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31},
                   ={0,31,29,31,30,31,30,31,31,30,31,30,31}};
    /*判断闰年,判断year是否为闰年,如果是闰年就让leap=1;不是就让,leap=0*/
    /*计算天数*/
    for(k=1;k<month;k++)
    day=day+tab[leap][k];
    

    1.1.6哈希数组用法,目前学过哪些案例,举例展示

    • 哈希数组是用空间来换取时间,我们查找数据能提高效率。用来查找重复数据很方便。
      哈希数组就是把可能出现的所有的数字作为一个数组的名字,当出现这样的数据就让数组里面+1.到时候再看里面是否为单独数据。超过1就不输出。

    1.1.7字符数组、字符串特点及编程注意事项

    • 字符型数组的结尾会加上'/0',所以我们要把字符型数组的长度要比原来的长度+1;
    • 因为结尾是'/0',所以我们字符型的数组做循环的结束条件,就可以把结束的条件设为不为0;
    • 数组的名字是数组的首地址,传地址时可以传数组名,这时的数组代表的数字是数组第一个,下标为0的。
    • 可以用不同的的输入和输出,scanf("%s",date),fges(date,n,stdin),(gets VS 不能通过);但scanf不能接受空格,已有空格就会停下。
    • fgets()读取到的换行符、文件尾或读完n-1个字符结束,包括换行符。

    2PTA实验作业

    2.1 数组循环左移

    2.1.1伪代码

    //先观察数据的类型需要什么样的变量,然后设置相关的变量
    总数  n,
    左移的位置的下标 m,
    存放数组 a[100]
    //我们把需要的数据输入进来
    输入  n,m,a[];
    for i to n  //先把数组我们要移动的移到后面去
    a[n+i]=a[i];
    
    for i=m(我们初始移动的) to n+m(移动后我们的总长度)//把整个数组往前移
    a[i-m]=a[i];
    //最后输出前面n个数组中的数据
    
    

    2.1.2代码截图

    2.1.3代码对比



    我的代码:for循环有点多,没封装使得有点乱。想法会更直接,粗暴。这样在别的地方就要重新更改代码。我是先把要移动的次数往前移动数组,这样花费的空间会更大,所以使用时还要多留一些空间。
    别人的代码:函数封装,界面简洁,这种可以用的范围更广,分成小的步骤,多次循环就可以让思路清晰,可以用到别的地方。

    2.2鞍点

    2.2.1伪代码

    //先观察应该会有的变量
    /*根据题目要求,我们要设置一个代表矩阵行列数的n,我们会运用到最大值,最小值还有两个下标*/
    输入:n,num[6][6];
    //判断行最大的数值,记住下标(因为下标有两个,所以设置两个循环来分别控制两个下标
    for i to n 
    for j to n//这个循环就可以找到我们这一行的最大值
    如果num[i][j] 大于max
    //记住下标
    index1=i;
    index2=j;
    max=num[i][j];
    end if
    end for// 这时找到这一行的最大值,我们要去找最大值这一列的最小值是不是它自己
    min=max;// 赋值给最小值
    for p to n
    如果 num[p][index2] 小于min
    min附上num[p][index2]的值
    end if
    end for
    如果 min=max
    输出两个下标 index1 和index2 
    end if
    没有等于就输出 NONE;
    end for// (最开始控制数组行下标的)
    

    2.2.2代码截图

    2.2.3和超星视频的区别,各自优缺点

    我的代码:有的地方可以实行跳出,减少不必要的循环时间和资源浪费。变量比较多和复杂。
    超星:代码简洁清晰,使用break来跳出循环,减少不必要的时间浪费。用循环全部完成时变量满足条件,来看是否找到鞍点,和前面使用break结合,可以判断是否能找到鞍点。

    2.3切分表达式

    这题我测试点有一个一直过不去,去看了视频。

    2.3.1伪代码

    if str[i]是'('')''*''/'
    直接输出和换行
    if str[i]是数字和小数点
    if 后一位是数字和小数
    输出,不换行
    else:
    输出+换行
    
    
    if str[i]是'+''-'
    if i==0或前一位是'(':
    输出不换行
    else:
    输出换行
    

    2.3.2代码截图

    {{uploading-image-656361.png(uploading...)}}

  • 相关阅读:
    强关联二维材料1T—TaS2晶体
    超薄二维Mo2C晶体
    稀有的二维狄拉克材料
    大自然中的几何植物
    字符串的内建函数
    python数据模型(特殊方法)
    插入排序
    下载谷歌浏览器(Chrome)扩展离线安装包crx文件最简单的方法
    33. 高精度练习之乘法
    32. 整数加法
  • 原文地址:https://www.cnblogs.com/xiechi/p/14123240.html
Copyright © 2011-2022 走看看