C语言程序设计-数组ppt课件_第1页
C语言程序设计-数组ppt课件_第2页
C语言程序设计-数组ppt课件_第3页
C语言程序设计-数组ppt课件_第4页
C语言程序设计-数组ppt课件_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C语言程序设计,5.1数组,了解数组含义及功能理解数组变量在内存中的分配和使用方式掌握数组的定义、初始化及引用方法掌握字符数组及字符串的用法及基本操作,调查电视节目欢迎程度。某电视台要进行一次对该台8个栏目(设相应栏目编号为18)的受欢迎情况,共调查了1000位观众,现要求编写程序,输入每一位观众的投票,每位观众只能选择一个最喜欢的栏目投票,统计输出各栏目的得票情况。,投票情况统计,7.1.1程序解析排序,#includeintmain(void)intcount9;/*设立数组,栏目编号对应数组下标*/inti,response;for(i=1;i8)/*检查投票是否有效*/printf(thisisabadresponse:%dn,response);elsecountresponse+;/*对应栏目得票加1*/printf(result:n);/*输出各栏目得票情况*/for(i=1;i=8;i+)printf(%4d%4dn,i,counti);return0;,inputyourresponse:3inputyourresponse:6inputyourresponse:9thisisabadresponse:9inputyourresponse:8result:122034,for(i=1;i=8;i+)printf(%4d%4dn,i,counti);,count,count0count1count8,为何不使用count0?,数组:相同类型数据的有序集合,在内存中连续存放。由数组名和下标惟一地确定每个数组元素每个元素都属于同一类型一批相同类型的变量使用同一个数组变量名,用下标来相互区分。优点:表述简洁,可读性高;便于使用循环结构,5.1数组,5.1.1导例:如何存储和操作某班C语言课程的成绩问题描述一个班(假设有10名同学)C语言课程考试后,如何利用C程序来显示这些同学的成绩?如果有的同学的成绩统计错了,如何将它改正过来?如果有2个同学的成绩统计混淆了,如何将他们的成绩交换过来?,5.1数组,5.1.1导例:如何存储和操作某班C语言课程的成绩问题分析如何存储学生成绩?变量数组,5.1数组,#include#defineN10voidmain()/*定义一维数组并初始化,长度必须为常量*/intscoreN=82,76,69,92,53,78,80,88,65,72;inti,t;for(i=0;iN;i+)/*显示所有学生的成绩*/printf(%d,scorei);printf(n);score4=60;/*修改第5名同学的成绩*/t=score1;/*互换第2和第7名同学的成绩*/score1=score6;score6=t;for(i=0;iN;i+)/*再次显示所有学生的成绩*/printf(%d,scorei);,for(i=0;iN;i+)printf(“%d”,scorei);,score,score0score1score9,数组,一维数组的定义和引用,1、定义类型名数组名数组长度类型名:数组元素的类型数组名:数组(变量)的名称,标识符数组长度:常量表达式,给定数组的大小inta10;定义一个含有10个整型元素的数组acharc200;定义一个含有200个字符元素的数组cfloatf5;定义一个含有5个浮点型元素的数组f,数组长度为常量,2、数组的内存结构,a,inta10;,假设系统规定int类型占用2个字节,则对于数组a,其内存分配形式,只要知道了数组第一个元素的地址以及每个元素所需的字节数,其余各个元素的存储地址均可计算得到。,数组名是一个地址常量,存放数组内存空间的首地址。不允许被修改。,3、引用,先定义,后使用只能引用单个的数组元素,不能一次引用整个数组数组名下标下标:整型表达式取值范围:0,数组长度-1inta10;10个元素:a0、a1、a9数组元素的使用方法与同类型的变量相同scanf(%d,下标不要越界不能使用a10,定义数组类型名数组名数组长度引用数组元素数组名下标inta10;a0=a9=0;ak=temp;,区分数组的定义和数组元素的引用,下标不要越界,数组长度为常量,一维数组的初始化,定义数组时,对数组元素赋初值类型名数组名数组长度=初值表;inta10=1,2,3,4,5,6,7,8,9,10;a0=1,a1=2,.a9=10静态数组、动态数组的初始化staticintb5=1,2,3,4,5;静态存储的数组如果没有初始化,所有元素自动赋0staticintb5;动态存储的数组如果没有初始化,所有元素为随机值autointc5;等价与intc5;,staticintb5=1,2,3;b0=1,b1=2,b2=3,b3=0,b4=0autointfib20=0,1;fib0=0,fib1=1,其余元素不确定如果对全部元素都赋初值,可以省略数组长度inta10=0,1,2,3,4,5,6,7,8,9,针对部分元素的初始化,建议不要省略数组长度,使用一维数组编程,数组和循环for(i=0;in;i+)printf(%d,ai);数组下标作为循环变量,通过循环,逐个处理数组元素,一维数组示例,例5-1用数组计算fibonacci数列的前10个数,并按每行打印5个数的格式输出。1,1,2,3,5,例5-2顺序查找法。输入5个整数,将它们存入数组a中,再输入1个数x,然后在数组中查找x,如果找到,输出相应的最小下标,否则,输出“NotFound”。例5-3输入n(n10),再输入n个数(1)输出最小值和它所对应的下标(2)将最小值与第一个数交换,输出交换后的n个数例5-4选择排序法。例5-5二分查找法。,用数组计算fibonacci数列的前10个数,并按每行打印5个数的格式输出。1,1,2,3,5,8,13,用数组计算并存放fibonacci数列的前10个数f0=f1=1fn=fn-1+fn-22n9,例5-1计算fibonacci数列,#includeintmain(void)inti;intfib10=1,1;/*数组初始化*/for(i=2;i10;i+)fibi=fibi-1+fibi-2;for(i=0;i10;i+)printf(%6d,fibi);if(i+1)%5=0)/*5个数换行*/printf(n);return0;,例5-1源程序,11235813213455,输入5个整数,将它们存入数组a中,再输入1个数x,然后在数组中查找x,如果找到,输出相应的下标,否则,输出“NotFound”。输入:298199输出:1输入:298167输出:NotFound,例5-2在数组中查找一个给定的数,#includeintmain(void)inti,flag,x;inta5;printf(“Enter5integers:);for(i=0;i5;i+)scanf(%d,例5-2源程序,Enter5integers:29819Enterx:9Indexis1,Enter5integers:29819Enterx:7NotFound,flag的作用?,#includeintmain(void)inti,flag,x;inta5;printf(“Enter5integers:);for(i=0;i5;i+)scanf(%d,例5-2思考(1),Enter5integers:29819Enterx:9Indexis1Indexis4,去掉break语句,结果?,#includeintmain(void)inti,sub,x;inta5;printf(“Enter5integers:);for(i=0;i5;i+)scanf(%d,例5-2思考(2),Enter5integers:29819Enterx:9Indexis4,sub的作用?,#includeintmain(void)inti,min,n;inta10;printf(“Entern:);scanf(%d,例5-3求最小值,Entern:6Enter6integers:29-1816minis-1,方法!,虽得到了最小值,但不能确定最小值所在下标!,输入n(n10),再输入n个数,输出最小值和它所对应的下标。用index记录最小值对应的下标aindex就是最小值,例5-3(1)求最小值及其下标,流程图,#includeintmain(void)inti,index,n;inta10;printf(“Entern:);scanf(%d,求最小值及下标,Entern:6Enter6integers:29-1816minis-1subis2,输入n(na0,例5-5(2)交换最小值,导例5.1.2选择法排序,利用选择排序方法将5.1.1导例中全班同学C语言课程成绩按照从低到高的顺序排列。,第1次:53766992827880886572第2次:53656992827880887672第3次:53656992827880887672第4次:53656972827880887692第5次:53656972767880888292第6次:53656972767880888292第7次:53656972767880888292第8次:53656972767880828892第9次:53656972767880828892,下标值,82766992537880886572(n=10)10个数(a0a9)中找最小数,与a0交换(1)53766992827880886572a4a09个数(a1a9)中找最小数,与a1交换(2)53656992827880887672a8a18个数(a2a9)中找最小数,与a2交换(3)53656992827880887672a2a27个数(a3a9)中找最小数,与a3交换(4)53656972827880887692a9a36个数(a4a9)中找最小数,与a4交换(5)53656972767880888292a8a45个数(a5a9)中找最小数,与a5交换(6)53656972767880888292a5a5,选择法(1),766992537880886572(n=10)5个数(a5a9)中找最小数,与a5交换(6)53656972767880888292a5a54个数(a6a9)中找最小数,与a6交换(7)53656972767880888292a6a63个数(a7a9)中找最小数,与a7交换(8)53656972767880828892a8a72个数(a8a9)中找最小数,与a8交换(9)53656972767880828892a8a8,选择法(1),(1)n个数(a0an-1)中找最小数,与a0交换(2)n-1个数(a1an-1)中找最小数,与a1交换(n-1)2个数(an-2an-1)中找最小数,与an-2交换,(1)10个数(a0a9)中找最小数,与a0交换(2)9个数(a1a9)中找最小数,与a1交换(3)8个数(a2a9)中找最小数,与a2交换(4)7个数(a3a0)中找最小数,与a3交换,选择法(2),n个数重复n-1次,流程图,外循环控制:n个数选择排序共需要n-1次,内循环控制:在下标范围k,n-1内找最小值所在位置index,选择法排序(程序段),for(i=0;in-1;i+)k=i;/*查找最小元素的下标*/for(j=i+1;jn;j+)if(ajak)k=j;if(k!=i)/*将ak和ai交换*/t=ak;ak=ai;ai=t;,排序前学生成绩:82766992537880886572排序后学生成绩:53656972767880828892,5.1.4导例:二分查找算法,已知某个成绩,查找该成绩在班级中的排名,即返回该成绩下标。,5.2导例顺序查找是最简单明了的一种,其查找过程就是对数组元素从头到尾的遍历过程。但是一旦数组元素量很大的情况下,其查找的效率不高。二分查找是查找效率较高的一种,但前提是数组元素必须是有序的。,二分查找流程图,二分法查找(程序段),intbinarySearch(inta,intn,intx)intlow=0;inthigh=n-1;while(low=high)intmid=(low+high)/2;if(x=amid)returnmid;/*mid为x在数组中的下标*/elseif(x对字符数组的操作普通字符数组:数组元素的个数是确定的,一般用下标控制循环字符串:没有显式地给出有效字符的个数,只规定在字符串结束符0之前的字符都是字符串的有效字符,一般用结束符0来控制循环循环条件:si!=0,for(i=0;si!=0;i+)putchar(si);for(i=0;i字符串结束符*/count=0;for(i=0;stri!=0;i+)if(stri=0)count+;printf(count=%dn,count);return0;,Enterastring:Its512count=3,如何改变输入结束符?,能省略stri=0吗?,输入一个以回车结束的字符串(少于80个字符),滤去所有的非十六进制字符后,组成一个新字符串(十六进制形式),输出该字符串并将其转换为十进制数后输出。,例:进制转换,例如:输入字符串:zx1?ma0!kbq去掉非十六进制后组成新字符串:1a0b转换为十进制为:6667,分析,输入原字符串str1,虑调非16进制字符后生成新字符串str2,把字符串str2转换成十进制数number,输出number,i=0;while(str1i=getchar()!=n)i+;stri=0;,k=0;/k控制新字符串str2的下标for(i=0;s

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论