纠纷奇闻社交美文家庭
投稿投诉
家庭城市
爱好生活
创业男女
能力餐饮
美文职业
心理周易
母婴奇趣
两性技能
社交传统
新闻范文
工作个人
思考社会
作文职场
家居中考
兴趣安全
解密魅力
奇闻笑话
写作笔记
阅读企业
饮食时事
纠纷案例
初中历史
说说童话
乐趣治疗

C语言之一维数组

7月15日 辞凤阙投稿
  C语言数组
  当我们处理大量数据值时,我们需要任意数量的不同变量。随着变量数量的增加,程序的复杂性也会增加,因此程序员会对变量名称感到困惑。在某些情况下,我们需要处理大量类似的数据值。为了使这项工作更容易,C编程语言提供了一个名为数组的概念。数组是一种特殊类型的变量,用于一次存储多个相同数据类型的值。数组是存储在具有单个名称的连续内存位置中的类似数据项的集合。数组声明
  在C语言中,当我们想要创建一个数组时,我们必须知道要存储在该数组中的值的数据类型以及要存储在该数组中的值的数量。创建一个数组语法:类型数组名〔size〕创建具有大小和初始值的数组的语法:类型数组名〔size〕{value1,value2,};创建没有大小和初始值的数组的语法:类型数组名〔〕{value1,value2,};
  在上面的语法中,数据类型指定我们存储在该数组中的值的类型,size指定可以存储在该数组中的最大值数。
  示例代码
  inta〔3〕;
  这里,编译器使用单个名称a分配6个字节的连续内存位置,并告诉编译器将三个不同的整数值(每个内存为2个字节)存储到该6个字节的内存中。对于上述声明,内存组织如下:
  在上面的内存分配中,所有三个内存位置都有一个通用名称a。因此无法直接访问单个内存位置。编译器不仅分配内存,还为数组的每个单独的内存位置分配一个数字引用值。该参考编号称为索引或下标。以上示例的索引值如下,数组下标从0开始,故最大下标是size1
  不同的初始化方式
  intarr〔8〕;不初始化
  intarr〔8〕0;error数组初始化需要代扣好的初始值设定项列表(大括号初始化)
  intarr〔8〕{0};true告诉编译器,所有的都按一个方式初始化
  intarr〔8〕{6};true只有第一个为6,剩下的元素都自动初始化为0
  intarr〔8〕{1,2,3,4,5,6};true
  intarr〔8〕{0,1,2,3,4,5,6,7,8};error初始值太多,超出了数组的存储范围
  intarr〔8〕{,,,5,2,0};error初始化只从从左到右,前面和中间都不能省略
  intarr〔〕{1,2,3,4,5};true数组里有几个元素?未指定数组大小,编译器会自动推导出来
  intarr〔〕;error既不告诉编译器要多大内存,也不说有几个元素,编译器并不知道改怎么分配内存
  数组的遍历通常通过循环操作,如下代码includestdio。hintmain(){intarr〔5〕{1,2,3,4,5};intlength5;printf(数组打印);for(inti0;i){printf(d,arr〔i〕);}printf();printf(用户输入);for(inti0;i){intresultscanf(d,arr〔i〕);}printf(数组打印);for(inti0;i){printf(d,arr〔i〕);}printf();return0;}
  数组输入可以采用换行作为数据间隔,也可以用空格作为数据间隔,运行结果如下:一维数组常规操作
  插入数据
  数组的插入主要场景有以下几种:从零无序插入从零有序插入,需要调整数据有数据按序号插入,需要挪动数组
  示例程序从零无序插入数组,输入一组数据,1作为结束
  数组在做任何插入前都需要考虑满的状态,数组充当一个容器,插入数据只需要计数变量count改变,并且充当数组下标,整体操作比较简单,图示如下:
  示例代码实现如下:includestdio。hintmain(){intarray〔20〕{0};constintmax20;intcount0;intvalue,while(1){valuescanf(d,data);if(data1){}if(countmax){printf(已满!);}array〔count〕}for(inti0;i){printf(d,array〔i〕);}printf();return0;}
  运行效果如下:
  示例程序从零插入数组,输入一组数据,实现数据从小到大存储,1作为结束
  可以在上述代码的基础上进行改进,增加排序的功能,当插入第一个元素的时候,默认有序,后面插入的元素,只需要和前面的元素比较,如果小于前面的元素就进行交换,调整到第一次小于插入元素的位置,或者调整到下标为0的位置。图示如下:
  示例代码实现如下:includestdio。hintmain(){intarray〔20〕{0};constintmax20;intcount0;intvalue,while(1){valuescanf(d,data);if(data1){}if(countmax){printf(已满!);}array〔count〕for(intkcount1;k0;k){if(array〔k〕array〔k1〕){inttemparray〔k〕;array〔k〕array〔k1〕;array〔k1〕}}}for(inti0;i){printf(d,array〔i〕);}printf();return0;}
  运行效果如下:
  示例程序给定已有数组,在指定第几个元素的位置插入指定数据
  需要注意的问题就是第几个元素和序号的区别,序号是从0开始的,第几个元素是从1开始的。编写代码时候需要考虑序号的有效性,然后唯一要做的就是腾出一个位置,然后插入元素即可,或者先插入到数组最后面,然后一次挪动元素到指定位置也可以。实现示意图如下:
  示例代码实现如下:includestdio。hintmain(){intarray〔20〕{555,567,666,999,888};constintmax20;intcount5;intvalue0;intindex0;intinsertData0;valuescanf(dd,index,insertData);if(countmax){printf(已满无法插入!);return0;}if(index1indexcount){printf(序号有误,无法插入!);return0;}array〔count〕insertDfor(intkcount1;k){inttemparray〔k〕;array〔k〕array〔k1〕;array〔k1〕}for(inti0;i){printf(d,array〔i〕);}printf();return0;}
  运行效果如下:
  查找数据
  查找数据相对于来说比较简单,一般是遍历数据直接if比较即可,当然还有一种有序数据的查找可以采用二分法查找提高查找效率。
  示例程序给定已有数组,查找指定数据的数组下标includestdio。hintmain(){intarray〔20〕{555,567,666,999,888};constintmax20;intcount5;intpos1;intvalue0;intsearchData0;valuescanf(d,searchData);for(inti0;i){if(array〔i〕searchData){}}if(pos1){printf(未找到指定数据!);}else{printf(指定数组下标是:d,pos);}return0;}
  上述代码中的pos初始值为1,因为数组下标也有0下标,作为未找到的的判定,所以初始值是1。
  运行效果如下:
  示例程序给定已有有序数组,采用二分法查找指定数据的数组下标includestdio。hintmain(){intarray〔10〕{1,2,3,4,5,6,7,8,9,10};intleft0;intright9;intmid0;intvalue,searchData0;intpos1;valuescanf(d,searchData);while(leftright){mid(leftright)2;if(array〔mid〕searchData){rightmid1;}elseif(array〔mid〕searchData){leftmid1;}else{}}if(pos1){printf(未找到指定数据!);}else{printf(指定数组下标是:d,pos);}return0;}
  运行效果如下:
  删除数据
  要注意的就是数组的删除是伪删除,只要找到指定数据,然后把后面的元素往前移动即可,然后计数变量做减一操作即可,整体难度不大,当然数组的删除也有按照第几个元素删除,也有删除指定数据的方式。实现示意图如下:
  示例程序给定已有数组,删除指定的第几个元素。includestdio。hintmain(){intarray〔10〕{555,567,666,999,888};constintmax10;intcount5;intindex,value0;valuescanf(d,index);if(index1indexcount){printf(索引有误,无法删除!);return0;}for(intiindex1;icount1;i){array〔i〕array〔i1〕;}数组真正的删除for(inti0;i){printf(d,array〔i〕);}printf();return0;}
  运行效果如下:
  示例程序给定已有数组,删除指定数据。includestdio。hintmain(){intarray〔10〕{555,567,666,999,888};constintmax10;intcount5;intindex1,value0;intdata0;valuescanf(d,data);先查找到序号,剩下的处理方案和序号删除类似for(inti0;i){if(array〔i〕data){}}if(index1){printf(未找到指定数据,无法删!);}else{for(icount1;i){array〔i〕array〔i1〕;}数组真正的删除}for(inti0;i){printf(d,array〔i〕);}printf();return0;}
  运行效果如下:
  修改数据
  修改数据相对于来说比较简单,一种是通过输入序号进行修改,注意序号有效性,实际下标是序号减一即可,还有一种就是查找数据进行修改。
  示例程序给定已有数组,修改指定序号下的数据includestdio。hintmain(){intarray〔10〕{555,567,666,999,888};constintmax10;intcount5;intindex0,value0;intdata0;valuescanf(d,index);先查找到序号,剩下的处理方案和序号删除类似if(index1indexcount){printf(序号有误,无法修改!);}else{valuescanf(d,array〔index〕);}printf();return0;}
  示例程序给定已有数组,修改指定数据为新的数据includestdio。hintmain(){intarray〔10〕{555,567,666,999,888};constintmax10;intcount5;intindex1,value0;intdata0;valuescanf(d,data);先查找到序号,剩下的处理方案和序号删除类似for(inti0;i){if(array〔i〕data){}}if(index1){printf(未找到指定数据,无法修改!);}else{array〔index〕}for(inti0;i){printf(d,array〔i〕);}printf();return0;}
  数组简单排序
  示例程序冒泡排序
  冒泡排序算法思想是相邻的两个元素进行比较,不满足要求规则进行交换,第一次冒泡决定了第一大元素,故第二次冒泡可减少笔记次数一次。外循环给予每个元素有冒泡机会,内循环描述比较次数,代码实现如下:includestdio。hintmain(){intarray〔〕{0,1,2,9,3,4,5,6,7,8};intarrayNum10;for(inti0;iarrayNum1;i){for(intj0;jarrayNum1i;j){if(array〔j〕array〔j1〕){inttemparray〔j〕;array〔j〕array〔j1〕;array〔j1〕}}}for(inti0;iarrayNi){printf(d,array〔i〕);}printf();return0;}
  示例程序选择排序
  选择排序算法思想是填坑思想,第一个位置,选择最小的填进去,第二个位置选择剩余元素最小的填充第二个位置,
  依次类推,外循环用来遍历每一个坑位,内循环去找剩余元素最小的,找到和当前坑元素交换即可。代码实现如下:intminIfor(inti0;iarrayNi){minI从剩下的元素中找最小的for(intji1;jarrayNj){if(array〔j〕array〔minIndex〕){minI}}和选出来的那个元素进行交换temparray〔i〕;array〔i〕array〔minIndex〕;array〔minIndex〕}
  示例程序插入排序
  插入排序算法思想是插队思想,第一个元素当做有序数据,后续数据插在最后面,依次和前面元素比较,类似有序插入数据,比较到第一次小于插入元素的位置,或者比较到0的位置即可,外循环遍历每个数据,内循环描述插入过程,代码实现如下:includestdio。hintmain(){intarray〔〕{0,1,2,9,3,4,5,6,7,8};intarrayNum10;intpreIndex,for(inti1;iarrayNi)把第一个元素当做是有序序列{preIndexi1;第一个元素的序号currentarray〔i〕;暂时存储,腾出一个位置while(preIndex0array〔preIndex〕current){array〔preIndex1〕array〔preIndex〕;preI}array〔preIndex1〕}for(inti0;iarrayNi){printf(d,array〔i〕);}printf();return0;}客观请留步
  如果阁下正好在学习CC,看文章比较无聊,不妨关注下关注下小编的视频教程,通俗易懂,深入浅出,一个视频只讲一个知识点。视频不深奥,不需要钻研,在公交、在地铁、在厕所都可以观看,随时随地涨姿势。
