(九) 多维数组.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
(九) 多维数组

(九) 多维数组 一、高维数组 有时,数组的维数并不止一维,例如一个记录消费中心在第一季度里各个月的收入数据就可以用二维数组来表示。定义二维数组的方法是在一维数组定义的后面再加上一个用方括号括起来的维数说明。例如: float array[3][8]; 实际上,这个数组可以看成3个连续的一维数组,每个一维数组具有8个元素。该数组在内存中的存储格式为最左边的维数相同的元素连续存储,也即按行存储的。首先存储第一行8个元素,其次是第二行,最后是第三行。 main() { int array[3][3]={1,2,3,4,5,6,7,8,9}; int i,j; for(i=0;i3;i++) { for(j=0;j3;j++) printf(%3d); printf(\n); } } 它的输出结果为: 1 2 3 4 5 6 7 8 9 可以看出,二维数组元素是按行存储的。 我们也可以对数组进行赋值,而不是初始化。 main() { int array[3][3]; int i,j; for(j=0;j3;j++) for(i=0;i3;i++) scanf(%d,array[i][j]); for(i=0;i3;i++) { for(j=0;j3;j++) printf(%3d); printf(\n); } } 当输入1 2 3 4 5 6 7 8 9回车 输出为: 1 4 7 2 5 8 3 6 9 数组可以是二维、三维甚至是更高维数的,虽然C语言对维数的处理没有上限,但是处理高维数组是很头疼的事。一般尽量避免处理四维和四维以上的数组。下面看一个三维数组的例子: main() { int array[2][3][4]; int i,j,k; for(i=0;i2;i++) for(j=0;j3;j++) for(k=0;k4;k++) array[i][j][k]=i*12+j*4+k; } 这个三维数组可以看成2个二维数组,每个二维数组又可以看成3个一维数组。可以在头脑里想象成两个平行平面,每个平面内有3*4个点。所以共有24个元素。 二、字符串数组 上面讲的都是存放数值的,有一类数组,用来处理字符串的,我们叫字符串数组。其实字符串数组也是二维数组,只是它的特殊性,才单独拿出来说的。 main() { char s[10][10]; int i; for(i=0;i10;i++) scanf(%s,s[i]); } 先看它的输入特性,前面在说输入语句的时候说过,遇到字符串输入,可以不加,现在只要记住这个特性就可以,以后说指针的时候再讲为什么。但是这儿为什么用s[i],可能很多人不太明白。我们定义的是二维数组,而输入的时候,却使用一维数组的形式。这是因为字符串在内存里地址可以用它的名字表示,就好象这种形式: main() { char s[10]; scanf(%s,s); } 定义的是一维数组,输入语句用变量形式表示一样。通过前面的%s形式可以看出,s[i]是一个数组,所以s就是二维数组了。 这里要注意一点,scanf()函数在输入字符串时候不能支持空格,看下面的例子: main() { char s[3][10]; int i; for(i=0;i10;i++) scanf(%s,s[i]); for(i=0;i3;i++) printf(%s\n,s[i]); } 我们输入:1111 2222 3333 4444 我们是想把1111赋值给s[0],2222 3333赋值给s[1],4444赋值给s[2]。可实际上编译器是这样做的,把1111赋值给s[0],把2222赋值给[1],把3333赋值给s[2]。 实际输出:1111 2222 3333 在输入字符串的时候,如果使用scanf(),就把空格当作下一个输入了。那么我们怎么解决这个问题呢?毕竟很多情况下,一行字符串肯定有空格出现的。我们使用新的函数gets()。这个函数是专门接受字符串输入的,它跳过了空格的影响。把上面的输入语言修改为gets(s[i])即可。 我们定义了char s[3][10],超过10个字符肯定不行,如果少于10个字符,电脑怎么处理呢?电脑是在每个字符串的后面自动补上\0,作为字符串的结束标志。 我们经常在填写一些可选择的内容时经常发现,待选的字符串都是按字母排列好的,我们怎么用C语言实现这个功能?在C语言里,字符串的排序是按照字符的ASCII码来的,如果第一个字符一样,则比较第二个,依次类推。 main() { char s1[6]=addfgh,s2[5]=asdlg; int i; for(i=0;s1[i]!=\0s2[i]!=\0;i++) { if(s1[i] { printf(s1 exit(1); } else if(s1[i]s

文档评论(0)

htfyzc + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档