C语言数组是什么

描述

C 语言支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合。数组是用来存储一系列数据,但它往往被认为是一系列相同类型的变量。

一、一维数组

一维数组的定义

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

数组特点:[ ] :数组运算符,单目运算符,优先级(1),左结合,不能用( )

编译时分配连续内存

内存字节数=数组维数*
sizeof(元素数据类型)
数组名表示内存首地址,
是地址常量

二、数组的引用

int data[5];     
      data[5]=10;     //C语言对数组不作越界检查,使用时要 注意

数组必须先定义,后使用v只能逐个引用数组元素,不能一次引用整个数组v数组元素表示形式: 数组名[下标]其中:下标可以是常量或整型表达式。

int a[10];
           printf(“%d”,a);      
必须   for(j=0;j<10;j++)
                  printf(“%d\\t”,a[j]);
int a[5]={1,2,3,4,5}; 
 等价于:a[0]=1;  a[1]=2; a[2]=3; a[3]=4; a[4]=5;

说明:

数组不初始化,其元素值为随机数

对static数组元素不赋初值,系统会自动赋以0值

只给部分数组元素赋初值

当全部数组元素赋初值时,可不指定数组长度

static int a[5];
等价于:a[0]=0;  a[1]=0; a[2]=0; a[3]=0; a[4]=0;

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

编译系统根据初值个数确定数组维数

三、程序举例

用冒泡法对10个数排序

算法分析:如果有n个数,则要进行n-1趟比较。
在第1趟比较中要进行n-1次相邻元素的两两比较,
在第j趟比较中要进行n-j次两两比较。
比较的顺序从前往后,经过一趟比较后,
将最值沉底(换到最后一个元素位置),
最大值沉底为升序,最小值沉底为降序。

排序过程:

(1)比较第一个数与第二个数,若为逆序a[0]>a[1],则交换;然后比较第二个数与第三个数;依次类推,直至第n-1个数和第n个数比较为止——第一趟冒泡排序,结果最大的数被安置在最后一个元素位置上

(2)对前n-1个数进行第二趟冒泡排序,结果使次大的数被安置在第n-1个元素位置.

(3)重复上述过程,共经过n-1趟冒泡排序后,排序结束

#include
int main()
{
  int i,j,t,a[10]={5,4,8,3,6,9,7,222,64,88};

  //排序
  for(i=1;i<10;i++)    //外循环控制排序趟数,n个数排n-1趟
  {
    for(j=0;j<10-1;j++)      //内循环每趟比较的次数,第j趟比较n-i次
    {
      if(a[j]>a[j+1])     //相邻元素比较,逆序则交换
      {
        t=a[j];
        a[j]=a[j+1];
        a[j+1]=t;
      }
    }
  }

  printf("排序后的结果是:\\n");
  for(i=0;i<10;i++)
  {
    printf("%d  ",a[i]);
  }
  printf("\\n");

  return 0;
}

四、多维数组

定义方式: 
数据类型 数组名[常量表达式][常量表达式];
 
 例  int a[3][4];  
     float b[2][5];
     int c[2][3][4];
     int a[3,4];           (x)

数组元素的存放顺序l原因:内存是一维的

二维数组:按行序优先

多维数组:最右下标变化最快

五、二维数组

二维数组a是由3个元素组成,每个元素a[i]由包含4个元素的一维数组组成

二维数组元素的引用

形式:数组名[下标][下标]

将二维数组行列元素互换,存到另一个数组中

#include 
main()
{   int a[2][3]={{1,2,3},{4,5,6}};
     int b[3][2],i,j;
    printf("array a:\\n");
    for(i=0;i<=1;i++)
    {   for(j=0;j<=2;j++)
  {   printf("%5d",a[i][j]);
      b[j][i]=a[i][j];
  }
  printf("\\n");
    }

求二维数组中最大元素值及其行列号

#include 
main()
{  int a[3][4]={{1,2,3,4},
                        {9,8,7,6},
                        {-10,10,-5,2}};
    int i,j,row=0,colum=0,max;
    max=a[0][0];
    for(i=0;i<=2;i++)
       for(j=0;j<=3;j++)
           if(a[i][j]>max)
    {  max=a[i][j];
       row=i;
       colum=j;
    }
    printf("max=%d,row=%d, \\
colum=%d\\n",max,row,colum);
}
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 相关推荐

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分