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

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

    0.展示PTA总分(两张)


    1. 本章学习总结

    1.1 学习内容总结

    1.1.1 查找数据的方法

    • 直接查找
      使用循环语句从头到尾历遍数组,把所有的数据都查一遍.
    int key;
    
    int num[10]={0,1,2,3,4,5,6,7,8,9}
    
    scanf("%d",&key);
    for(int i=0;i<len;i++)
    {
          if(key==num[i])
          {
                printf("%d",i);
          }
    }
    if(i>=9)
    {
          printf("not found");
    }
    
    

    直接查找在要查的数组元素较少时还不错,但是面对数组元素较多时,如10000000000....,直接查找就显得很吃力了。

    • 二分查找
      • 二分法查找原理如下:
    1. 将有序数组分为三个部分,分别为中间值前(中间值数之前的一组数据),中间值 和中间值后(中间值之后的一组数据);
    1. 将要查找的数与中间值的数相比较,等于则退出查找,小于则在中间值前进行比 较,大于在在中间值后进行比较,依次递归,直至查找到对应的值为止;
    • 二分法流程如下:

    2. 插入数据的方法

    • 先用循环试着历遍数组,逐个比较大小,以找到插入数应该放的位置。在插入位置以后的数组元素依次右移一位完成。

    3. 删除数据的方法

    1. 删除数组中指定位置的元素

      • 设置循环,从要删除的元素所在位置开始,之后的元素依次向左移动一位,直接把要删除的元素覆盖。
    2. 删除数组中的重复元素

      1. 定义一个辅助数组hash[?],下标为目标数组的元素(如果目标数组是字符数组,需减去‘ ’转换成特定的整型数字),辅助数组初值为0;

      2. 输入一个数N,判断hash[N]是否为大于0,如果是则表明元素在目标数组中重复。若hash[N]等于0,说明仅有一个,无重复

      3. 设置循环,如果hash数组对应值为0,就输出;大于0的则不输出,即重复的元素被删除

    1.1.4 数据排序的方法

    • 选择排序

      • 选择排序的步骤:
      1. 在未排序的n个数(a[0]~a[n-1])中找到最小值,将它与a[1]交换;
      1. 在剩下的未排序的n-1个数(a[1]~a[n-1])中找到最小数,将它与a[1]交换;

      n-1. 在剩下的未排序的2个数(a[n-2]~a[n-1])中找到最小数,将它与a[n-2]交换;

      • 选择排序的流程(以三个数为例):
    • 冒泡排序

      • 冒泡序列的步骤:
      1. 在未排序的n个数中,a[0]与a[1]比较大小,如果a[0]比a[i]大,则交换两个数;
      1. a[1]与a[2]比较大小,如果a[1]比a[2]大,则交换两个数;
        ...

    1.1.5 数组做枚举用法

    枚举类型在使用中有以下规定:

    1.枚举值是常量,不是变量。不能在程序中用赋值语句再对它赋值 。
    例如对枚举weekday的元素再作以下赋值:
    sun=5;
    mon=2;
    sun=mon;
    都是错误的。

    1. 枚举元素本身由系统定义了一个表示序号的数值,从0开始顺序定义为0,1,2 …。
    1. 枚举的定义枚举类型定义的一般形式为:
      enum 枚举名{ 枚举值表 };
      在枚举值表中应罗列出所有可用值。这些值也称为枚举元素。

    1.1.6 哈希数组的用法

    • 定义一个辅助数组,用时间换空间
      1. 定义一个辅助数组hash[?],下标为目标数组的元素(如果目标数组是字符数组,需减去‘ ’转换成特定的整型数字),辅助数组初值为0;

      2. 输入一个数N,判断hash[N]是否为大于0,如果是则表明元素在目标数组中重复。

      3. 若hash[N]等于0,说明仅有一个,无重复。

    
    初始化hash数组为0
    for i=1 to n
        输入一个数 data
        if
            hash[data]==1:
                有重复数据
                return 0
    end for
    return 1
    

    1.1.7 字符、字符串数组

    • 一维字符数组

      • 一维字符数组用于窜访字符型数据。它的定义、初始化和引用与其他类型的一维数组一样。例如:
    char str[5];
    str[5]={'h','e','l','l','o'}
    
    • 对静态数组的部分元素赋值,其他位置元素为0
      例如:
    ststic char s[80]={'h','e','l','l','o'}
    
    
    • 字符串

      • 字符串可以存放在一维数组中。例如:
        char str[4]={'a','b','c',''}

      • 字符数组的初始化乘可以使用字符常量。例如:
        char str[4]="abc";

      • 字符串初始化

    while((str[i]=getchar())!='
    ')
    {
          i++;
    }
    str[i]='';
    
    

    或者fgets(str);

    字符串有结束符,结束符占一个字节

    2. PTA实验作业

    2.1 题目(1)

    2.1.1 伪代码

    2.1.2 代码截图

    2.1.3 代码对比同学

    • 同:都是先用循环试着历遍数组,逐个比较以找到插入数应该放的位置。

    • 异:找到位置后,把x插入数组的操作不同:

      • 我的方法是在插入位置以后的数组元素依次右移一位完成;
      • 同学的方法是找到位置后,把比x大的数与x进行交换,之后在新的的数组中,找新的x所在的位置。

    两种方法的实质都是通过交换实现插入数据,我是直接逐个交换,而同学的方法是把x当做一个辅助参数,实现交换。

    • 特点:相对于同学的方法,他的代码量少了一点,但我的相对来说运行效率上要更胜一筹。

    2.2 题目(2)

    2.2.1 伪代码

    2.2.2 代码截图

    2.2.3 代码对比超星

    • 同:同超新视频一样,我们都是先从行找最大值,再在列找最小值的过程;

    • 异:

      • 在找到行最大值的坐标后,我选择继续找列最小值的横坐标,比较两者的横坐标以确定两者是不是同一个数;

      • 超星视频所讲的是,找到行最大值后,在它所在的那一列,找是否有比它更小的值,如果有,则说明它不是列最小的,即它不是鞍点。

  • 相关阅读:
    python:使用 watchdog 监控文件变化
    CSS 宽高度百分比加减像素的办法
    foxmail登陆失败LOGIN Login error user suspended
    IDEA 自动删除类中无用的import包
    CSS命名规范——BEM思想
    jQuery文件上传插件 uploadify 的使用
    textarea 固定大小,滚动条,限制拖动,文字对齐等
    命令行工具 Cmder 的使用与配置
    转:【MySQL】连接错误过多:is blocked because of many connection errors; unblock with 'mysqladmin flush-host
    OpenJFX的相关Maven依赖
  • 原文地址:https://www.cnblogs.com/ly1218/p/14130461.html
Copyright © 2011-2022 走看看