欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    C语言课件第07章-数组.ppt

    • 资源ID:5426538       资源大小:549KB        全文页数:58页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    C语言课件第07章-数组.ppt

    第7章 数 组 array,第7章 数 组,记录1个学生成绩,可用int s1;记录2个学生成绩,可用int s1,s2;记录3个学生成绩,可用int s1,s2,s3;记录100个数,用int s1,s2,s100;?,如何处理有相同属性的批量数据呢?,数组,int score100;,代表一个元素个数为100的整型数组score0,score1,score2,.,score99 100个整型变量,数组计数从0开始,第7章 数 组,基本数据类型:char int float double,一个基本数据类型的变量一次只能存储一个数值,构造数据类型,由基本数据类型通过一定的规则组合而成,亦称导出类型。,数组就属于构造数据类型,用数组一次可以表示一批属于相同数据类型的数据。,int score100;,定义一个数组score100后,内存中将开辟连续的100个int的空间单元,存储int 变量score0,score99,1.一维数组的定义和引用(p121),1)定义 类型名 数组名数组长度;,int a10;定义一个含有10个整型元素的数组 achar c200;定义一个含有200个字符元素的数组 cfloat f5;定义一个含有5个浮点型元素的数组 f,先定义,后使用 只能引用单个的数组元素,不能一次引用整个数组数组名下标下标:整型表达式取值范围:0,数组长度-1int a10;10个元素:a0、a1、a9 数组元素的使用方法与同类型的变量相同scanf(%d,2)引用,1.一维数组的定义和引用,区分数组的定义和数组元素的引用,内的是数组元素的下标下标可以是一个整型表达式下标的值不能越界,0.N1,内的是数组的长度数组长度必须是常量(表达式)一旦指定,就不能改变,定义数组 类型名 数组名数组长度;int a10;,引用数组元素 数组名下标,a0=a9=0;ak=temp;,2.一维数组的初始化(p122),静态数组初始化static int b5=1,2,3,4,5;,在定义数组时,对数组元素赋初值 类型名 数组名数组长度=初值表;,int a10=1,2,3,4,5,6,7,8,9,10;a0=1,a1=2,.a9=10,静态存储的数组如果没有初始化,所有元素自动赋0,动态存储的数组如果没有初始化,所有元素视为随机值.如:auto int c5;或 int c5;在引用前必须赋初值。,首先考虑是否给变量赋初值是编程的好习惯!,一维数组的初始化,针对部分元素的初始化,int b5=1,2,3;b0=1,b1=2,b2=3,b3=0,b4=0,如果对全部元素都赋初值,可以省略数组长度 int a=0,1,2 等价于 int a3=0,1,2,实际编程最好不要省略数组长度,在TC,VC中,其余元素实际值是被赋值为0,例 7-2 用数组计算 fibonacci 数列的前20个数,并按每行打印5个数的格式输出。1,1,2,3,5,8,分析:用数组计算并存放 fibonacci 数列的前20个数 int f20;f0=f1=1;fn=fn-1+fn-2;2n19,3 使用一维数组编程,例 7-2 源程序,#include int main(void)int i;int fib20=1,1;/*数组初始化*/for(i=2;i 20;i+)fibi=fibi-1+fibi-2;for(i=0;i 20;i+)printf(%6d,fibi);if(i+1)%5=0)/*5个数换行*/printf(n);return 0;,例7-3 在数组中查找一个给定的数,要求:输入5个互异的整数,将它们存入数组a中,再输入一个数x,然后在数组中查找x,如果找到,输出相应的下标,否则,输出“Not Found”。,输入:2 9 8 1 6 9输出:1输入:2 9 8 1 6 7输出:Not Found,例 7-3 源程序,#include int main(void)int i,flag,x;int a5;printf(Enter 5 integers:);for(i=0;i 5;i+)scanf(%d,Enter 5 integers:2 9 8 1 9Enter x:9Index is 1,如果允许输入相同的数,Enter 5 integers:2 9 8 1 9Enter x:9Index is 1Index is 4,输出所有满足条件的数的下标,#include int main(void)int i,index,x;int a5;printf(Enter 5 integers:);for(i=0;i 5;i+)scanf(%d,例 7-3 思考,Enter 5 integers:2 9 8 1 9Enter x:9Index is 4,若要求输出最后一个相同数的下标,例 7-3 思考,#include int main(void)int i,flag,x;int a5;printf(Enter 5 integers:);for(i=0;i 5;i+)scanf(%d,Enter 5 integers:2 9 8 1 9Enter x:9Index is 4,若要求输出最后一个相同数的下标,for(i=4;i=0;i-),例7-4 求最小值,要求:输入一个正整数n(n10),再输入n个整数,将它们存入数组a中。(1)输出最小值和它所对应的下标(2)将最小值与第一个数交换,输出交换后的n个数,求最小值的过程:输入 2 9-1 8 1 6=a0,a1,假设min=a0,与i1,n-1所有的数进行比较,如果ai min min=ai;所有的数都比较,一共循环n-1次,例 7-4(1)求最小值,#include int main(void)int i,min,n;int a10;printf(Enter n:);scanf(%d,例7-4 求最小值(2),要求:输入一个正整数n(n10),再输入n个整数,将它们存入数组a中。(1)输出最小值和它所对应的下标(2)将最小值与第一个数交换,输出交换后的n个数,在求最小值的过程中,用index记录最小值对应的下标 aindex就是最小值,#include int main(void)int i,index,n;int a10;printf(Enter n:);scanf(%d,例7-4(2)求最小值及其下标,要使最小值与第一个数交换,例7-4 求最小值(3),要求:输入一个正整数n(n10),再输入n个整数,将它们存入数组a中。(1)输出最小值和它所对应的下标(2)将最小值与第一个数交换,输出交换后的n个数,temp=a0;a0=aindex;aindex=temp;,temp=aindex;aindex=ak;ak=temp;,任意两个数组元素值aindex和ak的交换,5,1,5,aindex=5,ak=1;temp=0;,例 7-1 选择法排序,输入n(n10),再输入n个数,用选择法将它们从小到大排序后输出。设 n=5 3 5 2 8 1,3 5 2 8 1(1)1 5 2 8 3(2)2 5 8 3(3)3 8 5(4)5 8,选择法:每次从未排序的数中通过选择最小数进行排序。,3 5 2 8 1(n=5)5个数(a0a4)中找最小数,与a0交换(1)1 5 2 8 3 a4 a04个数(a1a4)中找最小数,与a1交换(2)1 2 5 8 3 a2 a13个数(a2a4)中找最小数,与a2交换(3)1 2 3 8 5 a4 a22个数(a3a4)中找最小数,与a3交换(4)1 2 3 5 8 a4 a3,选择法(1),选择法(2),(1)5个数(a0a4)中找最小数,与 a0 交换(2)4个数(a1a4)中找最小数,与 a1 交换(3)3个数(a2a4)中找最小数,与 a2 交换(4)2个数(a3a4)中找最小数,与 a3 交换,(1)n个数(a0an-1)中找最小数,与 a0 交换(2)n-1个数(a1an-1)中找最小数,与 a1 交换(n-1)2个数(an-2an-1)中找最小数,与 an-2 交换 an-1,n个数排序,n-1次找最小数以及交换操作,#include int main(void)int i,index,k,n,temp;int a10;printf(Enter n:);scanf(%d,源代码选择法排序,for(i=0;i n;i+)scanf(%d,ai);,数组:相同类型数据的有序集合,在内存中连续存放。,由数组名和下标惟一地确定每个数组元素 每个元素都属于同一类型,在数组中,一批相同类型的变量使用同一个数组变量名,用下标来相互区分。,int a10;,40027 从高位开始逐位输出一个整数的各位数字(选作),if(in0)/*先向左找到最高位的位数*/power=power/10;temp+;k=k*10;power=in;while(temp0)/*再向右计算每位数值*/temp-;k=k/10;digit=power/k;power=power%k;printf(%-2d,digit);,40027 用一维数组实现,int i,digit10,number,temp;while(number!=0)digiti=number%10;i+;number=number/10;temp=i-1;for(i=temp;i=0;i-)printf(%-2d,digiti);,二维数组,一维数组:访问单个变量元素时,由一个下标决定。,int a6;,int b 3 6;,一维数组用于表示一列长表,一个多维向量,访问单个变量元素时,由两个下标同时决定。二维数组,700,b12=700;,第j行、第k列的元素为bjk,二维数组,二维数组常用于表示矩阵的运算,int a32;int b32;int c32;,for(j=0;j3;j+)for(k=0;k2;k+)cjk=ajk+bjk;,Mc=Ma+Mb,int a6;,int b36;,int c1036;,访问单个变量元素时,由三个下标同时决定。三维数组,多维数组的空间想象,一维数组:一列长表或一个向量,二维数组:一个表格或一个平面矩阵,4*3*3,4*5,三维数组:三维空间的一个数据阵,多维数组:多维空间的一个数据列阵,7.2.2 二维数组的定义和引用,1、定义 类型名 数组名行长度列长度;,int a32;定义一个二维数组a,3行2列,3*2=6个int元素float b510;定义一个二维数组b,5 行 10 列,5*10=50个float元素,下标不能越界,7.2.2 二维数组的定义和引用,先定义,后引用,2、引用,数组元素的引用格式:数组名行下标 列下标,行下标和列下标:整型表达式行下标的取值范围是0,行长度-1列下标的取值范围是0,列长度-1,int a32;3 行 2 列,3*2=6 个int元素,a00 a01 a10 a11 a20 a21,二维数组在内存中的存放方式,int a32;3 行 2 列,6 个元素表示1个3行2列的矩阵a00 a01 a10 a11 a20 a21,二维数组的元素在内存中按先行后列的方式存放,a00a01a10a11a20a21,7.2.3 二维数组的初始化,1、分行赋初值int a33=1,2,3,4,5,6,7,8,9;int b43=1,2,3,0,0,0,4,5;,数组a1 2 3 4 5 67 8 9,数组b1 2 30 0 04 5 00 0 0,2、按先行后列的顺序赋初值int a33=1,2,3,4,5,6,7,8,9;int b43=1,2,3,0,0,0,4,5;后面缺省的项均为零,3、省略行长度对全部元素都赋初值,int a 3=1,2,3,4,5,6,7,8,9;或分行赋初值时,在初值表中列出了全部行int b 3=1,2,3,0,0,0,4,5建议不要省略,数组a1 2 3 4 5 67 8 9,数组b1 2 30 0 04 5 00 0 0,7.2.3 二维数组的初始化,7.2.3 二维数组的初始化,P130static int b43=1,2,3,4,5;int b43=1,2,3,4,5;int a10=;,7.2.4 使用二维数组编程,通常将行下标做为外循环的循环变量 列下标 内循环,利用行下标和列下标分别做为循环变量,通过二重循环,遍历二维数组,例7-6 生成一个矩阵并输出,定义1个 3*2 的二维数组a,数组元素的值由下式给出,按矩阵的形式输出a。a ij=i+j(0i2,0j1),分析:,int a32;,#include int main(void)int i,j;int a32;for(i=0;i 3;i+)for(j=0;j 2;j+)aij=i+j;for(i=0;i 3;i+)for(j=0;j 2;j+)printf(%4d,aij);printf(n);return 0;,a00 a01 a10 a11 a20 a21,i=0 j=0i=0 j=1i=1 j=0i=1 j=1i=2 j=0i=2 j=1,例7-6 源程序,0 11 22 3,7.2 找出矩阵中最大值所在的位置,例7-5 将1个3*2的矩阵存入1个3*2的二维数组中,找出最大值以及它的行下标和列下标,并输出该矩阵。,#include int main(void)int i,j,col,row;int a32;printf(Enter 6 integers:n);for(i=0;i arowcol)row=i;col=j;printf(max=a%d%d=%dn,row,col,arowcol);return 0;,例7-5 源程序,二维数组的输入,例7-5中,int a32;for(i=0;i 3;i+)for(j=0;j 2;j+)scanf(%d,a00 a01 a10 a11 a20 a21,for(j=0;j 2;j+)for(i=0;i 3;i+)scanf(%d,Enter 6 integers:3 2 10-9 6-1,Enter 6 integers:3 2 10-9 6-13-9 2 610-1max=a20=10,max=a10=10,3 2 10-9 6-1,用二维数组a表示N*N方阵时:int aNN;N是正整数aij:i、j的取值范围0,N-1矩阵元素与二维数组元素的对应关系:,矩阵与二维数组,i=j 上三角,i=j下三角,输入一个正整数n(1n6),根据下式生成1个n*n的方阵,然后将该方阵转置(行列互换)后输出。aij=i*n+j+1(0in-1,0jn-1),例7-7 方阵转置,分析:int a66;n=3时,#include int main(void)int i,j,n,temp;int a66;printf(“Enter n:);scanf(%d,例7-7 源程序,/*行列互换*/for(i=0;i n;i+)for(j=0;j n;j+)if(i=j)temp=aij;aij=aji;aji=temp;,i=01 4 7 2 5 63 8 9,i=11 4 72 5 83 6 9,例7-7 说明,(i j),for(j=i+1;j n;j+),/*行列互换*/for(i=0;i n;i+)for(j=0;j n;j+)temp=aij;aij=aji;aji=temp;,1 2 3 4 5 67 8 9,例7-7 思考,i=01 4 7 2 5 63 8 9,i=11 2 74 5 83 6 9,i=21 2 3 4 5 67 8 9,分析:月 0 1 2 3 11 12非闰年 0 31 28 31 30 31闰年 0 31 29 31 30 31,例7-8 日期计算,int tab213=0,31,28,31,30,31,30,31,31,30,31,30,31 0,31,29,31,30,31,30,31,31,30,31,30,31,自定义1个函数day_of_year(year,month,day),返回year,month和day所对应的是该年的第几天。,day_of_year(2000,3,1)返回61day_of_year(1981,3,1)返回60,例7-8 源程序,int day_of_year(int year,int month,int day)int k,leap;int tab213=0,31,28,31,30,31,30,31,31,30,31,30,31 0,31,29,31,30,31,30,31,31,30,31,30,31;leap=(year%4=0,一维字符数组,输出数组 t 的所有元素for(i=0;i5;i+)putchar(ti);,char t5=H,a,p,p,y;,char t5;,字符串常量:用一对双引号括起来的字符序列一个字符串的结束符:0,字符串(P136),Happy6个字符 H a p p y 0,字符串的有效长度:有效字符的个数,字符0,就是ASCII码值为0的字符,利用一维字符数组存储字符串常量,“Hello world!”,char str80=“Hello world!”;,char str80=H,e,l,l,o,w,o,r,l,d,0;,严格区别字符常量和字符串常量A/*占一个字节 char c=A*/“A”/*占两个字节 char str2=“A”*/,printf(%d,%dn,sizeof(A),sizeof(A);,利用一维字符数组存储字符串常量,char t5=H,a,p,p,y;,char s6=“Happy”;,字符串是一个特殊的一维字符数组,/*“Hello world”*/,产生相同结果的字符串:,char s05=ABCD;char s1=ABCD;char s25=A,B,C,D,0;char s3=A,B,C,D,0;,字符串的存储,auto char s80=Happy;字符串“Happy”由第一个 0 前面的所有字符和 0 一起构成0 之后的其他数组元素与该字符串常量无关,利用一维字符数组对字符串进行操作或运算,例7-9 输入一个以回车结束的字符串(少于10个字符),它由数字字符组成,将该字符串转换成整数后输出。,字符串转化为十进制整数(p134),#include int main(void)int i,n;char s10;printf(“Enter a string:);/*输入字符串*/i=0;while(si=getchar()!=n)i+;si=0;n=0;/*将字符串转换为整数*/for(i=0;si!=0;i+)if(si=0)n=n*10+(si-0);else break;printf(digit=%dn,n);return 0;,字符串转化为整数,=8进制数,if(si=0)n=n*7+(si-0);,123=(1*10+2)*10+3,对字符串的操作,把字符串放入一维字符数组(存储)对字符串的操作=对字符数组的操作普通字符数组:数组元素的个数是确定的,一般用下标控制循环字符串:没有显式地给出有效字符的个数,只规定在字符串结束符 0之前的字符都是字符串的有效字符,一般用结束符 0 来控制循环循环条件:si!=0,

    注意事项

    本文(C语言课件第07章-数组.ppt)为本站会员(小飞机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开