【大学课件】组数.ppt

上传人:sccc 文档编号:5659253 上传时间:2023-08-06 格式:PPT 页数:75 大小:3.25MB
返回 下载 相关 举报
【大学课件】组数.ppt_第1页
第1页 / 共75页
【大学课件】组数.ppt_第2页
第2页 / 共75页
【大学课件】组数.ppt_第3页
第3页 / 共75页
【大学课件】组数.ppt_第4页
第4页 / 共75页
【大学课件】组数.ppt_第5页
第5页 / 共75页
点击查看更多>>
资源描述

《【大学课件】组数.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:/,每个字符串常量都分别占用内存中一串连续的存储空间。返回给系统的是字符串

24、所占内存的首地址。,http:/,字符数组与字符串的区别:,字符数组的每个元素可存放一个字符,但并不限定最后一个字符是什么。,在C中,有关字符串的很多操作都与字符串的结束标志有关,因此,在字符数组中的有效字符后加一个0这一特定的情况下,可把这种一维数组称作“字符串”。,可以说,字符串是字符数组的一种具体应用。,例如:char s=A,B,C;,例如:char s=A,B,C,0;都是正确的,1、一般赋值方式:在定义时逐个元素赋值,例如1)char s4=A,B,C,0;,2)char s=A,B,C,0;,3)char s10=A,B,C,0;,?这四种方式有何异同?,4)char s=A,B

25、,C;,http:/,2、直接用字符串常量赋值,例如:char s=“abc”;,也可以省略大括号:char s=“abc”;,最常使用的方式,http:/,四、字符串的输入输出,1、输出:,若有定义:char c=“string”;,1)printf()函数,逐个字符输出:格式符%c,输出整个字符串:格式符%s,i=0;while()printf(“%c”,ci);i+;,格式:printf(格式控制,输出的起始地址),例如1):printf(“%s”,c);,结果为:,string,printf(“%s”,c+2);,结果为:,ring,c,c+2,ci!=0,http:/,例如4):ch

26、ar c1=“boy”,c2=“girl”;,则:printf(“%s”,c1);,printf(“%s”,c2);,输出结果为:,boygirl,则:printf(“%sn”,c1);,boygirl,例如2):printf(“%s”,”china”);,结果为:,china,printf(“%.2s”,”china”);,结果为:,ch,printf(“%.2s”,”china”+2);,结果为:,in,printf(“%s”,”china”+2);,结果为:,ina,例如3):char c=a,b,c;,printf(“%s”,c);,结果为:,不确定,http:/,2)puts()函数

27、,格式:puts(输出的起始地址),若有定义:char c=“string”;,puts(c);,结果为:,string,puts(c+2);,结果为:,ring,例如:char c1=“boy”,c2=“girl”;,puts(c2);,输出结果为:,则:puts(c1);,boygirl,注:puts函数自动将字符串结束标志0转为n输出,即该函数具有自动回车换行的功能。,http:/,1、输入:,若有定义:char c20;,1)scanf()函数,逐个字符输入:格式符%c,接收整个字符串:格式符%s,格式:scanf(格式控制,接收字符的起始地址),i=0;doscanf(“%c”,例如

28、:scanf(“%s”,c);,若在程序运行中输入:china,则从第一个元素开始存放字符。,例如:scanf(“%s”,c+1);,若在程序运行中输入:china,则从第二个元素开始存放字符。,ci!=n,如果数组中存储一个“字符串”,而且当遇回车符结束输入,应怎样表示条件?,i19,&,http:/,若在程序中输入:boy and gilr,然后puts(c);该语句的输出结果为:,boy,注:空格、回车符都作为输入数据的分隔符而不能被读入。,2)gets()函数,格式:gets(接收字符的起始地址),例如:gets(c);,注:输入字符串以回车作为结束。空格、制表符都作为 有效数据接收。

