5.2.1二维数组的一般形式
C语言允许使用多维数组,最简单的多维数组是二维数组。实际上,二维数组是以一维数组为元素构成的数组,要将d说明成大小为(10,20)的二维整型数组,可以写成:
intd[10][20]
请留心上面的说明语句,C不像其它大多数计算机语言那样使用逗号区分下标,而是用方
括号将各维下标括起,并且,数组的二维下标均从0计算。
与此相似,要存取数组d中下标为(3,5)的元素可以写成:
d[3][5]
在例5-3中,整数1到12被装入一个二维数组。
[例5-3]
main()
{
intt,i,num[3][4]
for(t=0;t<3;t)
for(i=0;i<4;i)
num[t][i]=(t*4)i1;
}
在此例中,num[0][0]的值为1,num[0][2]的值为3,......,num[2][3]的值为12。可以将
该数组想象为如下表格:
二维数组以行—列矩阵的形式存储。第一个下标代表行,第二个下标代表列,这意味着
按照在内存中的实际存储顺序访问数组元素时,右边的下标比左边的下标的变化快一些。图
5-2是一个二维数组在内存中的情形,实际上,第一下标可以认为是行的指针。
记住,一旦数组被证明,所有的数组元素都将分配相应的存储空间。对于二维数组可用
下列公式计算所需的内存字节数:
行数×列数×类型字节数=总字节数
因而,假定为双字节整型,大小为(10,5)的整型数组将需要:10×5×2=100字节
当二维数组用作函数的参数时,实际上传递的是第一个元素(如[0][0])的指针。不过该
函数至少得定义第二维的长度,这是因为C编译程序若要使得对数组的检索正确无误,就需要
知道每一行的长度。例如,将要接收大小为(10,10)的二维数组的函数,可以说明如下:
func1(x)
intx[][10]
{
.
.
.
}
第一维的长度也可指明,但没有必要。
C编译程序对函数中的如下语句:
X[2][4]
处理时,需要知道二维的长度。若行长度没定义,那么它就不可能知道第三行从哪儿开
始。
[例5-4]用一个二维数组存放某一教师任教的各班学生的分数。假定教师有三个班,每班
最多有三十名学生。注意各函数存取数组的方法。
#defineclasses3
#definegrades30
#include<stdio.h>
main()
{
voidenter_grades();
voiddisp_grades();
intget_grade();
inta[classes][grades];定/*义二维数组,每行存放一个班学生成绩*/
charch;
for(;;)
{
do{/*菜单显示*/
printf("(E)ntergrades\n");
printf("(R)eportgrades\n");
printf("(Q)uit\n");
ch=toupper(getchar());/将*键盘输入字符转换为大写*/
}while(ch!='E'&&ch!='R'&&ch!='Q');
switch(ch)
{
case'E':
enter_grades();
break;
case'R':
disp_grades(grade);
break;
case'Q':
exit(0);
}
}
}
voidenter_grades(a)
inta[][grades];
{
intt,i;
for(t=0;t<classes;t)
{
printf("class#%d:\n",t1);
for(i=0;i<grades;i)
a[t][i]=get_grade(i);
}
}
intget_grades(num)
intnum;
{
chars[80];
printf("entergradeforstudent#%d:,\nn"um1);
gets(s);/*输入成绩*/
return(atoi(s));
}
voiddisp_grades(g)/*显示学生成绩*/
intg[][grades];
{
intt,i;
for(t=0;t<classes;t){
printf("class#%d:\n,"t1);
for(i=0;i<grades;i)
printf("gradeforstudent#%dis%d\,ni"1,g[t][i]);
}
}
我们将实际问题简化为共有2个班,每班两个学生,即将程序中的常量定义修改如下:
#defineclasses2
#definegrades2
运行程序:
RUN
(E)ntergrades
(R)eportgrades
(Q)uit:e
class#1:
entergradeforstudent#17:8
entergradeforstudent#289:¿
class#2
entergradeforstudent#19:8¿
entergradeforstudent#29:0¿
(E)ntergrades
(R)eportgrades
(Q)uit:r¿
class#1
gradeforstudent#1is78
gradeforstudent#2is89
class#2
gradeforstudent#1is98
gradeforstudent#2is90
(E)ntergrades
(R)eportgrades
(Q)uit:q
运行程序,我们首先看到一个菜单,选择“e”输入成绩,选择“r”显示成绩,选择“q”
退出。atoi()函数用于将实参字符串转换为整型。
5.2.2字符串数组
程序设计中经常要用到字符串数组。例如,数据库的输入处理程序就要将用户输入的命
令与存在字符串数组中的有效命令相比较,检验其有效性。可用二维字符数组的形式建立字
符串数组,左下标决定字符串的个数,右下标说明串的最大长度。例如,下面的语句定义了
一个字符串数组,它可存放30个字符串,串的最大长度为80个字符:
charstr_array[30][80];
要访问单独的字符串是很容易的,只需标明左下标就可以了。例如,下面的语句以数组
str_array中的第三个字符串为参数调用函数gets()。
gets(str_array[2]);
该语句在功能上等价于:
gets(&str_array[2][0]);
但第一种形式在专业程序员编制的C语言程序中更为常见。
为帮助理解字符串数组的用法,研究例5-5。它以一个字符串数组为基础做简单的文本编辑。
[例5-5]
#include<stdio.h>
#defineMAX100
#defineLEN80
chartext[MAX][LEN]
/*一个非常简单的文本编辑器*/
main()
{
registerintt,i,j;
for(t=0;t<MAX;t)/*逐行输入字符串*/
{
printf("%d:",t);
gets(text[t]);
if(!text[t][0])
break;/*空行退出*/
}
for(i=0;i<t,i)/*按行,逐个字符输出字符串*/
{
for(j=0;text[i][j];j)
putchar(text[i][j]);
putchar('\n');
}
}
该程序输入文本行直至遇到一个空行为止,而后每次一个字符地重新显示各行。
文章摘自网络,如有侵权,请与我们联系.
C语言允许使用多维数组,最简单的多维数组是二维数组。实际上,二维数组是以一维数组为元素构成的数组,要将d说明成大小为(10,20)的二维整型数组,可以写成:
intd[10][20]
请留心上面的说明语句,C不像其它大多数计算机语言那样使用逗号区分下标,而是用方
括号将各维下标括起,并且,数组的二维下标均从0计算。
与此相似,要存取数组d中下标为(3,5)的元素可以写成:
d[3][5]
在例5-3中,整数1到12被装入一个二维数组。
[例5-3]
main()
{
intt,i,num[3][4]
for(t=0;t<3;t)
for(i=0;i<4;i)
num[t][i]=(t*4)i1;
}
在此例中,num[0][0]的值为1,num[0][2]的值为3,......,num[2][3]的值为12。可以将
该数组想象为如下表格:
二维数组以行—列矩阵的形式存储。第一个下标代表行,第二个下标代表列,这意味着
财软联.盟.fs119.net
按照在内存中的实际存储顺序访问数组元素时,右边的下标比左边的下标的变化快一些。图
5-2是一个二维数组在内存中的情形,实际上,第一下标可以认为是行的指针。
记住,一旦数组被证明,所有的数组元素都将分配相应的存储空间。对于二维数组可用
下列公式计算所需的内存字节数:
行数×列数×类型字节数=总字节数
因而,假定为双字节整型,大小为(10,5)的整型数组将需要:10×5×2=100字节
当二维数组用作函数的参数时,实际上传递的是第一个元素(如[0][0])的指针。不过该
函数至少得定义第二维的长度,这是因为C编译程序若要使得对数组的检索正确无误,就需要
知道每一行的长度。例如,将要接收大小为(10,10)的二维数组的函数,可以说明如下:
func1(x)
intx[][10]
{
.
.
.
}
财 软联盟 fs119.net
第一维的长度也可指明,但没有必要。
C编译程序对函数中的如下语句:
X[2][4]
处理时,需要知道二维的长度。若行长度没定义,那么它就不可能知道第三行从哪儿开
始。
[例5-4]用一个二维数组存放某一教师任教的各班学生的分数。假定教师有三个班,每班
最多有三十名学生。注意各函数存取数组的方法。
#defineclasses3
#definegrades30
#include<stdio.h>
main()
{
voidenter_grades();
voiddisp_grades();
intget_grade();
inta[classes][grades];定/*义二维数组,每行存放一个班学生成绩*/
charch;
for(;;)
{
do{/*菜单显示*/
printf("(E)ntergrades\n");
printf("(R)eportgrades\n");
printf("(Q)uit\n");
ch=toupper(getchar());/将*键盘输入字符转换为大写*/
}while(ch!='E'&&ch!='R'&&ch!='Q');
switch(ch)
{
case'E':
enter_grades();
break;
case'R':
disp_grades(grade);
break;
case'Q':
财软.联盟.fs119.net
exit(0);
}
}
}
voidenter_grades(a)
inta[][grades];
{
intt,i;
for(t=0;t<classes;t)
{
printf("class#%d:\n",t1);
for(i=0;i<grades;i)
a[t][i]=get_grade(i);
}
}
intget_grades(num)
intnum;
{
chars[80];
printf("entergradeforstudent#%d:,\nn"um1);
gets(s);/*输入成绩*/
return(atoi(s));
}
voiddisp_grades(g)/*显示学生成绩*/
intg[][grades];
{
intt,i;
for(t=0;t<classes;t){
printf("class#%d:\n,"t1);
for(i=0;i<grades;i)
printf("gradeforstudent#%dis%d\,ni"1,g[t][i]);
}
}
我们将实际问题简化为共有2个班,每班两个学生,即将程序中的常量定义修改如下:
#defineclasses2
#definegrades2
运行程序:
RUN
(E)ntergrades
(R)eportgrades
(Q)uit:e
class#1:
entergradeforstudent#17:8
entergradeforstudent#289:¿
class#2
entergradeforstudent#19:8¿
entergradeforstudent#29:0¿
(E)ntergrades
(R)eportgrades
(Q)uit:r¿
财,管家园,fs119.net
class#1
gradeforstudent#1is78
gradeforstudent#2is89
class#2
gradeforstudent#1is98
gradeforstudent#2is90
(E)ntergrades
(R)eportgrades
(Q)uit:q
运行程序,我们首先看到一个菜单,选择“e”输入成绩,选择“r”显示成绩,选择“q”
退出。atoi()函数用于将实参字符串转换为整型。
5.2.2字符串数组
程序设计中经常要用到字符串数组。例如,数据库的输入处理程序就要将用户输入的命
令与存在字符串数组中的有效命令相比较,检验其有效性。可用二维字符数组的形式建立字
符串数组,左下标决定字符串的个数,右下标说明串的最大长度。例如,下面的语句定义了
一个字符串数组,它可存放30个字符串,串的最大长度为80个字符:
charstr_array[30][80];
要访问单独的字符串是很容易的,只需标明左下标就可以了。例如,下面的语句以数组
str_array中的第三个字符串为参数调用函数gets()。
财软.联盟.fs119.net
gets(str_array[2]);
该语句在功能上等价于:
gets(&str_array[2][0]);
但第一种形式在专业程序员编制的C语言程序中更为常见。
为帮助理解字符串数组的用法,研究例5-5。它以一个字符串数组为基础做简单的文本编辑。
[例5-5]
#include<stdio.h>
#defineMAX100
#defineLEN80
chartext[MAX][LEN]
/*一个非常简单的文本编辑器*/
main()
{
registerintt,i,j;
for(t=0;t<MAX;t)/*逐行输入字符串*/
{
printf("%d:",t);
gets(text[t]);
if(!text[t][0])
break;/*空行退出*/
}
for(i=0;i<t,i)/*按行,逐个字符输出字符串*/
{
for(j=0;text[i][j];j)
putchar(text[i][j]);
putchar('\n');
}
}
该程序输入文本行直至遇到一个空行为止,而后每次一个字符地重新显示各行。
财 软联盟 fs119.net
数据统计中!!
Google.cn搜索关键字:
for 字符串 grades int student grade 程序 一个 二维数
Google.cn搜索相关文章:
谷歌中搜索全球网 二维数组
百度中搜索 二维数组
谷歌中搜索www.fs119.net 二维数组
上一篇:多维数组
Google.cn搜索相关文章:
谷歌中搜索全球网 二维数组
百度中搜索 二维数组
谷歌中搜索www.fs119.net 二维数组
下一篇:一维数组
精品课程推荐
相关文章
C语言的预处理程序与注释 2007-06-14 17:47:57 C语言程序应用举例 2007-06-14 17:47:56 一维数组 2007-06-14 17:47:46 二维数组 2007-06-14 17:47:45 多维数组 2007-06-14 17:47:45 数组的初始化 2007-06-14 17:47:44