投诉 评论 转载

24颗钻石求嫁!双十一Sainsburys英佰瑞约你私定终身双十一已经走到了第7个年头,你痒了吗?往年的双十一,在众多商家铺天盖地锣鼓喧天的价格战中,消费者已渐渐有了疲态。即使折扣再低,我们也只是以看似更低的价格,来换赚到了的错觉……环球黑卡获胡润百富新秀奖,亮相颁奖典礼作为追踪记录中国企业家群体变化的权威机构,胡润百富每一年的颁奖典礼都受到各大企业的密切关注,今年也不例外,今年的胡润百富颁奖典礼已于1月24日在上海召开,典礼现场很多国内外一线……C语言之一维数组C语言数组当我们处理大量数据值时,我们需要任意数量的不同变量。随着变量数量的增加,程序的复杂性也会增加,因此程序员会对变量名称感到困惑。在某些情况下,我们需要处理大量类似……图超实用的鸡尾酒大全入门指导都靠它要说生活中缺不了的是什么,我想,酒必定会占一席之地。但白酒对于大多数女孩子来说,还是过于辛辣刺激了,啤酒又容易发胖,今天就给安利一些关于鸡尾酒的知识。说起鸡尾酒,很多人对……气血不足的表现?每天来一碗,喝出好气色,女人不能错过的平民补人以气血为本,而人最怕气血不足。我们形容一个人身体好,通常认为其气中老年人的体质处于下滑阶段,气血运行趋于缓慢,代谢能力下降,容易形成气血不足。那么气血不足有什么表现呢?……赴日旅游,正逢日本樱花季!购物赏樱大阪同时满足你日本的春天是樱花的季节。在这个季节赏樱对日本人来说不仅仅是欣赏眺望,可以说赏樱是一种文化。在樱花树下或一边吃便当,一边畅快饮酒,或饮茶赏樱,或吟诗作赋赏樱也是传统,愉快赏樱的方……图小米6亮白色美的令人发指看这里揭秘它神秘的黑科技我们知道,小米手机在经过了和众多互联网品牌的价格战中,脱颖而出,所发布的新品小米6让我们再次惊艳。小米6这次有着全新的亮白配色,让我们来体验一下吧。在当今竞争激烈的智能手……15店万人狂欢!芳妮豆丁5。1嗨购会倾巢而出4月22日4月29日,国内知名儿童摄影机构芳妮豆丁5。1万人嗨购会活动盛大启幕。据了解,本次芳妮豆丁5。1嗨购会规模盛大、好礼丰富,必将为晒娃达人们带来一场前所未有的饕餮盛宴。……POPOKING在上海国际黄金展会掀起的火热浪潮,惊艳了整个上海国际珠宝展览会已浩浩荡荡过去了3天,如今已接近尾声。在此次展会上,昶昱黄金以全新展台形象出现在国内知名品牌区中,昶昱集团旗下的高端儿童珠宝奢侈品牌POPOKING首次亮相珠……秉持骑士精神的环球黑卡,荣膺胡润百富大奖由知名财富调研机构胡润百富举办的第十四届至尚优品颁奖盛典于2018年1月24日在上海隆重举行。会上,胡润百富公布了年度中国千万富豪品牌倾向报告,其报告由消费者自主选出,权威性地……VIOLA精酿啤酒再度携手上海环球马术比赛引燃2019马术比赛作为绅士运动的代表,一直深受品质生活人群的喜爱。2019年五一小长假,上海浪琴环球马术冠军赛再次在沪举办。近六十位中外顶级骑手和百匹赛马集结申城,上演了优雅而不失热烈的……图红酒怎么开这样做轻松饮美酒说起红酒,相信大家并不会感到陌生,不管是男女都是很喜欢喝红酒的。不过很多人还不是很了解红酒该怎么开才好,下面就让我们一起来学习一下怎么开红酒!说起酒,不管是现在还是古时候……
图华为手机成功逆袭苹果占据手机品牌半壁江山春到栖凤谷图不只是换了个颜色iphone6splus内在的不同免费出游,政府补贴?当心低价旅游骗局90后北京小伙辞职花光积蓄去看世界杯想看梅西,为圆梦勇气可嘉图云南大理景点介绍带你领略如梦般的彩云之南图十大简易步骤教你看懂美图手机怎么样图北戴河火车站跨越百年的交通枢纽爱情里有三大苦,熬过你就赢了图白洋淀一日游这些景点值得你去游玩图智能手环有什么用教你使用高科技沾益着力打造高质量有机硅产业集群

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找美丽时装彩妆资讯历史明星乐活安卓数码常识驾车健康苹果问答网络发型电视车载室内电影游戏科学音乐整形