一维数组的定义
定义一维数组的形式为:数据类型 数组名 [整形常量表达式];
说明:
数据类型是数组中全体数组元素的数据类型。
数组名用标识符表示,整形常量表达式代表数组具有的数组元素个数。
数组元素的下标一律从0开始。
编译程序为数组开辟连续的存储单位,用来顺序存放数组的各数组元素。用数组名表示该数组存储区的首地址。
注意:
定义数组元素个数的表达式是整形常量表达式,不能出现变量或者非整形常量表达式。
例如下列数组定义是正确的:
#define n 5
int a[n]; /*n不是变量,是符号常量,其值为5*/
int b[2+3]; /*2+3是常量表达式,其值为5*/
int c[10];
一维数组的引用
引用数组元素的形式为:数组名[下表表达式];
注意:
*定义时整形常量表达式与引用的数组元素的下标表达式是完全不同的概念。对数组定义:int a[5]; 这里整形常量表达式5表示a数组有5个数组元素。对数组元素的引用:a[3]=a[2]+a[5]; 这里下表表达式3和2均表示数组元素的下标。而a[5]是错误的数组元素引用,因为下表从0开始,所以数组元素的小于5,下表已经越界。
*系统不检查数组元素的越界,只能由自己掌握。下标越界会破坏其它变量的值,因此编程时一定要保证数组元素的下表不越界。
一维数组的初始化
一维数组初始化的形式为:数据类型 数组名[整形常量表达式]={初值1,初值2,初值3,...........};
初始化方法:
1.int a[4]={1,2,3,4};
数组中有若干数组元素,可在{ }中给出各数组元素的初值,各初值之间用逗号隔开。把{ }中的初值依次赋给各数组元素。表示把1,2,3,4依次赋给a[0], a[1], a[2], a[3]。
2.static int a[4]={1,2};
只给部分数组元素初始化。注意到关键字static,它表示a数组的存储类型为static(静态存储)。存储类型为静态存储的变量或数组的初值自动设置为0。即a[0]=1; a[1]=2; a[2]=0; a[3]=0.
3.int a[ ]={1,2,3};
初始化时,定义数组元素的个数的常量表达式可以省略。若数组元素的个数定义省略,则系统根据初值的个数来确定数组元素的个数。如上例,a数组有3个数组元素:a[0]=1; a[1]=2; a[2]=3。
一维数组的应用
需求:输入100个数,输出它们的平均值和这些数当中所有大于平均值的数。#define N 100
#include<stdio.h>
int main(void){
int k;
int a[N],s;
float av;
s=0;
for(k=0;k<N;k++){
scanf("%d",&a[k]);
s=s+a[k];
}
av=s/N;
printf("average=%f",av);
for(k=0;k<N;k++)
if(a[k]>av) printf("%d",a[k]);
return 0;
}
二维数组
二维数组的定义
定义二维数组的形式为:数据类型 数组名[整形常量表达式] [整形常量表达式];
数据类型是数组全体数组元素的数据类型;数组名用标识符表示;两个整形变量表达式分别代表数组具有的行数和列数。数组元素的下标一律从0开始。存储方式为按行存储。
二维数组的引用
数组元素的形式为:数组名[行下表表达式] [行下表表达式]
例如希望从键盘依次为数组元素输入数据,可以采用如下语句:
for(i=0;i<20;i++)
for(j=0;j<30;j++)
scanf("%d",&a[ i ] [ j ]);
二维数组的初始化
二维数组初始化的形式为:数据类型 数组名[整形常量表达式] [整形常量表达式]={初始化数据};
初始化方式:
1.分行进行初始化。例如:int a[2] [3]={ {1,2,3},{4,5,6} };
2.不分行的初始化。例如:int a[2] [3]={1,2,3,4,5,6}; //3个数字为一行
3.为部分数组元素初始化。例如: int a[2] [3]={ {1,2},{4} };
第一行只有2个初值,按顺序分别赋给a[0] [0]和a[0] [1];第二行的初值赋给a[1] [0].
4.可以省略第一维的定义,但不能省略第二维的定义。系统根据初始化的数据个数和第2维德长度可以确定第一维的长度。例如: int a[ ] [3]={1,2,3,4,5,6};
初始化数据为6个,第二维的长度为3,即每行3个数,所以a数组的第一维是2.
省略第一维定义时,第一维的大小按如下规定:初值个数能被第二维正处,所得的商就是第一维的大小;若不能整除,则第一维的大小为商再加1。
二维数组的应用
需求:实现行列互换问题#include<stdio.h>
int main(void){
int i,j;
int a[2][3]={1,2,3,4,5,6};
int b[3][2];
printf("互换前的数组为:\n");
for(i=0;i<2;i++){
for(j=0;j<3;j++){
printf("%3d",a[i][j]);
b[j][i]=a[i][j];
}
printf("\n");
}
printf("互换后的数组为:\n");
for(i=0;i<3;i++){
for(j=0;j<2;j++)
printf("%3d",b[i][j]);
printf("\n");
}
return 0;
}
字符数组与字符串
在c语言中,只能用一个字符数组来表示一个字符串。字符数组的每个元素占一个字节,字符数组中包含一个' \0 '字符,代表字符串的结尾。因而字符数组的元素个数,应该不少于被存储的字符串的字符数目加1.下面以一段代码说明字符串变量的用法,代码如下:
#include<stdio.h>
#include<string.h>
int main(void)
{
char cNational [ ]="zhongguo";
char cCity[ 10]="北京";
char cEnglish[10];
char szResponse[100];
printf("中国的汉语拼音是%s,用英文表示出来是?\n", cNationa);
scanf("%s",&cEnglish);
if(strcmp(cEnglish,"china")==0){
printf("这是%s吗?\n", cCity);
}
else{
strcpy( szResponse,"你的英文不好!\n"); //调用string.h中声明的字符串拷贝库函数strcpy为字符数组赋值
printf("%s", szResponse);
}
return 0;
}