计算机本科C语言第七章讲.ppt

上传人:牧羊曲112 文档编号:6059561 上传时间:2023-09-19 格式:PPT 页数:55 大小:229.13KB
返回 下载 相关 举报
计算机本科C语言第七章讲.ppt_第1页
第1页 / 共55页
计算机本科C语言第七章讲.ppt_第2页
第2页 / 共55页
计算机本科C语言第七章讲.ppt_第3页
第3页 / 共55页
计算机本科C语言第七章讲.ppt_第4页
第4页 / 共55页
计算机本科C语言第七章讲.ppt_第5页
第5页 / 共55页
点击查看更多>>
资源描述

《计算机本科C语言第七章讲.ppt》由会员分享,可在线阅读,更多相关《计算机本科C语言第七章讲.ppt(55页珍藏版)》请在三一办公上搜索。

1、第七章 数组,学习目的:1、理解数组元素与普通变量的区别 2、掌握数组的地址 3、掌握数组的存储 4、掌握数组的初始化,第一节 数组的概念,在处理实际问题时,常要处理同一类型的成批数据(如100个学生的成绩)。可以把这批数据看作一个有机的整体,称为数组,用一个统一的名字代表这批数据,而用序号或下标来区分各个数据。例如:用s代表学生成绩这组数据,s是数组名,用s1、s2、s3分别代表学生1、学生2、学生3的成绩,s右下角的数字1、2、3用来表示该数据在数中的序号,称为下标。数组中的数据称为数据元素。,概括地说:数组是有序数据的集合,要寻找一个数组中的某一个元素必须给出两个要素:数组名和下标。注意

2、:1 数组是有类型属性的 2 同一数组中的每一个元素都必须属于 同一数据类型 3 一个数组中内存中占一片连续的存储单元,int k10;由于在程序中无法用下角表示下标,因此C中用方括号来表示下标。如k0、k1、k2在C中分别用k0、k1、k2来表示。,1000,1002,1004,1006,1008,1010,1012,1014,1016,1018,一、一维数组的定义与引用1 定义一组数组 类型标识符 数组名常量表达式;例如:float s10;它表示数组名为s,此数组为实型,有10个元素。说明:数组名定名规则和变量名相同 用方括号括起来的常量表达式表示下标值 int a10;int s2*8

3、;#define N 20 int arrayN*2;,第二节 一维数组,常量表达式的值表示元素的个数,即数组长度。int a10;表示a有10个元素,这10个元素是:a0、a1、a9。常量表达式中可以包括常量、符号常量,但不能包含 变量。也就是说,C不允许对数组的大小作动态定义,即数组的大小不依赖于程序运行过程中变量的值。int k;scanf(“%d”,注意点:1)在表示数组元素时下标可以是正整数或整 型变量或整型表达式 for(t=0;t=9;t+)st=t;2)数组的第一个元素的地址即为数组的首地 址,而且C规定,用数组名代表数组的首地 址.&data0=data3)数组名是地址常量,

4、不能向数组名赋值,也不能对其进行&运算。,数组元素最小下标由0开始,数组元素最大下标是:数组元素个数1,例子1 若有以下定义:double w10;则w数组元素下标的上限是_,下限是_。,二、一维数组的初始化在定义数组的同时给数组元素赋初值的过程 称为数组的初始化。格式如下:数据类型 数组名数组元素个数=数组初值;1、初始值是用逗号隔开的一组常量。如:int a5=5,4,3,2,1;float j3=3.1416,0.789,5.1 char s5=h,e,l,l,o;,2、数组初始化时,多于数据个数的元素被赋0。如:int a5=1,2,3;3、初始化时,初始值不能多于元素的个数;否则 会

5、出现语法错误。如:int a5=1,2,3,4,5,6;4、初始化时,号中的数字可以省略,由初始化 数据的个数决定数组元素的个数。如:int a=19,12,3,7;,定义一个数组后,如果不给其元素赋值,则各元素的值是不确定的。要想使数组元素以准确的值参加运算,必须设法使数组获得初值,使数组元素获得初值的方法有三种:、使用赋值语句;、利用库函数从键盘或磁盘文件读取 数据;、定义数组时对其进行初始化。,例子 2 main()int a5=1,2,3,4,5;/*在定义时初始化*/int t;for(t=0;t=4;t+)printf(“%d”,at);,例子 3 main()int a5;int

