学习C语言的第三天:数组

目录

数组概念:

数组特点:

一维数组:

定义:

说明:     

初始化:

引用:

输入输出:

 二维数组:

一般形式:

注意:

理解:

初始化:

引用:

输入输出:

字符数组:

定义:

存储:

初始化:

输入输出:


数组概念:

  • 数组就是一组具有相同数据类型的数据的有序集合。

数组特点:

  • 数组是一组有序数据的集合。
  • 数组中的每一个元素都属于同一个数据类型。例如:int a[10];不能把浮点数据和整型数据同时放在数组a中。
  • 用一个数组名和下标来唯一确定数组中的元素。例如:a[8]代表下标为8元素的值。

一维数组:

定义:

  • 定义格式:类型说明符  数组名  [常量表达式];

说明:     

  • 类型说明符  :数组的类型。

  • 数组名命名规则和变量名相同,遵循标识符命名规则。

  • 常量表达式可以包括常量和符号常量,但不能包含变量。

  • 常量表达式指明数组中元素的个数,必须大于零。例如:int a[0]; 是错误的。

  • 数组名后是用方括号而不是圆括号。

初始化:

  • 定义:在数组定义时为数组元素赋初值称为数组初始化。
  • 在定义数组时对数组元素赋以初值。方法:将数组元素的初值依次放在一对花括弧内。例如:int a [10] ={2,3,4,6,7,66,77,88,99,100};
  • 可以只给一部分元素赋值,其他按零来处理。例如:int a [10] = {2,3,4,5,6};表示只给前面5个元素赋初值,后5个元素值为0。
  • 对全部数组元素赋初值时,可以不指定数组长度。例如:int a [5]={1,2,3,4,5};也可以写成int a []={1,2,3,4,5};
  • 一维数组赋初值的个数不能超过数组总元素的个数。例如:int a [3]={1,2,3,4};就是错误的。

引用:

  • C语言规定,只能引用单个数组元素,不能一次引用整个数组。
  • 数组的引用形式:数组名 [下标]
  • 下标是指在数组中第几个元素。例如:a[3]就是数组中序号为3的元素,它和简单变量地位和作用相似。
  • 下标可以是整型常量,整型变量和整形表达式。例如:a[4],a[0],a[i+1]。
  • 下标的值是数组元素序号,从0开始,到n-1结束。例如:int a[10];说明数组a有10个元素,分别为a[0],a[1],...,a[9]。
  • 注意区分数组定义和数组元素引用。数组定义时有类型说明符。

输入输出:

  • 可以对数组中任何一个元素进行单独的输入输出,每个元素等同于一个普通变量。
  • 数组的引用离不开循环。将数组的下标作为循环变量,通过循环,就可以对数组的所有元素逐个进行处理。
  • 数组的输入:
#include <stdio.h>
int main()
{
	int a[10];
	int i;
	for(i=0;i<10;i++)
	scanf("%d",&a[i]);
	...
	return 0;
 }
  • 数组的输出:
#include <stdio.h>
int main()
{
	int a[10];
	int i;
	for(i=0;i<10;i++)
		printf("%d",a[i]);
	...
	return 0;
 }

 二维数组:

一般形式:

                    类型说明符  数组名  [常量表达式1]  [常量表达式2];其中:常量表达式1为行数;常量表达式2为列数。例如:float a[3][4],b[5][10]。

注意:

  • 一对方括号内不能写两个下标 。例如:float a[3,4]是错误的。

  • 数组元素个数必须是常量表达式,不能使用变量。例如:int i=2;j=4是正确的;而int a[i][j]是错误的。

  • 用于定义数组长度的常量表达式必须为大于零的正整数。例如:int a[0][4]是错误的。

理解:

           二维数组可被看作一种特殊的一维数组:它的元素又是一个一维数组。例如:float a[3][4];可以把a看作一个一维数组,它有3个元素:a[0],a[1],a[2],每个元素又是一个包含4个元素的一维数组:a[0]---a[0][0]  a[0][1]  a[0][2]  a[0][3]

           a[1]---a[1][0]  a[1][1]  a[1][2]  a[1][3]

           a[2]---a[2][0]  a[2][1]  a[2][2]  a[2][3]

