【大学课件】组数.ppt
《【大学课件】组数.ppt》由会员分享,可在线阅读,更多相关《【大学课件】组数.ppt(75页珍藏版)》请在三一办公上搜索。
1、例题:输入一个任意位数整数,求出每位上的数字,从高位向低位输出。,/*若由低位向高位输出:*/#include stdio.h#include conio.hvoid main()long x;textmode(C40);clrscr();printf(input an interger:);scanf(%ld,将求出的每一位数字输出,变量?,多个,数组,保存?,http:/,第六章 数组,本章重点:,1、一维数组、二维数组的定义、初始化以及数组元素的引用。,2、字符串以及字符串数组,3、字符串处理函数,本章难点:,1、数组名是整个数组的首地址。,2、直接引用和间接引用,http:/,主要内容
2、,第一节 一维数组的定义和引用,第二节 字符数组,第三节 二维数组的定义和引用,http:/,引言,构造类型:由基本类型的数据按照一定的规则组合而成。,C语言中的构造类型,数组,结构体,共用体,(本章内容),(第十章内容),数组:,一组变量。,具有相同的数据类型,在内存中占有连续的内存单元,具有相同的名称(数组名),但有不同的下标,每一个称为一个数组元素。,用统一的数组名称和不同的下标来唯一的标识数组中的每一个元素。,唯一确定数组元素在数组中的顺序的整数值,http:/,6.1 一维数组的定义和引用,一维数组:数组中的每个元素只带有一个下标,即仅 由一个下标值就能确定数组元素位置和顺 序的数组
3、。,因此,在逻辑上,可以把一维数组中的所有元素看作是排成一行的,所以也把一维数组称为“行数组”。,http:/,一、定义:,形式:,类型名,数组名,常量表达式,注:1)类型名:数组中的元素的类型(如 int char 等),2)数组名的命名规则同前面的变量的命名规则。,3)常量表达式:表示数组中数组元素的个数,即数组的 长度。,不允许为变量,既不允许对数组做动态定义。数组的大小一旦定义即已固定。,例如:定义一个包含3个元素的整型数组a:,int,例如:定义一个包含20个元素的字符型数组c:,char c20;,3;,a,例:int a3,b5,c10;,一个定义中,可以同时说明多个相同类型的数
4、组。,例:char c,s30;,普通变量和数组可以出现在同一个定义中。,http:/,注:4)数组名:是一个地址常量,代表整个数组的首地址。,变量的地址:一个变量所占内存中第一个字节的地址。,2000H,2001H,2002H,2003H,2004H,int x;,x,printf(“%x”,输出结果为:2000,一个变量名与一个地址值所标明的存储区域相对应。,http:/,注:4)数组名:是一个地址常量,代表整个数组的首地址。,例如:int a3;,3000H,3001H,3002H,3003H,3004H,3005H,3006H,数组a所占的内存,printf(“%x”,a);,输出结果
5、为:3000,a的值,a+1的值是多少?,3002,注:对地址进行增减运算,移动的最小单位是一个存储单元而不一定是一个字节,具体由数组元素的类型决定。,?,http:/,例如:,main()int a10;printf(“%x”,a);printf(“%x”,a+9);,如果第一个输出语句的结果为194,则第二个输出语句的结果为(),1 9 4,+,1 8,2 1 2,(十六进制),(十进制),X,X,1 9 4,+,1 2,2 0 6,X,1 a 6,1 a 6,http:/,二、引用,补充内容:直接引用和间接引用,直接引用:通过变量名来对内存单元进行存取操作的。,此前我们对变量的操作都是直
6、接引用。,int x;,x,x=3;,3,printf(“%d”,x);,输出3,http:/,间接引用:,将变量(假设为i)的地址存放在另一个变量(假设为p)中,要存取变量i的值,可以先找到存放i地址的变量p,从p中取出i的地址,然后根据这个地址进行存放。这种由一个变量得到另一个变量的地址,再通过得到的这个地址完成对存储单元访问的方法,成为对内存的“间接访问”,或者“间接引用”。,int i=3;,3,变量p的空间,2000H,http:/,与间接引用相关的运算符:,&:取某个变量的地址。,例如取变量x的地址:,&x,*:间接引用运算符。,单目运算符。出现在运算对象的左边,其运算对象是地址或
7、者存放地址的指针变量。,功能:引用相应的存储单元。,对变量x的引用:,直接引用:,x,间接引用:,*p,*(&x),第九章内容,http:/,下标的范围:下标,数组元素的引用:把数组中的每个元素当成普通的变量来使用,就是所谓的“数组元素的引用”。,两种方法:,1、直接引用:,形式:数组名称下标表达式,表达式的值必须为整数,例如:int a3;,该数组中包含3个元素,分别为:,2)数组元素默认的下标值从0开始。,a0、a1、a2,注:1)下标表达式必须为整型常量或者整型的表达式。,0,长度-1,3)数组不能整体引用。如 不能用a表示a0到a23个元素。,http:/,(+0),2、间接引用:,形
8、式:*数组元素的地址,例如:int a3;,表示数组中的第一个元素:,直接引用:,a0,间接引用:,*a,表示数组中的第二个元素:,直接引用:,a1,间接引用:,*(a+1),表示数组中的第三个元素:,直接引用:,a2,间接引用:,*(a+2),http:/,课程回顾,1、定义一个具有10个元素的浮点型的数组f,应使用的语句为:。,float f10;,2、若已有定义int a10;则该数组中 首元素表示为:。未元素表示为:。,a0,a9,3、若有一个数组a,则对其下标为i的元素,地址表示为:或.,数组元素的引用表示为:或.,&ai,a+i,ai,*(a+i),http:/,main()int
9、 a10;,例题:,/给10个元素分别赋值为0 1 2 3 49,a0=0;,a1=1;,a2=2;,a9=9;,i,i,ai=i;,for(i=0;i10;i+),ai=i;,/输出数组的10个元素,printf(“%3d”,a0);,1,2,9,i,for(i=0;i10;i+),printf(“%3d”,ai);,/倒序输出数组的10个元素,for(i=9;i=0;i-),printf(“%3d”,ai);,http:/,三、一维数组的初始化,1、定义时赋初值,)例:int a3=1,2,3;,注:初值列表用大括号括起来,各数值间用逗号隔开。从第一个元素开始依次赋值。,)例:int a=
10、1,2,3;,注:只给部分元素赋值,且为从第个元素开始的连续的数组元素,没有赋值的元素自动取值为。,上例中,赋值后元素a0、a1、a2的值分别为、;a3、a4的值均为0。,3)例:int a=1,2,3;,注:对全部数组元素赋初值时,长度可以省略。系统根据初值的个数自动决定数组的长度。,http:/,4)初值的个数与数组的长度不同时,长度不可以省略,初值个数(n)长度(L):没赋值的元素自动取值为0,初值个数(n)=长度(L):长度可以省略,初值个数(n)长度(L):编译时出错,int a3=1,2,3,4,X,http:/,2、运行时赋值(一般使用循环结构),1)用赋值符号=,例如:int
11、a10;,例如:int a10;,/给10个元素赋值0到100之间的随机数,for(i=0;i10;i+),ai=,random(101);,2)用输入函数,/输入10个数分别给10个元素赋值,for(i=0;i10;i+),scanf(“%d”,);,&ai,或者:a+i,http:/,例题:输入一个任意位数整数,求出每位上的数字,从高位向低位输出。,/*若由高位向底位输出:*/#include stdio.hvoid main()long x;clrscr();printf(input an interger:);scanf(%ld,/*用一个数组来保存每一位上的数字*/,int a20;
12、,n,x%10;,=,an,n=0;,n+;,/*输出a数组中的数据*/,printf(“%d,”,ai);,for(),i=n-1;,i=0;,i-,chp6interger.c,http:/,如果分别用max,min,aver表示3个成绩,则该如果定义?,答:普通变量,例题1:输入10名同学的成绩,统计其中的最高分、最低分和平均分。,#include void main(),如何存储?,答:数组,如果成绩为浮点型数据,该数组如果定义?,float score10;,float max,min,aver;,http:/,max=score0;for(i=1;imax)max=scorei;,
13、void main()float score10;float max,min,aver;,如何输入10个成绩?,for(i=0;i10;i+),scanf(“%f”,);,&scorei,int i;,如何求最高分,将其保存在max中?,如何求最高分,将其保存在min中?,min=score0;for(i=1;i10;i+)if(scoreimin)min=scorei;,如何求平均分,并保存在aver中?,sum;,sum=score0;for(i=1;i10;i+)sum=sum+scorei;,aver=sum/10;,printf(最高分:%.1f,最低分:%.1f,平均分:%.1fn
14、”,max,min,aver);,如何将结果输出?,http:/,如何求最高分,将其保存在max中?,max=score0;,if(score1max),max=score1;,if(score2max),max=score2;,if(score3max),max=score3;,if(score9max),max=score9;,if(scorei max),max=scorei;,for(i=1;i10;i+),min,min,min,min,低,http:/,如何求总分,将其保存在sum中?,sum=score0;,sum=sum+score1;,sum=sum+score2;,sum=
15、sum+score3;,sum=sum+score9;,for(i=1;i10;i+),sum=sum+scorei;,http:/,练习:找出数组a5中的最大值并输出。,#include“stdio.h”void main(),定义一个具有5个元素的整型数组a?,int a5;,max,i,输入5个整数分别给数组的5个元素赋值?,for(i=0;i5;i+)scanf(“%d”,求5个元素中的最大值?,max=a0;,if(maxa i),max=ai;,for(i=1;i5;i+),输出最大元素的值?,printf(“max is%dn”,max);,求5个元素中的最大值?,http:/,
16、#include“stdio.h”void main()int a5,i,max;for(i=0;i5;i+)scanf(“%d”,练习:找出数组a5中的最大元素的下标并输出。,0,amax,i,如何将最大的元素放在最后位置?,将下标为max的元素和最后元素交换!,t;,t=amax;,amax=a4;,a4=t;,引申作业:用选择法对10个整数进行升序排序。,http:/,/*max1.c*/#include stdio.hvoid main()int a5,max,i;for(i=0;i5;i+)scanf(%d,输出最大元素的值!,将最大的元素放在数组的最后?,a4,将数组中的元素按由小
17、到大排序?,下一页,http:/,/*max1.c*/#include stdio.hvoid main()int a5,max,i;for(i=0;i5;i+)scanf(%d,输出最大元素的值!,将最大的元素放在数组的最后?,for(i=0;iai+1)t=ai;ai=ai+1;ai+1=t;,a4,将数组中的元素按由小到大排序?,下一页,http:/,84950,假设数组元素的值分别赋值为:a5=9,8,4,5,0,2;,98450,第一次,89450,第二次,第三次,84590,第四次,84509,结果:把最大的数放到最后一个元素。,if(),ai,ai+1,t=ai;,ai=ai+1
18、;,ai+1=ai;,/*交换ai和ai+1的值*/,for(i=0;i4;i+),上一页,http:/,/*将5个元素中的最大值放在最后*/for(i=0;iai+1)t=ai;ai=ai+1;ai+1=t;,/*将4个元素中的最大值放在最后*/for(i=0;iai+1)t=ai;ai=ai+1;ai+1=t;,3,/*将3个元素中的最大值放在最后*/for(i=0;iai+1)t=ai;ai=ai+1;ai+1=t;,/*将2个元素中的最大值放在最后*/for(i=0;iai+1)t=ai;ai=ai+1;ai+1=t;,/*将5个元素按降序排序*/,for(),j=1;,j5;,j+,
19、?,5-j,起泡法排序,http:/,起泡法排序:与起泡从水中往上冒的情况有些类似。,具体做法:先将第一个数a0与第2个数a1进行比较,如果a0a1,则将两个数进行交换,否则保持原顺序不变。然后比较a1和a2,依此类推,直到第n-1个元素与第n个元素比较,这称为一趟起泡。这一趟最明显的效果是将最大的数据排到了最后。然后对前n-1个数据进行同样的操作,则具有次大值的数被排在第n-1的位置上,重复以上操作直到所有元素按顺序排列。,http:/,/*起泡法排序 chp6sort.c*/main()int i,j,a5=9,8,4,5,0,2,t;clrscr();for(i=0;iaj+1)t=aj
20、;aj=aj+1;aj+1=t;for(i=0;i5;i+)printf(%d,ai);,http:/,练习:编程模拟23选5的抽奖系统。(select.c),http:/,849502,假设已有定义:a6=9,8,4,5,0,2;,第一趟:,984502,第一次,894502,第二次,第三次,845902,第四次,845092,第五次,845029,for(j=0;jaj+1)t=aj;aj=aj+1;aj+1=aj;,结果:把最大的数放到最后一个元素。,http:/,第二趟:,84502,第一次,48502,第二次,45802,第三次,45082,第四次,45028,结果:把次大的数放到倒
21、数第二个元素。,for(j=0;jaj+1)t=aj;aj=aj+1;aj+1=aj;,http:/,第三趟:,4502,第一次,4502,第二次,4052,第三次,4025,for(j=0;jaj+1)t=aj;aj=aj+1;aj+1=aj;,第四趟:,402,第一次,042,第二次,024,for(j=0;jaj+1)t=aj;aj=aj+1;aj+1=aj;,第五趟:,02,第一次,02,for(j=0;jaj+1)t=aj;aj=aj+1;aj+1=aj;,http:/,main()int i,j,a6=9,8,4,5,0,2;,for(j=0;jaj+1)t=aj;aj=aj+1;
22、aj+1=aj;,for(i=1;i6;i+),6-i,for(i=0;i6;i+)printf(“%d“,ai);,/*外层循环控制趟数*/,/*内层循环控制每趟的比较*/,练习:编程模拟23选5的抽奖系统。(lx1.c),http:/,课程回顾,1、一维数组的初始化,2、一维数组中元素的引用方式和地址表示,3、两种排序方法:冒泡法和选择法,http:/,6.2字符数组,C本身没有字符串变量,字符串的存储完全依赖于字符数组,但字符数组并不完全等价于字符串。,字符数组:用来存放字符数据的数组。字符数组中的 一个元素存放一个字符。,一、定义:,char 数组名长度,例如:char c5=c,h,
23、i,n,a;,在内存中占5个字节,a0,a1,a2,a3,a4,c,h,i,n,a,?这种定义方式正误?,int c5=c,h,i,n,a;,http:/,二、初始化和引用,方法同前面所讲的一维数组,三、字符串和字符串结束标志,字符串借助于字符型的一维数组来存放,并规定以0作为结束标志。,0:转义字符,称为“空值”。其ASCII码值为0.占内存空间,但不计入字符串的长度。,字符串长度:字符串结束标志之前的有效字符的个数。,字符串常量:系统在末尾自动加0.,例如:“ABC”的长度为3,在内存中占4个字节的空间。,http:/,每个字符串常量都分别占用内存中一串连续的存储空间。返回给系统的是字符串
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 大学课件 大学 课件
链接地址:https://www.31ppt.com/p-5659253.html