第七章 数组.ppt

上传人:本田雅阁 文档编号:3026294 上传时间:2019-06-27 格式:PPT 页数:41 大小:1.04MB
返回 下载 相关 举报
第七章 数组.ppt_第1页
第1页 / 共41页
第七章 数组.ppt_第2页
第2页 / 共41页
第七章 数组.ppt_第3页
第3页 / 共41页
第七章 数组.ppt_第4页
第4页 / 共41页
第七章 数组.ppt_第5页
第5页 / 共41页
点击查看更多>>
资源描述

《第七章 数组.ppt》由会员分享,可在线阅读,更多相关《第七章 数组.ppt(41页珍藏版)》请在三一文库上搜索。

1、第七章 数组,一维数组的定义及引用 二维数组的定义及引用 字符数组,构造数据类型之一 数组:有序数据的集合,用数组名标识 元素:属同一数据类型,用数组名和下标确定 一维数组的定义 定义方式: 数据类型 数组名常量表达式;,合法标识符,表示元素个数 下标从0开始, :数组运算符 单目运算符 优先级(1) 左结合 不能用( ),7.1 一维数组,数组名表示内存首地址, 是地址常量,编译时分配连续内存 内存字节数=数组维数* sizeof(元素数据类型) 下标一定从0开始,例 int a6 内存表示如下:,例 int a10; printf(“%d”,a); () 必须 for(j=0;j10;j+

2、) printf(“%dt”,aj); (),一维数组的引用 数组元素表示形式: 数组名下标 其中:下标可以是常量或整型表达式 数组必须先定义,后使用 只能逐个引用数组元素,不能一次引用整个数组,例 int i=15; int datai; (),:1.在运行C语言程序过程中,系统并不 自动检验数组元素的下标是否越界。因此在编写程序时,保证数组下标不越界是十分重要的,下标取值范围是0(元素个数-1)。 21个数组元素,实质上就是1个变量,它具有和相同类型单个变量一样的属性,可以对它进行赋值和参与各种运算。,一维数组的初始化,初始化方式:,int a5=1,2,3,4,5; 等价于:a0=1;

3、a1=2; a2=3; a3=4; a4=5;,:数组不初始化,其元素值为随机数 对static数组元素不赋初值,系统会自动赋以0值 只给部分数组元素赋初值 当全部数组元素赋初值时,可不指定数组长度,如 int a5=6,2,3; 等价于: a0=6; a1=2;a2=3; a3=0; a4=0; 如 int a3=6,2,3,5,1; (),static int a5; 等价于:a0=0; a1=0; a2=0; a3=0; a4=0;,int a=1,2,3,4,5,6; 编译系统根据初值个数确定数组维数,程序举例,例7.1 读10个整数存入数组,找出其中最大值和最小值,算法: 1. 输入

4、:for循环输入10个整数 2. 处理: (a) 先令max=min=x0 (b) 依次用xi和max,min比较(循环) 若maxxi,令min=xi 3. 输出:max和min,#include #define N 10 main() int xN,i,max,min; printf(“Enter 10 integers:n“); for(i=0;ixi) min=xi; printf(“Maximum value is %dn“,max); printf(“Minimum value is %dn“,min); ,输入部分,处理部分,输出部分,例7.2用数组求Fibonacci数列前20

5、个数,#include main() int i; int f20=1,1; for(i=2;i20;i+) fi=fi-2+fi-1; for(i=0;i20;i+) if(i%5=0) printf(“n“); printf(“%12d“,fi); ,例7.3 用冒泡法对10个数排序,排序过程: (1)比较第一个数与第二个数,若为逆序a0a1,则交换;然后比较第二个数与第三个数;依次类推,直至第n-1个数和第n个数比较为止第一趟冒泡排序,结果最大的数被安置在最后一个元素位置上 (2)对前n-1个数进行第二趟冒泡排序,结果使次大的数被安置在第n-1个元素位置 (3)重复上述过程,共经过n-1

6、趟冒泡排序后,排序结束,#include main() int a11,i,j,t; printf(“Input 10 numbers:n“); for(i=1;iai+1) t=ai; ai=ai+1; ai+1=t; printf(“The sorted numbers:n“); for(i=1;i11;i+) printf(“%d “,ai); ,例7.4 用简单选择法对10个数排序,排序过程: (1)首先通过n-1次比较,从n个数中找出最小的, 将它与第一个数交换第一趟选择排序,结果最小的数被安置在第一个元素位置上 (2)再通过n-2次比较,从剩余的n-1个数中找出关键字次小的记录,将