初始化:

  • 分行给二维数组赋初值。例如:int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};表示第一个花括号的值作为第一行元素的初值,第二个花括号的值作为第二行元素的初值,第三个花括号的值作为第三行元素的初值。
  • 可以将所有数据写在一个花括号内,按数组元素在内存中的排列顺序对各元素赋初值。例如:int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};表示将1,2,3,4作为第一行元素的初值,5,6,7,8作为第二行元素的初值,后四个数作为第三行元素的初值。
  • 可以对部分元素赋初值。例如:int a[3][4]={{1},{5},{9}};表示只对该元素中每行的第一个元素赋初值,每行的后三个元素赋值为零。
  • 可以对各行中的某一元素赋初值。例如:int a[3][4]={{1},{0,6},{0,0,0,11}};表示第一个花括号内只有一个值,相当于对第一行的第一个元素赋初值,后三个元素的值为零。第二个花括号中有两个值,相当于对第二行的第一,二两个元素赋初值,后两个元素的值为零。第三个花括号中有四个值,相当于对第二行的四个元素赋初值。
  • 可以对某几行元素赋初值。例如:int a[3][4]={{1},{5,6}};只有两个花括号,表示只对前两行的某一些元素赋初值,第三行元素初值为零。
  • 如果对全部元素都赋初值,则定义数组时对第一维的长度可以不指定,但第二维的长度不能省。例如:int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};它等价于:int a[][4]={1,2,3,4,5,6,7,8,9,10,11,12};在定义时也可以只对部分元素赋初值而省略第一维的长度,但应分行赋初值。例如:int a[][4]={{0,0,3},{},{0,10}};表示第一维的长度为3.

引用:

  • 二维数组元素的引用形式:数组名 [下标1] [下标2]
  • 下标1和下标2可以是整型常量,整型变量和整形表达式。其编号从0开始。注意:下标不要越界。例如:若int a[2*4][3*3],i=10;则使用a[4][0],a[2][i-2]都是合法的。
  • 数组名a代表的是数组a在内存中的首地址,可以用数组名a来代表数组元素a[0][0]的地址。数组名是常量,不可对它赋值。

输入输出:

  • 二维数组有两个下标,故采用双重循环方式。
  • 数组的输入:
#include <stdio.h>
int main()
{
	int a[2][3],i,j;
	for(i=0;i<2;i++)
	    for(j=0;j<3;j++)
	        scanf("%d",&a[i][j]);
	...
	return 0;
}
  • 数组的输出:
#include <stdio.h>
int main()
{
	int a[2][3],i,j;
	for(i=0;i<2;i++)
	    for(j=0;j<3;j++)
	        printf("%5d",&a[i][j]);
	...
	return 0;
}

字符数组:

定义:

           用来存放字符数据的数组是字符数组。C语言用字符数组存放字符串,字符数组中的各元素依次存放字符串的各字符。定义格式:char 数组名[常量表达式];例如:char c[6];c数组具有6个元素,可以存放长度小于或等于5的字符串。

存储:

           例如:char c[10]="c program";该数组在计算机中存储的形式如下图所示:

c[9]存储'\0',它作为字符串的结束符出现,正因为如此,要为'\0'留位置。强调:字符串实际占有单元的数量等于字符串长度+1,定义时注意考虑元素总个数应比实际长度多1.

初始化:

  • 用单个字符对字符数组初始化。例如:char c[10]={'c',' ','p','r','o','g','r','a','m','\0'};把10个字符依次赋给c[0]~c[9]这10个元素。用这种初始化需要说明的是:

       1)如果在定义字符数组时不再进行初始化,则数组中各元素的值是不可预料的。

       2)如果花括号中提供的初值个数(即字符个数)大于数组长度,则出现语法错误。

       3)如果提供的初值个数与预定的数组长度相同,在定义时可以省略数组长度,系统会自动根据初值个数确定数组长度。

       4)如果初值个数小于数组长度,则只将这些字符赋给数组中前面那些元素,其余的元素自动定为空字符(即'\0')。

  • 用字符串常量对字符数组初始化。例如:

       1)char str[6]={"CHINA"};

       2)  char str[6]="CHINA";       //省略{}

       3)char str[]="CHINA";        //省略长度值

       4)char c[12]={"how are you"};与char c[]={'h','o','w,' ','a','r','e',' ','y','o','u','\0'};等价。

  • 说明:

       1)将字符串存储到字符数组中,字符串和第一个'\0'构成有效字符串。对字符串的操作,就是对字符数组的操作。

       2)普通数组中的元素是确定的,一般用下标控制循环;而字符串使用结束符'\0'来控制循环。

输入输出:

  • 单个字符输入输出(用格式符%c或字符输入函数)
#include <stdio.h>
int main()
{
	char c[5];
	int i;
	for(i=0;i<5;i++)
	    scanf("%c",&c[i]);
	for(i=0;i<5;i++)
	    printf("%c",c[i]);
	printf("\n");
	return 0;
 }
  • 字符串整体或部分输入输出(用格式符%s)。例如:

char str[6];

scanf("%s",str);

说明:1)输入输出项必须是以字符串的地址形式出现;

           2)也可以是字符串常量:printf("%s\n","book");

           3)只能输入不包括空格,\t和\n的字符串;

           4)若要输入空格,用gets函数;

           5)数组名前不加&符号。

例如:

char str[10];

scanf("%s",str);

printf("%s\n",str);

/*当输入:how are you <回车>

  会输出:how

当采用'%s'输入时,scanf不能输入空格,输出的信息只有how,因此这里不能采用scanf来输入带有空格的字符串。用%s输出字符串时,从输出项提供的地址开始输出,直到遇到字符串结束串'\0'为止。*/

    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值