章 | 节 | 知识点 | 精讲文档 |
第八章数组 | 8.1 一维数组 | 一维数组的定义 | 定义形式: 类型名 数组名[常量表达式]; 其中:常量表达式表示元素的个数,即长度。 |
一维数组下标 | 数组下标从0开始,定义的n个元素分别为a[0]、a[1]、a[2]、……、a[n-1]。 |
数组名的含义 | 数组名代表数组的首地址,也就是第一个元素的地址。 |
一维数组初始化 | 数组的初始化:在定义数组时直接给数组元素赋初值。 初始化方法:从数组的第一个元素开始依次给出初始值表,表中各值之间用逗号分开,并用一对花括号将它们括起来。 |
一维数组元素的引用 | 引用方式: 数组名[下标] |
求最大值算法 | 题目:求一维数组中所有元素的最大值及该元素的下标。 解题思路:采用“打擂台算法” l 先找出任一人站在台上,第2人上去与之比武,胜者留在台上 l 第3人与台上的人比武,胜者留台上,败者下台 l 以后每一个人都是与当时留在台上的人比武,直到所有人都上台比为止,最后留在台上的是冠军 主要程序段如下: …… int i, k=0,max; int a[10]={1,5,3,7,8,9,-2,4,1,-1}; max=a[0]; for (i=1;i<=9;i++) if (a[i]>max) { max=a[i]; k=i;} printf("max=%d\nk=%d\n",max,k); …… |
冒泡法排序 | 题目:从键盘任意输入10个数,按从小到大的顺序重新排列,然后输出。 Ø 算法总体思想: 将每相邻的两个数进行两两比较,将小的数调到前面。 主要程序段如下: …… int a[10]; int i,j,t; printf("input 10 numbers :\n"); for (i=0;i<10;i++) scanf("%d",&a[i]); for(j=0;j<9;j++) for(i=0;i<9-j;i++) if (a[i]>a[i+1]) {t=a[i];a[i]=a[i+1];a[i+1]=t;} …… |
选择法排序 | 题目:从键盘任意输入10个数,按从小到大的顺序重新排列,然后输出。 方法二:选择法 算法思想是:(考虑10 个数) l 先将10个数中最小的数与a[0]对换;再将a[1]到a[9]中最小的数与a[1]对换……每比较一轮,找出一个未经排序的数中最小的一个 l 共比较9轮 主要程序段如下: …… int a[10]; int i,j,t; printf("input 10 numbers :\n"); for (i=0;i<10;i++) scanf("%d",&a[i]); for(i=0;i<n-1;i++) { k=i; for(j=i+1;j<n;j++) if(a[j]<a[k]) k=j; t=a[k]; a[k]=a[i]; a[i]=t; } …… |
8.2 多维数组 | 二维数组定义 | 二维数组的定义 类型说明符 数组名[常量表达式1][常量表达式2]; |
二维数组元素的引用 | 二维数组元素的引用形式: 数组名 [下标][下标] |
二维数组初始化 | 类型说明符数组名[常量1][常量2]={初始化数据}; |
二维数组元素在内存中的存储 | 二维数组元素在内存中按行序优先存储,即当按照存储顺序存取元素时,最右边的下标变化最快 |
矩阵操作 | 题目:将一个2行3列二维数组行和列元素互换,存到另一个二维数组中。(矩阵转置) 解题思路: l 将a数组中的元素a[i][j]存放到b数组中的b[j][i]元素中 l 用嵌套的for循环完成 主要程序段如下: …… for (i=0;i<=1;i++) for (j=0;j<=2;j++) b[j][i]=a[i][j]; …… |
8.3 字符数组 | 字符数组定义 | 字符数组:用来存放字符的数组称为字符数组。 l 用一个一维字符数组可以存放一个字符串; l 用一个二维字符数组可以存放多个字符串, 字符数组定义的一般格式: char 数组名[字符串数量][字符串最大长度] 说明: [字符串数量]部分如果没有,则表示只定义了一个一维字符数组。 |
字符数组初始化 | 字符数组的初始化可按行进行。例如: char str[4][10]={“Turbo C” , “Microsoft”, "PASCAL" , "Visual Basic" }; |
字符串处理函数:puts函数 | 形式:puts (字符数组/字符串常量) 作用:将一个字符串(以'\0'结束的字符序列)输出到显示器。 |
字符串处理函数:gets函数 | 形式:gets(字符数组) 作用:从终端输入一个字符串到字符数组,并且得到一个函数值,该函数值是字符数组的起始地址。 |
字符串处理函数:strcat函数 | 形式:strcat(字符数组1,字符数组2/字符串) 作用:连接两个字符数组中的字符串,把字符串2接到字符串1的后面,结果放在字符数组1中,函数调用后得到一个函数值——字符数组1的地址。 |
字符串处理函数:strcpy函数 | 形式:strcpy(字符数组1,字符数组2/字符串) 作用:将字符串2复制到字符数组1中。 |
字符串处理函数:strcmp函数 | 形式:strcmp (字符串1,字符串2) 作用:比较两个字符串的大小。 |
字符串处理函数:strlen函数 | 形式:strlen (字符数组/字符串常量) 作用:测试字符串的长度。 函数值:字符串的实际字符个数(不包括′\0′)。 |
字符串处理函数:strlwr函数、strupr函数 | strlwr函数: l 形式:strlwr (字符串) l 作用:将字符串中大写字母换成小写字母。 strupr函数: l 形式:strupr (字符串) l 作用:将字符串中小写字母换成大写字母。 |
8.4 数组作函数参数 | 数组元素作函数参数 | 用数组元素作实参时,向形参变量传递的是数组元素的值,在使用时同普通变量作参数一样。 |
一维数组名作函数参数 | 用数组名作函数实参时,向形参传递的是数组首元素的地址。 形参数组可以不指定大小,在定义数组时在数组名后面跟一个空的方括号,可再设一个形参,传递数组元素的个数。形式如下: int main() { void fun(int arr[],int n]; int array[10]; ┇ fun (array,10); return 0; } void fun(int arr[ ],int n) { ┇ } |
二维数组名作函数参数 | 实参为二维数组名,形参数组定义时可以指定每一维的大小,也可以省略第一维的大小说明。 |