7、它与第二个数交换第二趟选择排序 (3)重复上述过程,共经过n-1趟排序后,排序结束,#include main() int a11,i,j,k,x; printf(“Input 10 numbers:n“); for(i=1;i11;i+) scanf(“%d“, ,7.2 二维数组,定义方式: 数据类型 数组名常量表达式1常量表达式2; 例 int a34; float b25; int a3,4; () 1数组元素在内存中的排列顺序为“按行存放”,即先顺序存放第一行的元素,再存放第二 行,以此类推。 2. 设有一个m*n的数组x,则第i行第j列的元素xij在数组中的位置为:i*n+j(注意

8、:行号、列号均从0开始计数,行下标,列下标,3可以把2维数组看作是一种特殊的1维数组:它的元素又是一个1维数组。 例如,对a32,可以把a看作是一个1维数组,它有3个元素:a0、a1、a2,每个元素又是一个包含2个元素的1维数组,如图6-4所示。即把a0、a1、a2看作是3个1维数组的名字,a0,a1,a2,引用二维数组元素: 数组名行下标表达式列下标表达式,1.“行下标表达式”和“列下标表达式”,都应是整型表达式或符号常量。 2“行下标表达式”和“列下标表达式”的值,都应在已定义数组大小的范围内。假设有数组x34,则可用的行下标范围为02,列下标范围为03。 3对基本数据类型的变量所能进行的

9、操作,也都适合于相同数据类型的二维数组元素。,二维数组元素的初始化 分行初始化: 例 int a23=1,2,3,4,5,6; 按元素排列顺序初始化例 int a23=1,2,3,4,5,6; 如果对全部元素都赋初值,则“行数”可以省略。注意:只能省略“行数”。 int a3=1,2,3,4,5,6;,二维数组应用举例,二维数组应用举例,例7.5 有M个学生,学习N门课程,已知所有学生的各科成绩, 编程:分别求每个学生的平均成绩和每门课程的平均成绩,#define M 5 #define N 4 #include “stdio.h“ main() int i,j; static float s

10、coreM+1N+1=78,85,83,65, 88,91,89,93, 72,65,54,75,86,88,75,60, 69,60,50,72;,for(i=0;iM;i+) for(j=0;jN;j+) scoreiN += scoreij; scoreMj += scoreij; scoreiN /= N; for(j=0;jN;j+) scoreMj /= M; clrscr(); printf(“学生编号 课程1 课程2 课程3 课程4 个人平均n“);,for(i=0;iM;i+) printf(“学生%dt“,i+1); for(j=0;jN+1;j+) printf(“%6.

11、1ft“,scoreij); printf(“n“); for(j=0;j8*(N+2);j+) printf(“-“); printf(“n课程平均“); for(j=0;jN;j+) printf(“%6.1ft“,scoreMj); printf(“n“); getch(); ,例7.6求二维数组中最大元素值及其行列号,#include main() int a34=1,2,3,4, 9,8,7,6,-10,10,-5,2; int i,j,row=0,colum=0,max; max=a00; for(i=0;imax) max=aij; row=i; colum=j; printf(

12、“max=%d,row=%d, colum=%dn“,max,row,colum); ,7.3 字符数组与字符串,字符数组的定义 例 char c10, ch34; 字符数组的初始化 逐个字符赋值 例 char ch5=H,e,l,l,o; 用字符串常量 例 char ch6=“Hello”; char ch6=“Hello”; char ch=“Hello”; 字符数组的引用 字符数组的逐个字符引用,与引用数值数组 元素类似。,(1)字符数组的输入 使用getchar()或scanf()函数输入字符。 例如: char str10; for(i=0; i10; i+) scanf(“%c“,

13、 &stri); ,(2)字符数组的输出 字符数组的输出,可以用putchar()或 printf()函数。 例如: char str10=“c language“; for(i=0; i10; i+) printf(“%c“, stri); printf(“n“); ,逐个字符输入、输出时,要指出元素的下标,而且使用“%c”格式符。另外,从键盘上输入字符时,无需输入字符的定界符单引号;输出时,系统也不输出字符的定界符。,字符串 字符串及其结束标志 无字符串变量,用字符数组处理字符串 字符串结束标志0 :0,字符串的输入输出 逐个字符I/O: %c 整个字符串I/O: %s 例 用%c mai

