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

    0.展示PTA总分

    1.本章学习总结

    1.1 学习内容总结

    1.1.1数组的定义和赋初值

    1.1.1.1一维数组

    1.1.1.1.1一维数组形式为:类型 数组名[数据个数]
    如:

    int a[5](定义一个变量名为a的可以存储五个整型数据的数组)
    char op[5](定义一个变量名为op的可以存储五个字符数据的数组)
    

    1.1.1.1.2赋初值:以一维整型数组为例
    情况一:

    逐个全部赋值 a[5]={1,2,3,4,5};(注意:将1赋值给a[0],将2赋值给a[1]...以此类推)
    

    情况二:

    动态数组部分赋值 int a[5]={1,2};(此时将1赋值给a[0],将2赋值给a[1],而a[2],a[3],a[4]都由系统自动赋随机值)
    静态数组部分赋值 static int a[5]={1,2};(此时将1赋值给a[0],将2赋值给a[1],而a[2],a[3],a[4]都由系统自动赋值为0)
    

    1.1.1.2二维数组

    1.1.1.2.1二维数组形式为:类型 数组名[行长度][列长度]
    如:

    int a[3][3](定义一个变量名为a的3行3列的可以存储九个整型数据的二维数组)
    char op[3][3](定义一个变量名为op的3行3列的可以存储九个字符数据的二维数组)
    

    1.1.1.2.2赋初值:以二维整型数组为例
    情况一:分行赋值法

     a[3][3]={{1,2,3},{4,5,6},{7,8,9}};
    (将{1,2,3}赋值给第1行即a[0][0],a[0][1],a[0][2]...以此类推)
    
    static int a[3][3]={{1,2,3},{},{4,5}};
    (将{1,2,3}赋值给第1行即a[0][0],a[0][1],a[0][2],将{4,5}赋值给第3行a[2][0],a[2][1],而其余元素都由系统自动赋值为0)
    

    情况二:顺序赋初值

    int a[3][3]={1,2,3,4,5,6,7,8,9};(按从行到列的顺序给所有元素赋值)
    int a[3][3]={1,2,3,4,5,6,7};(按从行到列的顺序依次给元素赋值,a[2][1],a[2][2]由系统赋随机值)
    

    1.1.2数组中查找数据

    1.1.2.1顺序查找法(以一维数组为例)

    如需要查找数组中存储x的为哪一个
    for(i=0;i<n;i++)
    {
    if(a[i]==x)
     {
        printf("index is %d",i);//输出相应所需下标
      }
    

    1.1.2.2二分查找法(适用于数组中数按大小关系排列的情况)

    如需要查找数组中存储x的为哪一个
    如在数组a[10]中查找,则a[5]为数组的中间数,用x和a[5]比较,则可以确定所查找的数在前半部分还是后半部分,缩小查找范围,以此类推,直到最后找出答案。
    

    1.1.3插入数据(原数据有n个,按从小到大顺序排列)

    定义 插入数x;
    定义 循环变量i ,j;
    输入 x;
    from i=0 to i<n;
    {
    如果 a[i]大于x
    {
       from j=i+1 to j<=n;
      {
          a[j]=a[j-1];
      }
       a[i]=x;
      退出循环;
    }
    如果 a[i]小于x且i=n-1;
    {
      a[n]=x;
    }
    }
    

    1.1.4数组排序

    1.1.4.1选择排序法

    思路:假设需要排序的数据有n个

    第一步:在未排序的n个数(a[0]~a[n-1])中找到最小数,将其和a[0]交换;
    第二步:在未排序的n-1个数(a[1]~a[n-1])中找到最小数,将其和a[1]交换;
    .....
    第n-1步:在未排序的2个数(a[n-2]~a[n-1])中找到最小数,将其和a[n-2]交换;
    

    1.1.4.2冒泡排序法

    思路:构建两个循环

    for i=1 to i<n //外部循环
     for j=0 to j<n-i //内部循环
        {
         如果a[j]大于a[j+1]
         两者交换
        }
    

    1.2 本章学习体会

    1.2.1我认为本章的数组学习与前几章的知识特点有很大不同。已学习知识点最大的共性就是逻辑性强,这毋庸

    置疑,但本章不管是一维数组还是二维数组,学习难度增大了,关键与前几章相比,它对抽象思维能力的
    要求更高,更需要多练习去熟悉其中的规律。对于本章中的字符串数组的相关知识点,我还有许多不懂或
    是不熟悉之处,如字符串的多种输入和输出方法和需注意点,还有对字符串的处理,多个字符串的联系等等。

    1.2.2代码量统计

    820行左右(自认为没有达标,偷懒了T.T)

    2.PTA实验作业

    2.1二维数组每列排序

    2.1.1 伪代码

    定义二维数组a[4][5]
    定义循环变量i,j,k
    from i=0 to i<4 
      from j=0 to j<5
         存入数据
    from j=0 to j<5           \列不变,逐列操作
      from i=0 to i<4-1       \行上进行操作
         from k=i+1 to k<4     \选择排序法进行交换
    如果a[i][j]大于a[k][j]
    两者交换
    输出交换后的数组a[4][5]
    

    2.1.2 代码截图


    2.1.3 造测试数据

    输入一:

    输出一:无结果
    输入二:

    输出二:

    说明二:正确答案
    输入三:

    输出三:

    说明三:正确答案

    2.1.4 PTA提交列表及说明


    Q1:输入测试数据后按回车键却没有输出任何东西。
    A1:寻找是不是输出最后结果位置的代码发生错误,发现最后用于输出结果的printf写成了scanf。
    Q2:输入题给数据后输出混乱排序的数组。
    A2:发现是交换函数中的行标和列标表示写反了。

    2.2 交换最小值和最大值

    2.2.1 数据处理

    伪代码

    定义循环变量i
    定义数组个数n
    定义min和max用来储存最小值和最大值
    定义flag1和flag2存储需调到第一位和最后一位的数据的下标
    输入n
    from i=0 to i<n
    输入a[i]
    使min等于a[0]
    from i=0 to i<n
    如果a[i]小于等于min
    min=a[i]  flag1=i  flag=1
    如果i等于n-1且flag等于1
    a[0]和a[flag1]交换
    使max等于a[n-1]
    from i=n-1 to i>=0
    如果a[i]大于等于max
    max=a[i]  flag2=i  flag=2
    如果i等于0且flag等于2
    a[n-1]和a[flag2]交换
    输出最后结果
    

    2.2.2 代码截图



    2.2.3 造测试数据

    输入数据 输出数据 说明
    1 3 4 5 6 4 5 1 3 5 1 3 4 5 5 4 5 1 3 6 输入题给数组数据最大个数(10个)
    8 2 5 1 4 1 2 5 4 8 题给输入输出样例
    2 1 1 2 最特殊的两个数交换

    2.2.4 PTA提交列表及说明


    Q1:发现最大数确实在第一个,最小数确实在最后一个,但是原来第一个和最后一个数据消失。
    A1:应该把第一个数和最小数交换,而不是单纯把第一个变成最小数。最大数的移动同理。
    Q2:答案还是和所给样例有偏差。
    A2:发现是顺序有误,第一步应该先对最小数的移动操作,然后才是最大数。

    2.3 题目名3

    2.3.1 数据处理

    伪代码

    
    

    2.3.2 代码截图

    2.3.3 造测试数据

    输入数据 输出数据 说明

    2.3.4 PTA提交列表及说明

    Q1:
    A1:
    Q2:
    A2:
    3.阅读代码

  • 相关阅读:
    我修改/收藏的CSDN知识.(asp.net JavaScript)
    哪里摔倒就在哪里躺下
    显示存储过程的名称、创建时间、修改时间
    Flash Builder 初试(二)绑定和双向绑定
    C#支持中文的格式化字符长度方法
    Flash Builder 初试(一)信息提示窗口
    Flash Builder 初试(三) 使用摄像头
    Null Object 模式
    开放封闭原则(OCP)
    面向对象设计5大准则
  • 原文地址:https://www.cnblogs.com/243050cz/p/11878025.html
Copyright © 2011-2022 走看看