29、,自动将回车转为结束标记0。,注:使用以上函数需要在函数首加头文件:stdio.h,http:/,如有:char s20;gets(s);puts(s);如果在程序执行时输入:boy and girl,则输出结果为:,boy and girl,http:/,课程回顾,1、以下语句把字符串”abcde”赋初值给字符数组,不正确的语句是()A.Char s=“abcde”;B.char s=“abcde”;C.char s=a,b,c,d,e,0;D.char s5=“abcde”;,D,2、以下对C语言字符数组的错误描述是()A.字符数组可以存放字符串B.字符数组中的字符串可以整体输入输出C.可

30、以在赋值语句中通过赋值运算符=对字符数组整体赋值D.字符数组中字符串的结束标志是0.,C,http:/,3、有n各数分别存放在数组a0an-1中。下面程序段的功能是从a数组中查找值为y的元素;若找到,则输出该元素的下标值,找不到则输出-1.其中k为整型变量。k=n-1;while(k=0,4、以下程序段在w数组中插入一元素x,w数组中的已经按由小到大顺序存放,插入前数组中有n个元素。要求插入x后数组中的数句仍然有序(由小到大存放)。int w15=1,2,3,6,9,15,n=6,x=8,i,p=0;while(xwp)p+;/*找出插入位置*/for(i=n;ip;i-)wi=;=x;n+;

31、/*插入后元素个数加1*/,wi-1,wi,ak!=y,http:/,五、字符串处理函数,以下函数均使用头文件“string.h”,1、求字符串长度 strlen(),格式:strlen(str),地址值或者字符串常量,注:1)功能:求从地址str开始到结束标志0之前 的字符的个数。,2)函数的返回值为一整数。,例:1)strlen(“china”)的值为,5,2)strlen(“ATSn0121”)的值为,8,3)strlen(“sn0160end”)的值为,3,4)strlen(“t085xffn”)的值为,2,http:/,5)若有 char s10=“china”;则 strlen(s

32、)的值为,5,http:/,例题:以下程序功能是将s1字符串的内容复制到s2字符串中,请填空(copy.c)#include#include void main()char s1=good luck!,s220;int i;for(i=0;i+)puts(s1);puts(s2);,i=strlen(s1),s2i=s1i;,引申作业:编程完成字符串的链接功能。如char s120=“good”,s2=“luck!”;编程将s2链接到s1后面,使s1内容为“good luck!”,http:/,2、字符串的复制 strcpy(),格式:strcpy(str1,str2),说明:1)功能:将st

33、r2代表的字符串复制到从str1地址开始的 内存单元中。,2)str1有足够的空间,3)strncpy(str1,str2,n)只复制str2中的前n个字符。,例:若有char s120,s2=“china”;,1)strcpy(s1,s2);puts(s1);,输出:china,2)strcpy(s1,s2+2);puts(s1);,输出:ina,3)strncpy(s1,s2,3);puts(s1);,输出:chi,4)strncpy(s1,s2+2,2);s22=0;puts(s1);,输出:in,http:/,5)若有char s120=“abc”,s2=“def”;,strcpy(s

34、1+3,s2);puts(s1);,输出:abcdef,strcpy(s1+strlen(s1),s2);puts(s1);,输出:abcdef,注:字符串的复制不能使用赋值运算符“=”,只能使用复制函数,3、字符串的连接 strcat(),格式:strcat(str1,str2),说明:1)功能:将str2代表的字符串连接到从str1代表的字符 串从0开始的位置后面。,2)str1有足够的空间,以容纳合并后的内容。,例如:若有char s120=“abc”,s2=“def”;,strcat(s1,s2);puts(s1);,输出:abcdef,http:/,4、字符串的比较 strcmp()

35、,格式:strcmp(str1,str2),说明:1)功能:将str1、str2代表的两个字符串从指定位置开 始逐个字符相比较(按ASCII码值),直到出现不同的 字符或遇到0为止。,例如:,2)函数的返回值:,s1:,s2:,str1 大于str2 返回值:正数,str1 小于str2 返回值:负数,str1 等于str2 返回值:0,3)字符串的比较不能使用关系运算符,只能使用比较函数。,http:/,strcmp(s1,s2);,例题:输入两个字符串,输出相应的大小信息。,main()char s120,s220;int n;,/输入字符串给s1,gets(s1);,/输入字符串给s2,