6、 t;for(t=0;t=4;t+)/*利用赋值语句*/at=t*2;for(t=0;t=4;t+)printf(“%d”,at);,例子 4 main()int a5;int t;for(t=0;t=4;t+)/*利用库函数从终端输入*/scanf(“%d”,例子5 下面程序以每行4个数据的形式输出a数组,请填空。#define N 20 main()int aN,I;for(I=0;IN;I+)scanf(“%d”,_);for(I=0;IN;I+)if(_)_;printf(“%3d”,aI);printf(“n”);,main()int I,f10;f0=f1=1;for(I=2;I1

7、0;I+)fI=fI-2+fI-1;for(I=0;I10;I+)if(I%4=0)printf(“n”);printf(“%3d”,fI);,例子6 下面程序的运行结果是?,用起泡法对数据排序(由小到大)思路:将相邻两个数比较,将小的调到前头。,1次,2次,第一趟,1次,第二趟,从例子中可知,n个数用“起泡法”排序,共要比较n-1趟,每一趟要比较n-j次。(n表示数据的个数,j表示第几趟),例子7 用起泡法对10个数进行排序(由小到大)#include main()int a11,n,j,temp;for(n=1;naj+1)temp=aj;aj=aj+1;aj+1=temp;for(n=1

8、;n11;n+)printf(“%3d”,an);,例子8 请根据题意编写源程序 中秋佳节,有贵客来到草原,主人要从羊群中选一只肥羊宴请客人,当然要选最肥的一只,请大家以10只羊为例,从键盘输入10只羊的重量,并求出第几只羊是主人所要的。,第三节 二维数组和多维数组,一、二维数组和多维数组的定义定义二维数组的一般格式:数据类型 数组名行数列数;例:int a23;上面定义了一个a数组,它有行列。每一个数组元素都是整型数据。注意:每一维的下标都从算起。因此,a数组中的元素如下:a00 a01 a02 a10 a11 a12,二维数组在内存中的排列顺序是“按行存放“。即先存第0行的元素,然后再存第

9、1行的元素。如下图:,2001,2003,2005,2007,2009,2011,多维数组的定义格式:int a232;定义了一个三维数组a,其有*12元素,其内存分配情况如右图:,二、二维数组的引用,数组必须“先定义,后引用”。引用二维数组的形式:数组名下标下标 如:c00 c76引用三维数组的形式:数组名下标下标下标 如:c000 b212,三、二维数组的初始化对一个二维数组初始化可以分行以对各元素赋值。例:int a23=1,2,3,4,5,6;或 int a23=1,2,3,4,5,6;也可以对部分元素赋值,例:int a23=1,2,3,4;如果在定义数组时,给出了全部数组元素的初值

10、,则定义数组时第一个下标可以省略。int a23=1,2,3,4,5,6;等价于 int a3=1,2,3,4,5,6;,例子1 include main()int a34,t,k;for(t=0;t=2;t+)for(k=0;k=3;k+)scanf(“%d”,例子2 定义如下变量和数组:int k;int a33=1,2,3,4,5,6,7,8,9;则下面语句的输出结果是_ for(k=0;k3;k+)printf(“%d”,ak2-k);,例子3 有如下程序:main()int a33=1,2,3,4,5,6;int i,j,s=0;for(i=1;i3;i+)for(j=0;j=1;j

11、+)s+=aij;printf(“%dn”,s);该程序的运行结果是_,三维数组的初始化int a234=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24由于第一维的大小为,可以认为a数组由二个二维数组组成。每个二维数组为行列。如下图示:,例子4include main()int a333,t,k,i;for(t=0;t=2;t+)for(k=0;k=2;k+)for(i=0;i=2;i+)scanf(“%d”,例子5 将一个二维数组行和列元素互换,存到另一个二维数组中main()int m,n,a23,b32;for

12、(m=0;m2;m+)for(n=0;n3;n+)scanf(“%d”,例子6 有一个3*4的矩阵,要求编程序求出其中值最大元素的值,以及其所在的行号和列号。,解题思路:采用“打擂台”的算法如果有若干人比武,先有一个站在台上,再上去一人与其手,败者下台,胜者留台上。第3个人再上台与在台上者比,同样是败者下台,胜者留台上,如此比下去,直到所有人都上台比过为止,最后留在台上的就是胜者。程序模拟这个算法:开始时把a00的值赋给变量max,max就是擂主,然后让下一个元素与它比较,将二者中值大者保存在max中,然后再让下一个元素与新的max比,直到最后一个元素比完为止。max最后的值就是数组所有元素中

13、的最大值。,#include main()int row,colum,max,a34,m,n;for(m=0;mmax)max=amn;row=m;colum=n;printf(“max is%4dnrow is%dncolum is%dn”,max,row,colum);,第四节 字符型数组与字符串,用来存放字符数据的数组称为字符数组,字符数组中的一个元素存放一个字符。字符数组具 有数组的共同属性。由于字符应用广泛,C为它提供了许多方便用法和函数,因此专门介绍字符串和字符数组。一、字符型数组的定义与初始化与其它数组是类似的。定义:char a15;char a210;,字符数组初始化的方法c

14、har c=I,a,m,h,a,p,p,y;,在中char型数组的每个元素所对应的存储空间都是一字节,因此字符型数组的每个元素都可以存放一个字符。,语言中有字符串常量,在中对字符串的处理是使用字符数组来进行的。char c=“I am happy”;,字符数组中的每个元素都对应着字符串中的一个字符;此外应注意字符串未尾有一个空操作符。,char a=“I am a student”;或 char a=“I am a student”;在程序的执行部分,不允许把字符串直接赋给 一个字符数组名和该数组中的任何元素,如下 面是错误:char a10;a=“abc”;a8=“abc”;,二、字符的输入

15、,用scanf()函数输入字符或字符串。例:char str9;int k;for(k=0;k=8;k+)scanf(“%c”,/*输入的字符串包括空格和回车*/,三、字符串输出,用printf()函数可以输出数组元素,也可以将 存放在字符数组中的字符串整串输出。例:char str10=“abc”;printf(“%c%sn”,str0,str);注意:输出一个元素时,要指出元素的下标,而 且要用%c格式输出;输出一个字符串时只要写出字符数组名,不 必带下标,但要用%s格式。输出时,不包括0字符。,如果一个数组中有两个0,则输出时遇到 第一个0即认为字符串结束。例12下面程序段的运行结果是_

16、char c5=a,b,0,c,0;printf(“%s”,c);,四 字符串处理函数,1、puts(字符数组)作用:将一个字符串输出到终端static char a5=“name”;puts(a);static char s20=“ChinanBeijing”;puts(s);,2、gets(字符数组)从终端输入一个字符串到字符数组,并且得到一个函数值,该函数值是字符数组的首地址。char str10;gets(str);/*从终端输入“123”*/puts(str);,3、strcat(字符数组1,字符数组2)连接两个字符数组中的字符串,把串2接到串1的后面,结果放在字符数组1中;该函数值

17、是字符数组1的首地址。static char str120=“china”;static char str210=“Beijing”;strcat(str1,str2);printf(“%sn”,str1);,/*printf(“%s”,strcat(str1,str2);*/,说明:1)字符数组1长度必须足够大,以便容纳新的字符串。2)连接前两个字符串的后面都有一个 0,连接时将串1后面的0取消,只在新串最后保留一个0。,4、strcpy(字符数组1,字符串2)作用:将字符串2拷贝到字符数组1中static char str120;static char str210=“Beijing”;s

18、trcpy(str1,str2);strcpy(str1,”china”);说明:1)字符数组1的长度不应小于字符串2的长度 2)字符数组1必须是数组名形式,字符串2可以 是字符数组名,也可以是一个字符串常量。3)拷贝时连同字符串后面的0一起拷贝。,5、strcmp(字符串1,字符串2)格式有:strcmp(str1,str2);strcmp(str1,“Beijing”);strcmp(“China”,“Chine”);结果:相等函数值为0 字符串1大于字符串2函数值为正整数 字符串1小于字符串2函数值为负整数,6、strlen(字符数组)作用:测试字符串长度的函数,函数的值为字符串中有效字