14、n() char str5; int i; for(i=0;i5;i+) scanf(“%c”, ,例 用%s main() char str5; scanf(“%s”, str); printf(“%s”, str); ,用字符数组名, 遇0结束,比较以下两段程序的区别 例 main( ) char a5=H,e,l,l,o; printf(“%s”,a); 结果:Hello#-=* 例 main( ) char a =“Hello”; printf(“%s”,a); 结果:Hello,用“%s”输出时, 遇0结束,main() char a=h,e,l,0,l,o,0; printf(“%

15、s“,a); 结果:hel 数组中有多个0时, 遇第一个结束,main() int i; char a5; scanf(“%s“,a); for(i=0;i5;i+) printf(“%d,“,ai); 运行情况: (1)若输入 hel , 正常 (2)若输入 hell , 正常 (3)若输入 hello , 用%s 输出时,会出现问题,常用的字符串处理函数,常用的字符串处理函数 包含在头文件 string.h 字符串输出函数puts 格式:puts(字符数组) 功能:向显示器输出字符串(输出完,换行) 说明:字符数组必须以0结束 字符串输入函数gets 格式:gets(字符数组) 功能:从键

16、盘输入一以回车结束的字符串放入字符数组中, 并自动加0 说明:输入串长度应小于字符数组维数,例 #include main( ) char string80; printf(“Input a string:”); gets(string); puts(string); 输入: How are you? 输出: How are you ? 注意:scanf以空格结束,gets以回车结束 上例若用scanf读入结果是什么?,字符串连接函数strcat 格式:strcat(字符数组1,字符数组2) 功能:把字符数组2连到字符数组1后面 返值:返回字符数组1的首地址 说明:字符数组1必须足够大 连接前

17、,两串均以0结束;连接后,串1的0取消, 新串最后加0 字符串拷贝函数strcpy 格式:strcpy(字符数组1,字符串2) 功能:将字符串2,拷贝到字符数组1中去 返值:返回字符数组1的首地址 说明:字符数组1必须足够大 拷贝时0一同拷贝 不能使用赋值语句为一个字符数组赋值,例 char str120,str220; str1=“Hello!”; () str2=str1; () 例 strcpy与strcat举例 #include #include void main() char str125; char blank = “ “, c= “C+“, turbo = “Turbo“; s

18、trcpy(str1, turbo); strcat(str1, blank); strcat(str1, c); printf(“%sn“, str1); ,字符串比较函数strcmp 格式:strcmp(字符串1,字符串2) 功能:比较两个字符串 比较规则:对两串从左向右逐个字符比较(ASCII码), 直到遇到不同字符或0为止 返值:返回int型整数, a. 若字符串1 字符串2,返回正整数 c. 若字符串1= 字符串2, 返回零 说明:字符串比较不能用“=”,必须用strcmp,字符串长度函数strlen 格式:strlen(字符数组) 功能:计算字符串长度 返值:返回字符串实际长度,不

19、包括0在内 例 对于以下字符串,strlen(s)的值为: (1)char s10=A,0,B,C,0,D; (2)char s =“tv0willn”; (3)char s =“x69082n”; 答案:1 3 1,例 strcmp与strlen举例,#include #include main() char str1 = “ Hello!“, str2 = “ How are you? “,str20; int len1,len2,len3; len1=strlen(str1); len2=strlen(str2); if(strcmp(str1, str2)0) strcpy(str,s

20、tr1); strcat(str,str2); else if (strcmp(str1, str2)0) strcpy(str,str2); strcat(str,str1); else strcpy(str,str1); len3=strlen(str); puts(str); printf(“ Len1=%d,Len2=%d,Len3=%dn “, len1,len2,len3); ,How are you?Hello! Len1=6,Len2=12, Len3=18,例 输入一行字符,统计其中有多少个单词,#include main() char string81; int i,num=0,word=0; char c; gets(string); for(i=0;(c=stringi)!=0;i+) if(c= ) word=0; else if(word=0) word=1; num+; printf(“There are %d words in the linen“,num); ,

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

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1