36、gets(s2);,/比较str1和str2,n=,if(n0)printf(“s1 is bigger than s2!n”);,else if(n0)printf(“s1 is smaller than s2!n”);,else printf(“s1 is equal to s2!n”);,#include“stdio.h”,#include“string.h”,http:/,作业1:输入若干字符串,直到输入空串为止,从中选出最大的字符串输出。(lt3.c),5、大小写字母转换函数,将字符串中的大写字母转换成对应的小写字母:strlwr(str),将字符串中的小写字母转换成对应的大写字母:

37、strupr(str),例如:若有 char c=“China”则,strlwr(c)结果为:,china,strupr(c)结果为:,CHINA,作业2:编写程序完成十六进制数到十进制数的转化。,例如:输入1a2 则输出十进制数:418,分析:因为十六进制数包含0-9的数字,还包含a-f或者A-F的字母,所以可以把输入的十六进制数作为一个字符串来接收,将其保存到一个字符数组中。(lt4.c),http:/,6.3二维数组的定义和引用,二维数组:每个元素带有两个下标,在逻辑上可以把二维数组看成是一个具有若干行和列的表格或者矩阵。,一、定义:,类型名称,数组名称,常量表达式1,常量表达式2,二维

38、数组的行数。,二维数组的列数。,例如:定义一个具有2行3列的整型数组a,int a23;,分析:1)数组名称:a,2)共有2 x 3=6个元素,3)逻辑结构如下:,http:/,第1行,第2行,第1列,第2列,第3列,a00,a01,a02,a10,a11,a12,int a23;,注:每个元素有两个下标:第1个方括号中的下标代表行号,称为行下标 第2个方括号中的下标代表列号,称为列下标,http:/,二、存储方式:,按行存放,即在内存中先存放第1行的元素,再存放第二行的元素。,在c语言中,可以把一个二维数组先看成一个一维数组,数组中每个元素又是包含若个元素的一维数组。,例如:int a23;

39、,a,a0,a1,3,a00,a01,a02,3,a10,a11,a02,所以,二维数组名称和第一维的下标代表一个不可变的地址常量,其值分别为每行的第一个元素的地址。,二维数组名称也是一个地址常量,代表整个数组的首地址。,http:/,所以,若有 int a23;则数组中6个元素的存储方式为:,a00,a01,a02,a10,a11,a12,3000H,3004H,3008H,300cH,3010H,3014H,a的值,a0的值,a1的值,?思考:a0+1的值?,?思考:元素a12的地址怎么表示?,思考:a+1的值为多少?,!元素a01的地址,!a1+2,?*(a+1)+1的值?,?如果表示任

40、意元素的地址?,!ai+j,或者*(a+i)+j,http:/,由以上分析可以得出:,ai:表示第i行的首地址,每加1相当于加1列,也称为列地址。,a:表示整个数组的首地址,每加1相当于加1行,也称为行地址。,将行地址前加引用运算符即可将行地址转化为列地址。*(行地址)列地址,http:/,三、引用,1、直接引用:,数组名称行下标列下标,例如前例中的a11等,注:1)下标为整型表达式,而且不能越界。,2)两个下标分别放在方括号中。,例如:a1,2 是错误的,2、间接引用:,*(数组元素的地址),例如若有int s34;,则引用第2行第3列的元素方法为:,直接引用:,a12,间接引用:,*(a1

41、+2)或者,*(+2),*(a+1),http:/,a00,&a00,例题:程序运行时给数组元素赋值,并输出各数组元素。(lt5.c),main()int a23,i,j;,/给各个元素赋值,scanf(“%d”,);,只给a00元素赋值:,只给第1行元素赋值:,for(j=0;j3;j+),j,for(j=0;j3;j+)scanf(“%d”,或者ai+j 或者*(a+i)+j,/按行输出各个元素赋值,只输出a00元素:,printf(“%d“,);,只输出第0行元素:,for(j=0;j3;j+),j,for(i=0;i2;i+)for(j=0;j3;j+)printf(“%d”,aij)

42、;,或者*(ai+j)或者*(*(a+i)+j),printf(“n”);,i,for(i=0;i2;i+),http:/,四、初始化:可以在定义的同时给数组元素赋值,1、分行赋值,每行放在一个花括号中。也可省略行数,列数 不可省,例如:1)int a23=1,2,3,4,5,6,结果:,a=,2 34 5 6,2)int a23=1,2,4,5,结果:,a=,2 04 5 0,注:没有被赋值的元素自动取值为0,3)int a3=1,2,4,5,结果:,a=,2 04 5 0,注:行数自动计算为2,http:/,2、将所有初值放在一个花括号中,按次序依次赋值给数组元素。行数可以省略,但列数不能

