• 数组


    数组

      [注] 使用数组的目的,是为了方便地批量定义变量

      [前言] c语言中提供了数组,可以实现批量地定义相同类型的变量,在我们需要多个相同类型的变量时,可以选择使用数组

      数组分为两类:一维数组,二维数组

     

    一、一维数组

      一.[一维数组的定义]

      类型符 数组名[元素个数];

      类型符,可以是int,char,double等等这些基本数据类型,类型符决定了数组中多个变量的类型

      数组名,数组名必须符合标识符的命名规则

      元素个数,表示数组一次性定义的变量的个数(数组中包含的元素个数)

         例如:int array[4];

      二.[一维数组---元素表示]

      int array[4];

      [注] 数组中元素的下标是从0开始的

      array[0]

      三.[一维数组的特点]

      <1>数组中每个元素的类型都相同

      <2>数组中每个元素是由数组名和下标唯一确定的

      <3>数组元素下标从0开始,最大到元素个数减1

      <4>数组元素之间是紧密相连的

      盖住数组名,剩下的部分就是数组的类型

      数组所占总内存空间,是由数组的类型决定的

      四.[一维数组---初始化]

      数组的初始化的目的,是为了让数组中每个元素都有一个确定的值

    //完全初始化
    int array[4]={1,2,3,4};
    //部分初始化
    int array[4]={1,2};//编译器会优先取初始化列表中的值给数组前面的元素赋值,那些未显示初始化的元素默认初始化为0
    //数组清空
    int array[400]={};

      五.[一维数组---赋值]  

    //一维数组---赋值
    int array[4]={1,2,3,4};
    //数组不能整体赋值,只能单个元素单独赋值
    array2[0]=10;
    array2[1]=array[1];
    //通过循环,依次读取数据给数组的每个元素赋值
    for (int i=0; i<4; i++)
    {
        scanf("%d",&array[i]);
    }

      六.[数组下标问题]

      数组元素的下标是从0开始的

      <1>数组下标

        数组定义时,数组的下标表示的是数组中元素的个数

      <2>数组元素的下标

        使用数组元素时,下标表示的是元素在数组中的位置

      <3>数组下标越界问题

        数组下标使用的合法范围为:0~元素个数-1

        数组下标越界可能会导致程序终止

      [注] 在程序运行过程中如果发生以下报错信息,一般都是数组使用越界导致的---Thread 1:signal SIGABRT

      七.[数组排序]

      int array[10]={7,2,6,3,4,9,5,1,8,10};

      [冒泡法]

      思想:<1>数组中待排序数,从左往右,依次取两两相邻的元素进行比较,前一个元素大于后一个元素,就交换这两个元素

          <2>第一趟比较完毕时,所有参与排序元素中最大值放在所有元素的结尾

          <3>重复以上步骤,直到所有元素排序完毕

    //外层循环,控制比较的趟数
    for (int i=1; i<10; i++)
    {
        //内层循环,控制具体某一趟的比较次数
        for (int j=0; j<10-i; j++)
        {
            if (array[j]<array[j+1])
            {
                //交换相邻的两个元素
                //交换的主角是array[j]和array[j+1]
                int temp;
                temp=array[j];
                array[j]=array[j+1];
                array[j+1]=temp;
            }
        }
    }
    //打印数组中的每个元素
    for(int i=0;i<10;i++)
    {
        printf("%d ",array[i]);
    }

      [选择法]

      思想:<1>取数组中未排序元素中最左边的元素,依次和右边其他元素进行比较,如果前一个比后一个大,交换两个元素

          <2>第一趟比较完毕时,所有参与排序元素中最小元素,放在所有参与排序元素的最左边

          <3>重复以上步骤,直到所有元素排序完毕

    //外层循环,控制比较的趟数
    for (int i=0; i<9; i++)
    {
        //内层循环,控制具体某一趟的比较次数
        for (int j=i+1; j<10; j++)
        {
            if (array[i]>array[j])
            {
                //交换相邻的两个元素
                //交换的主角是array[i]和array[j]
                int temp;
                temp=array[i];
                array[i]=array[j];
                array[j]=temp;
            }
        }
    }
    //打印数组中的每个元素
    for(int i=0;i<10;i++)
    {
        printf("%d ",array[i]);
    }

     

    二、二维数组

      一.[二维数组的定义]

      类型符 数组名[元素个数][元素的元素个数];

      例子: int arr[4][4];//这是一个二维数组,这个二维数组具有4个元素,每个元素的类型是int[4] 

      二.[二维数组---元素表示]

       int arr[4][4]; 

      元素:arr[0],arr[1],arr[2],arr[3]

      第一个元素arr[0]

      第二个元素arr[1]

      第三个元素arr[2]

      第四个元素arr[3]

      十.[二维数组---初始化]

    //完全初始化
    int array[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
    int array2[3][3] = {{1,2},{4,5,6},{}};
    int array3[3][3] = {{},{},{}};
    //部分初始化
    int array4[3][3] = {{1,2}};

      十一.[其他]

      二维数组赋值

      数组不能整体赋值,只能单个元素单独赋值.

      array4[0] = array3[0];

      二维数组在使用过程中,数组元素下标不能越界访问.

     

    三、练习

      1.将一个5元素数组中元素,相邻的两两相加,找出最大的组合;打印出是哪两个元素

    int a[5],sum=0,b=0,x=0,y=0;
    for (int i=0; i<5; i++)
    {
        scanf("%d",&a[i]);
    }
    for (int i=0; i<4; i++)
    {
        sum=a[i]+a[i+1];
        if (sum>b)
        {
            b=sum;
            x=a[i];
            y=a[i+1];
        }
    }
    printf("%d %d
    ",x,y);

      2.输入10个数,相邻的两个绝不相同。输出每个递增递减序列,并输出有多少个这种序列

        1 2 3 2 4 5 6 7 6  3

        1 2 3

        3 2

        2 4 5 6 7

        7 6 3

        总共:4

    #include <stdio.h>
    
    int main(int argc, const char * argv[])
    {
        int a[10],n=1;
        for (int i=0; i<10; i++)
        {
            scanf("%d",&a[i]);
        }
        for (int i=1; i<9; i++)
        {
            if ((a[i-1]-a[i]<0&&a[i]-a[i+1]<0)||(a[i-1]-a[i]>0&&a[i]-a[i+1]>0))
            {
                printf("%d %d ",a[i-1],a[i]);
            }
            else
            {
                printf("%d %d
    ",a[i-1],a[i]);
                n++;
            }
        }
        printf("
    总共:%d
    ",n);
        return 0;
    }
  • 相关阅读:
    爬虫伪装头部
    selenium的简单使用
    selenium 安装与 chromedriver安装
    python多线程和线程池
    分析微信好友列表信息(json)
    BeautifulSoup简介
    Java泛型中extends和super的理解
    java 泛型--桥方法
    java 资源文件的读取
    java 清单文件
  • 原文地址:https://www.cnblogs.com/firstsky/p/5374921.html
Copyright © 2020-2023  润新知