• 数组


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

    目录
    0.PTA展示
    1.本章学习总结
    1.1学习内容总结
    1.1.1 数组总共如何查找数据
    1.1.2数组中如何插入数组
    1.1.3数组中如何删除数据
    1.1.4数组中目前学到的排序方法,主要思路
    1.1.5数组做枚举用法,有哪些案例
    1.1.6哈希数组用法,目前学过哪些案例,举例展示
    1.1.7字符数组、字符串特点及编程注意事项
    2PTA实验作业
    2.1 数组循环左移
    2.1.1伪代码
    2.1.2代码截图
    2.1.3代码对比
    2.2鞍点
    2.2.1伪代码
    2.2.2代码截图
    2.2.3和超星视频的区别,各自优缺点
    2.3切分表达式
    2.3.1伪代码
    2.3.2代码截图

    0.展示PTA总分


    1.本章学习总结

    1.1学习内容总结

    1.1.1查找数据用二分法

       int mid;
       int low,high;  //low为左界,high为右界
       while(high>low)  //high一直减小,low一直增大,当high<low时,说明没找到
       {
         mid=(high+low)/2;
         if(a[mid]>key)  //key为要查找的数
         high=mid-1;  //把右界改成mid前的一个数
         else if(a[mid]<key)
         low=mid+1;  //把左界改成mid后的一个数
         else
         return mid;  //说明找到了 key=mid
       }
       if(high==low)
       {
          if(a[high]==key)
           return high;  //找到了
          else
           return 0;  //没找到
       }
    

    1.1.2顺序查找

      int flag=0;
      for(i=0;i<N;i++)
        {
            scanf("%d",&a[i]);
            if(a[i]==X)
            {
              printf("%d",i);
              flag=1;  //找到了
            }
        }
        if(flag==0)
            printf("Not Found");  //所有数都查完了都没相等的,所以没找到
    

    1.1.3数组中插入数据

    伪代码

    /*先通过对比找到位置也就是下标*/
    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;/* 最后把我们的数字插进去,这里本来的数字被我们往后面移了,数据就不会被覆盖*/
    
    for(i=0;i<N;i++)  //按从小到大排列的一组数据
        {
            if(X<a[i])  //找到恰好比X大的a[i]
            {
                for(j=N;j>i;j--)
                {
                    a[j]=a[j-1];  //从a[j]最后一项到a[i]都向后移一位
                }
                break;
                
            }
        }
    a[i]=X;  //把X放在a[i]的位置
    

    pta代码截图


    1.1.4数组中删除数据

    可以通过把不删除的数据放到另一个数组中
    也可以通过每删除一个数据后把其他数据左移一位

     for(i=0;i<k;i++)
        {
            scanf("%d",&x);  //x为要删除的第几个数
            loc=x-1;  //loc记住这个位置(eg:x为3,则要删除的是a[2],所以数组的下标是x-1)
            for(j=loc;j<n-1;j++)
            {
                a[j]=a[j+1];  //数据左移
            }
            
        }
    

    pta代码截图


    伪代码

    //题目要求是把数组中不符合的空格删除
    int i=0,j=0;
    while(stri[i]!='')//字符型的往往是以''作为结束的标志,也是我们平时很好用的工具
    {
    if(str[i]!=' ')//当数组中的字符符合不是空格的条件
    {
    str[j++]=str[i];//我们就把字符移到新的下标,也就是j下标所在的数组数
    i++;//要让i++,来判断下一个字符
    }
    str[j]=0;//结束时要给最后的字符赋上结束标志
    }
    

    1.1.5排序方法有:

    选择排序

    (思路:在一组数中选出最大的数和第一个位置的数交换,再在剩下的数中选出最大的数和第二个位置的数交换,直到第n-1个数和第n个数比完为止)

    for(i=0;i<n-1;i++)
        {
            max=i;
            for(j=i;j<n;j++)
            {
             if(a[j]>a[max])
                 max=j;
            }
             temp=a[max];
                a[max]=a[i];
                a[i]=temp;
        }
    

    冒泡排序

    (思路:按从小到大顺序排列的话,通过相邻两个元素比较交换,每扫描一次,当前数列的最大值就被存放到当前数列最后一位)

    for(i=0;i<K;i++)  //外层循环表示扫描次数
        {
            for(j=0;j<N-1;j++)  //内层循环表示交换次数
            {
                if(a[j]>a[j+1])
                {
                    temp=a[j];
                    a[j]=a[j+1];
                    a[j+1]=temp;
                }
                
             }
        }
    

    1.1.6哈希数组

    哈希数组就是把可能出现的所有的数字作为一个数组的名字,当出现这样的数据就让数组里面+1.到时候再看里面是否为单独数据。超过1就不输出。

    1.1.7字符数组

    字符串:一个特殊的一维字符数组
    注:
    ·字符串结束符''=0 字符串遇''结束,''之后的其他数组元素与该字符串无关,为随机值
    ·字符串需要用一维数组存储
    ·数组长度>=字符串的有效长度+1
    ·输出字符串的循环条件:s[i]!=''或si
    ·字符串的输入:
    while((str[i]=getchar())!=' ')
    i++;
    str[i]=''; 加入输入结束符
    fgets函数输入:
    形式:fgets(a,10,stdin) (a为数组名,10为数组长度,stdin为标准输入流,固定)
    循环条件须设置为:for(i=0;a[i]&&a[i]!=' ';i++)

    2.0 PTA实验作业

    2.1 数组循环左移

    2.1.1伪代码

    移动距离m,数组长度n,
    数组下标i,j,
    数组a[200],
    for i 100 to 100+n输入到数组后半段
    for i 100+m to 100+n do
    i++,j++,a[i]-<a[j]
    for i 100 to 100+m do
    a[i]-<a[j]
    输出
    

    2.1.2代码截图


    2.1.3代码对比



    我的代码用了个偷机的办法,将一个数组当成两个用,省去了移动数组
    同学的代码函数封装,思路清晰,页面简介明了

    2.2找鞍点

    2.2.1伪代码

    输入: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跳出循环,节省时间

    2.3切分表达式

    2.3.1伪代码

    for(i=0; str[i]!='';i++)
          if str[i] 是数字或小数点
                输出str[i]
                if str[i+1]不是数字,不是小数点      
                      输出换行符
          else
                if str[i]为'+'或'-'
                      if str[i-1]为'('或i=0      
                            输出str[i]      
                      else  输出str[i]和换行符      
                 else 输出str[i]和换行符
    end for
    

    2.3.2代码截图

    2.3.3代码对比

    超星代码用函数封装,简洁清晰,用continue提前结束循环,节省时间

  • 相关阅读:
    1 . CentOS 7的yum更换为国内的阿里云yum源
    0. vagrant+vbox创建centos7虚拟机
    git上传到码云和下载到本地
    spring boot udp或者tcp接收数据
    你好,博客园
    使用firdder抓取APP的包
    初见loadrunner
    sublime快捷键大全
    html中行内元素与块级元素的区别。
    html.css溢出
  • 原文地址:https://www.cnblogs.com/wxy1459995649/p/14130889.html
Copyright © 2020-2023  润新知