43、省。,例如:1)int a23=1,2,3,4,5,6,结果:,a=,2 34 5 6,2)int a23=1,2,4,5,结果:,a=,2 45 0 0,3)int a3=1,2,3,4,5,6,结果:,a=,2 34 5 6,4)int a3=1,2,4,5,结果:,a=,2 45 0 0,http:/,i,j,aij,=,bji,j,i,例题:将一个二维数组行和列的元素互换,存到另一个二维数组中。例如(lt6.c),b00=a00,b10=a01,b20=a02,b01=a10,b11=a11,b21=a12,main()int a23=1,2,3,4,5,6,b32,i,j;,for(

44、i=0;i2;i+)for(j=0;j3;j+)bji=aij;,/给b数组赋值,/输出数组a,/输出数组b,printf(the array a is:n);,for(i=0;i2;i+)for(j=0;j3;j+)printf(%d,aij);printf(n);,printf(the array b is:n);,for(i=0;i3;i+)for(j=0;j2;j+)printf(%d,bij);printf(n);,http:/,例题:输出52张扑克牌,每行一种花色。每种花色按由小到大顺序输出。,引申练习:随机输出52张扑克牌。,http:/,例:若有定义 char c25=c,h,

45、i,n,a,j,i,n,a,n,c0,c1,若将上例中的定义改为:,char c26=c,h,i,n,a,j,i,n,a,n;则,c0,c1,注:每一行不可以作为一个字符串,注:每一行可以作为一个字符串,http:/,6.4 字符串数组,字符串数组:数组中的每个元素又都是一个字符串。,由前面的关于二维数组的分析得到:一个二维数组可以先看作一个一维数组,数组中的每个元素又是一个一维数组。从这一概念出发,若一个二维数组中的每一行都是一个字符串,则可以把这个二维字符数组称作为字符串数组。,若有定义:char s1080,数组s中共有10行,若每一行都用来存放一个字符串,则可以存放10个字符串。而每个

46、字符串中的有效字符个数最多为79个。,因此,可以认为:二维字符数组中若每行都存放字符串,则二维数组的第1维的下标(行数)决定了字符串的个数,而第2维的下标(列数)则决定了字符串的最大长度。,http:/,例如:char c26=c,h,i,n,a,j,i,n,a,n;,字符串数组的初始化:可以在定义的同时赋初值,或者 char c26=“china”,”jinan”;,或者 char c26=“china”,”jinan”;,最常采用方式,输出上述字符串数组中的每个字符串:,只输出第1个字符串:,puts();,C0,puts(ci);,for(i=0;i2;i+),例题:以下程序的输出结果为

47、(lt7.c),main()char p10=book,opk,h,sp;int i;for(i=3;i=0;i-,i-)printf(%s,pi);,结果为:spopk,printf(%c,*pi);,结果为:so,http:/,作业3:输入不多于10个的字符串,将其按照字符串的长短由短到长排列并输出。(lx16.c),例如:程序运行时输入:,则输出:,或者按照字符串的大小有小到大,例如:程序运行时输入:,则输出:,http:/,作业3:输入不多于10个的字符串,将其按照字符串的长短由短到长排列并输出。(lx16.c),作业1:输入若干字符串,直到输入空串为止,从中选出最大的字符串输出。(lt3.c),作业2:编写程序完成十六进制数到十进制数的转化。,例如:输入1a2 则输出十进制数:418,作业,http:/,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号