• C语言学习笔记(八)数组


    1数组

    在程序设计过程中我们往往需要处理一批相同类型的数据,如果使用基本类型定义变量来储存,显然是不方便的,这是我们就需要使用数组了。

    2数组特点

    1.数组大小必须是确定的,不能随机改变的。

    2.数组的元素必须是相同类型的,不允许出现混合类型。

    3一维数组

    3.1一维数组的定义:

    类型说明符 数组名[常量表达式]

    例如:

    int a[10]

    数组的生命需要注意以下几个问题:

    1.数组的命名规则与变量相同;

    2.常量表达式代表的是数组元素的个数,也就是数组的长度;

    3.数组的下标是从0开始的,最后一个元素的下标是数组长度减1

    4.数组的定义可以和普通变量一起声明和定义

    Float i,j[];

    3.2一维数组的引用:数组名[下标表达式];

    例如:int a[5]; a[3]=10;

    其中下标表达式可以是任意类型的表达式,但值必须是非负整型的。

    数组分配内存空间是连续的空间,地址从低地址到高地址。

    例子代码:

    #include "stdio.h"
    main() { 
       float score[10];
       int i;
       printf("please input scores:\n");
       for (i=0;i<10;i++)               /*数组下标为0~9*/
          scanf("%f",&score[i]);       /*依次输入每个数组元素*/
       printf("\n");
       for(i=0;i<10;i++)
       printf("the %d score %f\n",i+1,score[i]);
    }

    一般需要一次访问数组元素时,往往使用循环来实现,在循环时应特别注意数组的下标和循环的次数等问题,防止出现下标越界的错误。

    3.3一维数组的初始化:数组类型 数组名[数组长度]={数组元素值};

    例如下面的语句:
    int a[3]={1,2,3};

    注意:

    1.定义是可以给数组全部元素赋初值,例如:

    float f[3]={1,2,3};

    2.也可以只给一部分赋值:

    float f[3]={1,2};

    这样的话,程序自动从低到高给数组元素赋值,其余的元素值为0.

    3.在对数组的全部元素赋值时,可以不指定数组的长度,但[]不能省略:

    int a[] = {1,2,3};

    4.特别注意的是,数组初始化的赋值方式只能用于数组在定义的同时赋值,在定义之后只能一个一个的赋值,例如下面就是错误的:
    int a[4];

    a={1,2,3,4}

    例子代码:

    #include "stdio.h"
    main() {
      int i;
      int a[10]={1,2,3,4,5,6,7,8,9,10};              /*全部初始化*/
      int b[]={1,2,3,4,5,6,7,8,9,10};                /*全部初始化时,可省略元素的个数*/
      int c[10]={1,2,3,4,5};            /*部分初始化,其余元素的个数为0,数组的长度不可以省略*/
      int d[10];                    /*没有赋初值,则数组元素的值不定,同样的数组的长度不可省略*/
      for (i=0;i<10;i++)
        printf("%d  ",a[i]);
      printf("\n");
      for (i=0;i<10;i++)
        printf("%d  ",b[i]);
      printf("\n");
      for (i=0;i<10;i++)
        printf("%d  ",c[i]);
      printf("\n");
      for (i=0;i<10;i++)
        printf("%d  ",d[i]);
      printf("\n");
    }

    3.4一维数组的使用实例

    保存30个学生的成绩,查看各分数段人数,计算出优秀率和及格率,同时输出所有学生的成绩,并对不及格的做出标记。

    代码:

    #define  N  30
    #include "stdio.h"
    main() { 
    float score[N];
    int count[4]={0,0,0,0};
    int i;
    float rate1,rate2;
    for(i=0;i<N;i++){    /*输入成绩同时统计成绩的等级*/
      scanf("%f",&score[i]);
      if (score[i]>=85 &&score[i]<=100) 
        count[0]++;
      else if (score[i]>=70)
       count[1]++;
      else if (score[i]>=60)
        count[2]++;
      else
      count[3]++;
      }
    rate1=(float)count[0]/N;    /*计算优秀率和及格率,注意强制类型转换*/
    rate2=(float)(N-count[3])/N;
    printf("the number 85-100 %d\n",count[0]);  /*输出个分数段的人数*/
    printf("the number 70-84 %d\n",count[1]);
    printf("the number over 60 %d\n",count[2]);
    printf("the number under 60 %d\n",count[3]);
    printf("the good rate %.2f,the fail rate %.2f\n",rate1,rate2);  /*输出优秀率和及格率*/
    for (i=0;i<N;i++){  /*输出分数,以及不及格的提示*/
      if (score[i]<60)   
           printf(" %d  fail,socre is %.1f\n",i+1,score[i]);  /*学号和相应的成绩下标之间差1*/
       else 
     printf("%d score is %.1f\n",i+1,score[i]);
    }

    思考练习:

    处理20个斐波那契数列;

    求数组的最大值;

    冒泡排序;

    选择排序;

    二分查找:

    4二维数组

    4.1二维数组的定义:

    数据类型 数组名[常量表达式1][常量表达式2];

    例如:int [30][4];

    4.2二维数组的引用:

    数组名[行下标][列下标];

    二维数组的输入输出例子代码:

    #include "stdio.h"
    #define M  3
    #define N 4
    main( ){
        int  i , j , a[M][N] ;
        for(i=0 ;  i<M ;  i++)                  /*外循环控制行*/
           for(j=0 ;  j<N;  j++)               /*内循环控制列*/
             scanf("%d" , &a[i][j]);
       printf("array a is :\n");
       for(i=0 ;  i<M ;  i++){
           for(j=0 ;  j<N ;  j++)
             printf("%d ",  a[i][j]) ;
        printf("\n");  
           }
    }

    4.3二维数组的初始化

    1.可以将所有数据写在一个大括号内,以逗号分隔,按数组元素在内存中的顺序对二维数组赋值:

    int a[2][3]={1,2,3,4,5,6}

    2.也可以对数组的每个元素赋值,将二维数组的每一行写在一个花括号内:int a[2][3]={{1,2,3},{4,5,6}};

    3.也可以对数组部分赋值:int a[2][3]={1,2,3,4};相当于:

    int[2][3]={{1,2,3},{4}};

    4.和一维数组一样,如果对数组的全部元素赋值,可以不指定第一维的长度,但是第二维必须指定长度。

    二维数组初始化例子代码:

    #include "stdio.h"
    main() {
      int a[][3]={1,2,3,4,5,6};     /*全部初始化的时候可以省略第一维*/
      int b[2][3]={{1,2,3},{4,5,6}};   /*不可写成 int b[2][3]={{1,2,3}{4,5,6}};的形式*/
      int c[3][3]={{1},{2},{3}};
      int d[3][3]={{2},{0},{4}};  /*第二行的元素空时不可省略{}和{}内的0*/
      int e[3][3]={{0,1},{0,0,3},{4}};   /*对一列中的其他值赋值时,不可省略前面的0*/
      int i,j;
      printf("output array  a:\n");  /*分行输出各个数组的值*/
      for (i=0;i<2;i++){
        for (j=0;j<3;j++)
           printf("%d  ",a[i][j]);
        printf("\n");
      }
      printf("output array  b:\n");
      for (i=0;i<2;i++){
        for (j=0;j<3;j++)
           printf("%d  ",b[i][j]);
       printf("\n");
      }
      printf("output array  c:\n");
      for (i=0;i<3;i++){
        for (j=0;j<3;j++)
           printf("%d  ",c[i][j]);
       printf("\n");
      }
      printf("output array  d:\n");
      for (i=0;i<3;i++){
       for (j=0;j<3;j++)
            printf("%d  ",d[i][j]);
       printf("\n");
      }
      printf("output array  e:\n");
      for (i=0;i<3;i++){
        for (j=0;j<3;j++)
           printf("%d  ",e[i][j]);
      printf("\n");
      }
    }

    4.4二维数组练习

    1.将一个二维数组的元素按照矩阵形式输出。

    2.矩阵转换,行列互换。

    5数组整体练习

    1.判断回文。

  • 相关阅读:
    Hibernate整合C3P0实现连接池<转>
    Navicat连接数据一直是“正在连接...” 状态
    GTID复制报错处理:Last_Error: Error 'Can't drop database 'test'; database doesn't exist' on query
    pt-table-checksum解读
    Error 'Cannot add or update a child row: a foreign key constraint fails故障解决
    MySQL中explain的type类型
    MySQL中innodb表主键设计原则
    Java报错--Unsupported major.minor version 52.0
    mysql插入大量数据
    MySQL初始化故障-----mysql_config_editor中的坑
  • 原文地址:https://www.cnblogs.com/SunnyYue/p/3970279.html
Copyright © 2020-2023  润新知