java二维数组:二维数组来源: 发布时间:星期四, 2009年2月12日 浏览:192次 评论:0
5.2.1 2维般形式 c语言允许使用多维最简单多维是 2维实际上 2维是以维为元素构成要将d介绍说明成大小为(1 02 0) 2维整型可以写成: d[10][20] 请留心上面介绍说明语句 c不像其它大多数计算机语言那样使用逗号区分下标而是用方 括号将各维下标括起并且 2维下标均从0计算 和此相似要存取d中下标为( 35)元素可以写成: d [ 3 ] [ 5 ] 在例5 - 3中整数1到1 2被装入个 2维 [例5 - 3 ] ( ) { tin u m [ 3 ] [ 4 ] for (t=0; t<3; t) for (i=0;i<4;i) n u m [ t ] [ i ] = ( t * 4 ) + i + 1 ; } 在此例中 n u m [ 0 ] [ 0 ]值为1n u m [ 0 ] [ 2 ]值为3 . . . . . .n u m [ 2 ] [ 3 ]值为1 2可以将 该想象为如下表格: \" width=318 _disibledevent=>500)this.style.width=500;\" _disibledevent=> 2维以行—列矩阵形式存储第个下标代表行第 2个下标代表列这意味着 按照在内存中实际存储顺序访问元素时右边下标比左边下标变化快些图 5 - 2是个 2维在内存中情形实际上第下标可以认为是行指针 记住旦被证明所有元素都将分配相应存储空间对于 2维可用 下列公式计算所需内存字节数: 行数×列数×类型字节数=总字节数 因而假定为双字节整型大小为( 1 05)整型将需要:1 0×5×2=100 字节 当 2维用作参数时实际上传递是第个元素(如[ 0 ] [ 0 ])指针不过该 至少得定义第 2维长度这是c编译若要使得对检索正确无误就需要 知道每行长度例如将要接收大小为( 1 01 0) 2维可以介绍说明如下: func1 (x) x[ ][10] { . . . } \" width=539 _disibledevent=>500)this.style.width=500;\" _disibledevent=> 第维长度也可指明但没有必要 c编译对中如下语句: x [ 2 ] [ 4 ] 处理时需要知道 2维长度若行长度没定义那么它就不可能知道第 3行从哪儿开 始 [例5-4] 用个 2维存放某教师任教各班学生分数假定教师有 3个班每班 最多有 3十名学生注意各存取思路方法 # es 3 # grades 30 # <stdio.h> ( ) { void enter_grades; void disp_grades( ); get_grade( ); a[es] [grades];定/*义 2维每行存放个班学生成绩*/ char ch; for( ; ;) { do { /*菜单显示* / prf(\"(e)nter grades\\n\"); prf(\"(r)eport grades\\n\"); p r i n t f ( \" ( q ) u i t \\ n \" ) ; ch=toupper(getchar); /将*键盘输入转换为大写*/ } while(ch!=\'e\' && ch!=\'r\' && ch!=\'q\'); switch(ch) { \'e\': enter_grades( ); b r e a k ; \'r\': d i s p _ g r a d e s ( g r a d e ) ; b r e a k ; \'q\': e x i t ( 0 ) ; } } } void enter_grades(a) a[grades]; { t, i; for (t=0;t<es;t) { prf (\" #%d:\\n\",t+1); for (i=0; i<grades; i) a [ t ] [ i ] = g e t _ g r a d e ( i ) ; } } get_grades(num) num; { char s[80]; prf(\"enter grade for student # %d:\\nn\"u m + 1 ) ; g e t s ( s ) ;/ *输入成绩* / r e t u r n ( a t o i ( s ) ) ; } void disp_grades(g) /*显示学生成绩* / g[ ][grades]; { ti ; for(t=0; t<es; t) { prf(\" # %d:\\n\"t+ 1 ) ; f o r ( i = 0 ; i < g r a d e s ; + + i ) prf(\"grade for student #%d is %d\\ni\"+ 1 g[ t ] [ i ] ) ; } } 我们将实际问题简化为共有2个班每班两个学生即将中常量定义修改如下: # es 2 # grades 2 运行: r u n (e)nter grades (r)eport grades ( q ) u i t : e #1: enter grade for student #17:8 enter grade for student #289: ¿ #2 enter grade for student #19:8 ¿ enter grade for student #29:0 ¿ (e)nter grades (r)eport grades ( q ) u i t : r¿ #1 grade for student #1 is 78 grade for student #2 is 89 #2 grade for student #1 is 98 grade for student #2 is 90 (e)nter grades (r)eport grades (q)uit :q 运行我们首先看到个菜单选择“ e”输入成绩选择“ r”显示成绩选择“q” 退出a t o i ( )用于将实参串转换为整型 5.2.2 串 设计中经常要用到串例如数据库输入处理就要将用户输入命 令和存在串中有效命令相比较检验其有效性可用 2维形式建立字 符串左下标决定串个数右下标介绍说明串最大长度例如下面语句定义了 个串它可存放3 0个串串最大长度为8 0个: char str_.gif' />[30][80]; 要访问单独串是很容易只需标明左下标就可以了例如下面语句以 s t r _ a r r a y中第 3个串为参数gets( ) g e t s ( s t r _ a r r a y [ 2 ] ) ; 该语句在功能上等价于: g e t s ( & s t r _ a r r a y [ 2 ] [ 0 ] ) ; 但第种形式在专业员编制c语言中更为常见 为帮助理解串使用方法研究例5 - 5它以个串为基础做简单文本编辑 [例5 - 5 ] # <s t d i o . h > # max 100 # len 80 char text [max][len] /* 个非常简单文本编辑器* / ( ) { register tij ; for(t=0;t<max; t) /*逐行输入串* / { p r i n t f ( \" % d : \" t ) ; g e t s ( t e x t [ t ] ) ; (! text[t][0]) ; /* 空行退出*/ } f o r ( i = 0 ; i < t i) /*按行逐个输出串* / { for(j=0; text [i][j];j) putchar(text [i][j]); putchar( \'\\n\'); } } 该输入文本行直至遇到个空行为止而后每次个地重新显示各行 0
相关文章读者评论发表评论 |