19、符长度,不包含0在内。static char str210=“Beijing”;printf(“%dn”,strlen(str2);,例13 程序的运行结果为?#include#include main()char a7=“abcdef”;char b4=“abc”;strcpy(a,b);printf(“%cn”,a5);printf(“%s”,a);,例14若有以下定义和语句:char s1=12345,s2=1234;printf(%dn,strlen(strcpy(s1,s2);则输出结果是_例15以下程序片段的输出是_。printf(%dn,strlen(ATSn123A);,例子1

20、6以下程序输出的结果是_#include#include main()char w10=“ABCD”,”EFGH”,”IJKL”,”MNOP”;int k;for(k=1;k3;k+)printf(“%sn”,例子17下述程序的运行结果是_#include main()char ch7=“65ab21”;int k,s=0;for(k=0;chk=0,例子18 有3个字符串,要求找出其中最大者。#include#include main()char str320;char string20;int t;for(t=0;t0)strcpy(string,str0);else strcpy(str

21、ing,str1);if(strcmp(str2,string)0)strcpy(string,str2);,例子19 输入3个字符串,要求将字母按由小到大 的顺序输出。#include#include main()char str320;char string20;int t;for(t=0;t0)strcpy(string,str0);strcpy(str0,str1);strcpy(str1,string);,if(strcmp(str0,str2)0)strcpy(string,str0);strcpy(str0,str2);strcpy(str2,string);if(strcmp(

22、str1,str2)0)strcpy(string,str1);strcpy(str1,str2);strcpy(str2,string);for(t=0;t=2;t+)puts(strt);,总结,1 数组是具有相同类型的值的集合,数组名是数组所有元素的代表,可以通过数组名加下标的方式来访问数组的每一个元素,数组的下标从0开始。数组元素在内存占用连续的空间,数组名是这个空间的首地址。多维数组的所有元素在内存也是线性存放。2 数组元素的遍历可以通过for循环进行,多维数组的遍历可以用多重循环进行。3 数组名本身是一个地址常量,不能对数组名直接赋值,如果要复制两个数组,必须一个元素一个元素地赋值。,4 字符串是以空操作符结束的特殊的字符数组,因此使用字符串时,可以利用空操作符来求得字符串的长度。字符串的操作也比较特殊,可以直接从键盘读入一个字符串的值,也可以将一个字符串的值直接送到显示器上,而一般的数组不能这么做。,

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号