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个元素的变量名。
  6. “[]”中必须是常量或者常量表达式,不能是变量。通常情况下,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]={9637};
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;
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

釉色清风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值