5.2.1 2维般形式
C语言允许使用多维最简单多维是 2维实际上 2维是以维为元素构成要将d介绍说明成大小为(1020) 2维整型可以写成:
d[10][20]
请留心上面介绍说明语句C不像其它大多数计算机语言那样使用逗号区分下标而是用方
括号将各维下标括起并且 2维下标均从0计算
和此相似要存取d中下标为(35)元素可以写成:
d[3][5]
在例5-3中整数1到12被装入个 2维
[例5-3]
{
tinum[3][4]
for(t=0;t<3;t)
for(i=0;i<4;i)
num[t][i]=(t*4)i1;
}
在此例中num[0][0]值为1num[0][2]值为3......num[2][3]值为12可以将
该想象为如下表格:
2维以行—列矩阵形式存储第个下标代表行第 2个下标代表列这意味着
按照在内存中实际存储顺序访问元素时右边下标比左边下标变化快些图
5-2是个 2维在内存中情形实际上第下标可以认为是行指针
记住旦被证明所有元素都将分配相应存储空间对于 2维可用
下列公式计算所需内存字节数:
行数×列数×类型字节数=总字节数
因而假定为双字节整型大小为(105)整型将需要:10×5×2=100字节
当 2维用作参数时实际上传递是第个元素(如[0][0])指针不过该
至少得定义第 2维长度这是C编译若要使得对检索正确无误就需要
知道每行长度例如将要接收大小为(1010) 2维可以介绍说明如下:
func1(x)
x[10]
{
.
.
.
}
第维长度也可指明但没有必要
C编译对中如下语句:
X[2][4]
处理时需要知道 2维长度若行长度没定义那么它就不可能知道第 3行从哪儿开
始
[例5-4]用个 2维存放某教师任教各班学生分数假定教师有 3个班每班
最多有 3十名学生注意各存取思路方法
#es3
#grades30
#<stdio.h>
{
voidenter_grades;
voiddisp_grades;
get_grade;
a[es][grades];定/*义 2维每行存放个班学生成绩*/
charch;
for(;;)
{
do{/*菜单显示*/
prf("(E)ntergrades\\n");
prf("(R)eportgrades\\n");
prf("(Q)uit\\n");
ch=toupper(getchar);/将*键盘输入转换为大写*/
}while(ch!=E&&ch!=R&&ch!=Q);
switch(ch)
{
E:
enter_grades;
;
R:
disp_grades(grade);
;
Q:
exit(0);
}
}
}
voidenter_grades(a)
a[grades];
{
t,i;
for(t=0;t<es;t)
{
prf("#%d:\\n",t1);
for(i=0;i<grades;i)
a[t][i]=get_grade(i);
}
}
get_grades(num)
num;
{
chars[80];
prf("entergradeforstudent#%d:\\nn"um1);
gets(s);/*输入成绩*/
(atoi(s));
}
voiddisp_grades(g)/*显示学生成绩*/
g[grades];
{
ti;
for(t=0;t<es;t){
prf("#%d:\\n"t1);
for(i=0;i<grades;i)
prf("gradeforstudent#%dis%d\\ni"1g[t][i]);
}
}
我们将实际问题简化为共有2个班每班两个学生即将中常量定义修改如下:
#es2
#grades2
运行:
RUN
(E)ntergrades
(R)eportgrades
(Q)uit:e
#1:
entergradeforstudent#17:8
entergradeforstudent#289:¿
#2
entergradeforstudent#19:8¿
entergradeforstudent#29:0¿
(E)ntergrades
(R)eportgrades
(Q)uit:r¿
#1
gradeforstudent#1is78
gradeforstudent#2is89
#2
gradeforstudent#1is98
gradeforstudent#2is90
(E)ntergrades
(R)eportgrades
(Q)uit:q
运行我们首先看到个菜单选择“e”输入成绩选择“r”显示成绩选择“q”
退出atoi用于将实参串转换为整型
5.2.2串
设计中经常要用到串例如数据库输入处理就要将用户输入命
令和存在串中有效命令相比较检验其有效性可用 2维形式建立字
符串左下标决定串个数右下标介绍说明串最大长度例如下面语句定义了
个串它可存放30个串串最大长度为80个:
charstr_.gif' />[30][80];
要访问单独串是很容易只需标明左下标就可以了例如下面语句以
str_.gif' />中第 3个串为参数gets
gets(str_.gif' />[2]);
该语句在功能上等价于:
gets(&str_.gif' />[2][0]);
但第种形式在专业员编制
最新评论