-
数组是一组有序数据的集合,每一个元素都属于同一个数据类型
-
一维数组的一般形式为
类型说明符 数组名[常量表达式]
-
数组名的命名规则和变量名相同,遵循标识符命名规则
-
在定义数组时需要指定数组中元素的个数,方括号中的常量表达式就是用来表达元素的个数的,即数组长度
-
常量表达式中可以包括常量和符号变量,不能包含变量,C语言不允许对数组的大小做动态定义
-
引用数组元素的表示形式为
数组名[下标]
-
注意:定义数组时和引用数组时形式相同但是含义同
-
注意:**数组下标从 0开始,如果用int[10]定义一个数组,则最大下标值为9,不存在数组元素a[10]
-
eg
#include
int main() { int i,a[10]; for(i=0;i<=9;i++) a[i]=i; for(i=9;i>=0;i--) printf("%d",a[i]); printf("n"); return 0; }
-
为使程序简洁,常在定义数组的同时给各数组元素赋值,这叫做数组的初始化
-
int a[10]={0,1,2,3,4,5,6,7,8,9};各数组元素顺序放在一对花括号内,数据间用逗号分开
-
也可以只给一部分元素赋值
int a[10]={0,1,2,3,4,};a数组中有十个元素,但是花括号内只提供5个初值,即给前五个赋初值,后5个元素赋初值为0
-
若数组元素初值全为0
int a[10]={0}
-
利用数组排序问题(冒泡法)
#include
int main() { int a[10]; int i, j, t; printf("input 10 numbers:n"); for (i = 0; i < 10; i++) scanf("%d", &a[i]); printf("n"); for(j=0;j<9;j++)//进行9次循环,实现9趟比较 for(i=0;i<9-j;i++)//在每一趟中进行9-j次比较 if (a[i] > a[i + 1])//相邻两个数比较 { t = a[i]; a[i] = a[i + 1]; a[i + 1] = t; } printf("the sorted numbers:n"); for (i = 0; i < 10; i++) printf("%d", a[i]); printf("n"); return 0; }
-
二维数组定义的一般形式为:
类型说明符 数组名[常量表达式] [常量表达式]
-
a[3][4] a[0][0] a[0][1] a[0][2] a[0][3] a[1][0] a[1][1] a[1][2] a[1][3] a[2][0] a[2][1] a[2][2] a[2][3]
-
在内存中,各元素是连续存放的,不是二维的,是线性的
-
数组元素可以出现在表达式中,也可以被赋值
a[1][2]=b[2][3]/2;
-
引用数组元素时,下标值应在已定义的数组大小的范围内
int a[3][4]; a[3][4]=3;//这是错的引用,不存在a[3][4]元素
-
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}; -
int a[3][4]={{1},{5},{9}};//只给各行第一列的元素赋初值,其余元素自动为0(部分元素赋初值) -
eg
#include
int main() { int i, j, row = 0, colum = 0, max; int a[3][4] = { {1,2,3,4},{9,8,7,6}, {-10,10,-5,2 } }; 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=%dnrow=%dncolum=%dn", max, row, colum); return 0; }
-
用来存放字符数据的数组是字符数组,一个元素存放一个字符
char c[10]; c[0]='I';c[1]=' ';c[2]='a';c[3]='m';c[4]=' ';c[5]='h';c[6]='a';c[7]='p';c[8]='p';c[9]='y';
-
由于字符数据是以整形形式存放的(ASCII代码),因此也可以用整形数组来存放字符数据,虽然合法但是会浪费存储空间
-
最容易理解的方式就是“初始化列表”
char c[10]={'I',' ','a','m',' ','h','a','p','p','y'}; -
如果初值个数大于数组长度,会出现语法错误,如果初值个数小于数组长度,其余的元素自动定为空字符
#include字符串和字符数组int main() { char c[15]={'I',' ','a','m',' ','h','a','p','p','y'}; int i; for(i=0;i<=15;i++) printf("%c",c[i]); printf("n"); return 0; }
-
在c语言中,是将字符串作为字符数组来处理的
-
c系统再用字符数组存储字符串常量时会自动加一个' '作为结束符
-
有了结束标志' '之后,字符数组的长度就显得不那么重要了,程序中往往通过检测' '的位置老判定字符串是否结束,而不是数组长度
-
' '代表ASCII码为0的字符,只起一个供辨别的作用
-
char c[]={"I am happy"}; //可以省略花括号 char c[]="I am happy"; //这里不用单个字符作为字符数组的初值,而是用一个字符串作为初值。注意:数组的长度不是10而是11,因为字符串常量的最后由系统加了一个' '。 //在执行printf函数时,每输出一个字符检查一次,看下一个字符是否为' ',遇' '就停止输出
-
逐个字符输入输出,用格式符%c
-
整个字符串一次输入或输出用%s
-
char c[]={"China"}; printf("%sn",c);在内存中数组c的存储情况为
C h i n a n 输出时,遇结束符' '就停止输出,输出结果为
China
-
用"%s"格式符输出字符串时,printf函数中输出项是字符数组名,而不是数组元素名
printf("%s",c); ✔
printf("%s",c[0]); ❌
-
如果数组长度大于字符串的实际长度,也只输出到遇' '结束
-
可以用scanf函数输入一个字符串
scanf(“%s”,c);//输入项c是已定义的字符数组名
-
用一个scanf函数输入多个字符串,则应在输入时以空格分隔
char str1[5],str2[5],str3[5]; scanf("%s%s%s",str1,str2,str3);输入数据:How are you
str1: H o w


