C--一维数组

简介: C--一维数组

一维数组的使用

一维数组的定义方式如下:

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

int a[5];
  1. 上述定义了一个整型数组,数组名为a。
  2. 数组a中有5个元素,每个元素都是int型变量。
  3. 5个元素在内存中的地址是连续分配的。
  4. 数组中的元素数据类型都相同,所占字节都相同,且在内存中的地址是连续分配的。
  5. 区分元素:通过给每个元素编进行号来区分不同的元素。元素编号下标是从0开始的。例如上述定义的数组a,有5个元素,即a[0],a[1],a[2],a[3],a[4]。a[0],a[1],a[2],a[3],a[4]分别也是这5个元素的变量名。
  1. “[]”中必须是常量或者常量表达式,不能是变量。通常情况下,C语言不允许对数组的长度进行动态定义,数组的大小不依赖于程序运行中过程中变量的值。

一维数组的初始化

数组元素初始化的一般形式如下:

类型说明符 数组名[常量或常量表达式]={初值表列};

例如:

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

上述定义数组时给所有元素赋初值,这叫 “完全初始化”。

只有定义数组时可以整体赋值,其他情况下不可以整体赋值!

且从左往右依次给每个元素赋值,即a[0]=2,a[1]=3,a[2]=5,a[3]=6。

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

整型数组b有四个元素,但花括号内只有两个初值,即“不完全初始化”。这时a[0]=1,a[1]=2,对于a[3],a[4]并没有初始化,默认为0。

int c[6];

上述只是定义了整型数组c,并没有初始化。若在下面编程中没有对任何元素进行初始化,那么这时每个元素c[0],c[1],c[2],c[3],c[4],c[5]就是0了,而是随机数。(如果不初始化,也不能写成“int c[6]={}”)

int d[3]={0};

上述表示给数组清零,即此时数组中每个元素都是0。

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

如果定义数组时就给所有的元素赋初值,那么也可以不用写元素的个数。系统会自动分配空间。

等价于:

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

一维数组简单程序

一维数组每个元素的输出

#include <stdio.h>
int main (void)
{
  int a[5]={6,7,2,3,1};
  int i;
  for (i=0;i<=4;i++)
  {
    printf("%d\n",a[i]);
  }
  return 0;
}

输出结果

6
7
2
3
1

用scanf函数手动从键盘对每个元素初始化。

一维数组的使用

C语言规定,只能逐个引用数组元素,而不能引用整个数组。

注意:定义数组时“[]”内的常量或者常量表达式表示的是数组的个数。而引用数组时“[]”内的常量或者常量表达式表达的是数组元素的编号。

只有在定义的时候a[常量]表示的是数组,除此之外,程序中任何地方看到的a[常量]都是数组中的一个元素。

int a[4]={1,2,3,4};  //定义数组并完成初始化
t=a[3];    //将“a[3]即4的值赋值给t”

一个错误的程序

int a[4]={9,6,3,7};
a[4]={4,5,7,8};

如果想要给数组重新赋值,只能依次对每个元素完成赋值。

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

获取数组的长度

获取数组的长度,使用关键字sizeof。

用sizeof可以获得数据类型或者变量所占的字节数。

#include <stdio.h>
int main (void)
{
  int i=3;
  int a[5]={1,2,4,5,6};
  printf("%d\n",sizeof (i));
  printf("%d\n",sizeof (a[2]));
  printf("%d\n",sizeof (a));
  return 0;
}
4
4
20

将数组a赋值给数组b

错误的程序:

int a=[1,2,3,4,5];
int b=[5];
b=a;

a和b是数组名,也表示a和b的第一个元素的起始地址。故a和b是常量,常量之间是不能相互赋值的。

应当将a的每一个元素一次赋值给b。

#include <stdio.h>
int main (void)
{
  int a[5]={1,2,3,4,5};
  int b[5];
  int i;
  for (i=0;i<=4;i++)
  {
    b[i]=a[i];
    printf("%d\n",b[i]);
  }
  return 0;
}
1
2
3
4
5

输入n个整数,输出其中最小的数,并指出它是第几个数。

/*输入n个整数,输出其中的最小值,并指出它是第几个数*/
#include <stdio.h>
int main (void)
{
  int n,i,min,a[100],index;   //index存储最小数的下标  a[100]存储输入的数
  printf("Please input n :\n");
  scanf("%d",&n);
  printf("Please input %d integer numbers:\n",n);
  for (i=1;i<=n;i++)
  {
    scanf("%d",&a[i-1]);
  }
  min=a[0];
  for (i=1;i<n;i++)
  {
    if (a[i]<min)
      min=a[i];
  }
  for (i=0;i<n;i++)
  {
    if (a[i]==min)
      index=i+1;
  }
  printf("最小值为%d,它是第%d个数\n",min,index);
  return 0;
}


相关文章
|
前端开发 JavaScript 关系型数据库
开发中的前端和后端
开发中的前端和后端
2463 0
|
3月前
|
机器学习/深度学习 数据采集 传感器
具有多种最大功率点跟踪(MPPT)方法的光伏发电系统(P&O-增量法-人工神经网络-模糊逻辑控制-粒子群优化)之使用粒子群算法的最大功率点追踪(MPPT)(Simulink仿真实现)
具有多种最大功率点跟踪(MPPT)方法的光伏发电系统(P&O-增量法-人工神经网络-模糊逻辑控制-粒子群优化)之使用粒子群算法的最大功率点追踪(MPPT)(Simulink仿真实现)
260 0
|
3月前
|
API 定位技术 数据安全/隐私保护
微信加好友频繁怎么解决?有方法吗
微信加好友频繁的成因分析与系统解决方案
|
3月前
|
关系型数据库 MySQL 数据库
mysql8的collate问题和修改
mysql8的collate问题和修改
239 105
|
运维 开发工具 C语言
手写操作系统(1)——HelloOS
手写操作系统(1)——HelloOS
401 3
|
缓存 算法 物联网
基于AODV和leach协议的自组网络平台matlab仿真,对比吞吐量,负荷,丢包率,剩余节点个数,节点消耗能量
本系统基于MATLAB 2017b,对AODV与LEACH自组网进行了升级仿真,新增运动节点路由测试,修正丢包率统计。AODV是一种按需路由协议,结合DSDV和DSR,支持动态路由。程序包含参数设置、消息收发等功能模块,通过GUI界面配置节点数量、仿真时间和路由协议等参数,并计算网络性能指标。 该代码实现了节点能量管理、簇头选举、路由发现等功能,并统计了网络性能指标。
394 73
|
存储 安全 C语言
C语言 二级指针应用场景
本文介绍了二级指针在 C 语言中的应用,
|
前端开发
HTML+CSS 速成10分钟!一键实现你的后台管理系统首页梦想!
HTML+CSS 速成10分钟!一键实现你的后台管理系统首页梦想!
|
Linux
如何创建和配置linux虚拟机(一)
如何创建和配置linux虚拟机
357 0
|
JSON Java 数据库
Spring Boot中的全局异常处理
主要讲解了Spring Boot 的全局异常处理,包括异常信息的封装、异常信息的捕获和处理,以及在实际项目中,我们用到的自定义异常枚举类和业务异常的捕获与处理,在项目中运用的非常广泛,基本上每个项目中都需要做全局异常处理。