C语言程序设计:第四章 数组

上传人:汽*** 文档编号:569595853 上传时间:2024-07-30 格式:PPT 页数:52 大小:3.69MB
返回 下载 相关 举报
C语言程序设计:第四章 数组_第1页
第1页 / 共52页
C语言程序设计:第四章 数组_第2页
第2页 / 共52页
C语言程序设计:第四章 数组_第3页
第3页 / 共52页
C语言程序设计:第四章 数组_第4页
第4页 / 共52页
C语言程序设计:第四章 数组_第5页
第5页 / 共52页
点击查看更多>>
资源描述

《C语言程序设计:第四章 数组》由会员分享,可在线阅读,更多相关《C语言程序设计:第四章 数组(52页珍藏版)》请在金锄头文库上搜索。

1、第二章第二章 C C语言基语言基础础合肥工业大学Chapter 4 ArrayHefei University of Technology Xuan & Li第四章第四章 数数 组组 在实际的应用中,经常会遇到某些类型相同并相互具有联系的数据。该类数据,经常要作相关的处理。如,一个班30个人的一门课程的成绩,求平均成绩、最高或最低成绩。处理这类数据的最好办法是将其定义成为一个具有共同特征的集合,这种同类型相关数据的集合称为数组。Chapter 4 Array第二章第二章 C C语言基语言基础础合肥工业大学Chapter 4 ArrayHefei University of Technology

2、 Xuan & Li数组的概念 C 语言可以根据用户需要,用基本数据类型定义特殊性质的数语言可以根据用户需要,用基本数据类型定义特殊性质的数据类型,称为构造类型。构造类型有:据类型,称为构造类型。构造类型有:数组、数组、结构、联合。结构、联合。 数组:数组:相同数据类型变量相同数据类型变量的的有序有序集合。有序表现在数组元素在集合。有序表现在数组元素在内存中连续存放。内存中连续存放。 数组用一个名字作为标识。数组用一个名字作为标识。为区分各元素,每个元素有一个用为区分各元素,每个元素有一个用整型表示的序号,称之为下标。下标可以有多个,下标的个数称为整型表示的序号,称之为下标。下标可以有多个,下

3、标的个数称为数组的维数。数组的维数。如:十个整型变量如:十个整型变量 k0,k1, k9一个下标。一个下标。 数组名。数组名。三个学生三门课程的成绩三个学生三门课程的成绩97.5 80.5 94.5 76.5 81.4 90.060.0 64.5 75.0 学学号号 0 1 20 1 2 课程课程 下标一:行下标一:行下标二:列下标二:列数组元素:数组元素:a11第二章第二章 C C语言基语言基础础合肥工业大学Chapter 4 ArrayHefei University of Technology Xuan & Li数组必须先说明后使用。说明的目的如下:数组必须先说明后使用。说明的目的如下:

4、说明数组的名字(标识)。说明数组的名字(标识)。说明数组的类型。说明数组的类型。说明数组的维数。说明数组的维数。确定各维下标的变化范围。确定各维下标的变化范围。 编译系统将根据说明,开辟内存单元按特有的顺序和相应的类编译系统将根据说明,开辟内存单元按特有的顺序和相应的类型为各元素分配内存单元。型为各元素分配内存单元。第二章第二章 C C语言基语言基础础合肥工业大学Chapter 4 ArrayHefei University of Technology Xuan & Li4.1 一维数组一维数组 一维数组的说明一维数组的说明说明方式:说明方式: type array1常量表达式常量表达式, ,

5、 arrayn常量表达式常量表达式;类型说明符,根据需要可加修饰说明。说明数组的类型。类型说明符,根据需要可加修饰说明。说明数组的类型。数组名,用标识符命名。数组名,用标识符命名。 用用 包含的常量表达式。数组的下标包含的常量表达式。数组的下标从从0变化到常量达式的值减一。变化到常量达式的值减一。int id5, iyear10;float fScore36; 当说明数组后,编译时系统会根据定义的类型分配连续的一段当说明数组后,编译时系统会根据定义的类型分配连续的一段内存单元给数组的各元素。内存单元给数组的各元素。id0id1id2id3id4 系统为数组分配的连续内存单元,每个系统为数组分配

6、的连续内存单元,每个单元占两个单元占两个BYTE。首地址用数组名。首地址用数组名id表示。表示。第二章第二章 C C语言基语言基础础合肥工业大学Chapter 4 ArrayHefei University of Technology Xuan & Li一维数组的初始化一维数组的初始化 数组的元素可以在说明数组时初始化。数组的元素可以在说明数组时初始化。int a10=1,2,3,4,5,6,7,8,9,10;/*/*说明数组,同时初始化全部元素。说明数组,同时初始化全部元素。* */ / float fValue10=1.0,2.0,3.0;/*说明数组,给部分元素初值,其余元素为说明数组,

7、给部分元素初值,其余元素为0。*/unsigned a =0x0000,0x0001,0x0002;/*当数组元素全部赋初值时,可以不指定长度当数组元素全部赋初值时,可以不指定长度*/ 第二章第二章 C C语言基语言基础础合肥工业大学Chapter 4 ArrayHefei University of Technology Xuan & Li数组的引用数组的引用原原 则:则:只能引用数组元素,只能引用数组元素,而不能引用整个数组。而不能引用整个数组。引用方式:数组名引用方式:数组名 整型表达式整型表达式 /* /*下标变量下标变量* */ /每个数组元素,可以出现在简单变量能够出现的任何地方。

8、每个数组元素,可以出现在简单变量能够出现的任何地方。 a1=12; s=a2+a1*20;第二章第二章 C C语言基语言基础础合肥工业大学Chapter 4 ArrayHefei University of Technology Xuan & Li举例举例求求10个学生一门课程的平均分,并输出低于平均成绩的分数。个学生一门课程的平均分,并输出低于平均成绩的分数。#include void main(void) float fScore10,aver=0; int i; for(i=0;i10;i+) scanf(“%f”,&fScorei); aver+=fScorei; aver/=10;

9、for( i = 0; i 10; i+) if(fScore i aver) printf(“num=%d,score=%f ” ,i+1,fScore i ); 说明数组。循环输入各元素的值并累加。循环输入各元素的值并累加。循环判断条件,满足条件输出。循环判断条件,满足条件输出。第二章第二章 C C语言基语言基础础合肥工业大学Chapter 4 ArrayHefei University of Technology Xuan & Li4.2 多多 维维 数数 组组 在实际应用中,经常会遇到一些用多维索引的数据。如:四个在实际应用中,经常会遇到一些用多维索引的数据。如:四个学生三门课的成绩。

10、可以用下表表示:学生三门课的成绩。可以用下表表示:92.580.591.099.083.590.070.066.060.078.056.059.0 显然,该表的每一项需要有两个索引项。表现为数组的两个下显然,该表的每一项需要有两个索引项。表现为数组的两个下标。超过一个下标的数组称为多维数组。标。超过一个下标的数组称为多维数组。行:代表某个学生。行:代表某个学生。列:代表某门课程。列:代表某门课程。第二章第二章 C C语言基语言基础础合肥工业大学Chapter 4 ArrayHefei University of Technology Xuan & Li多维数组的说明多维数组的说明说明方式:说明

11、方式: type array常量表达式常量表达式1常量表达式常量表达式n,;n个个整整型型常常量量表表达达式式数组元素的个数数组元素的个数?int a23 , b452;多维数组在内存中的顺序多维数组在内存中的顺序int a33;二维结构:二维结构:a00 a01 a02a10 a11 a12a20 a21 a22 排列顺序:先行后列。排列顺序:先行后列。a00a01a02a10a11a12a20a21a22下下标标为为0的的行行 总原则:最后一个下标先变化,变化一个周总原则:最后一个下标先变化,变化一个周期后,倒数第二个开始变化,期后,倒数第二个开始变化,如此类推。如此类推。 a为数组在内为

12、数组在内存中的首地址。存中的首地址。int b234;内存中的排列?内存中的排列?第二章第二章 C C语言基语言基础础合肥工业大学Chapter 4 ArrayHefei University of Technology Xuan & Li多维数组赋初值多维数组赋初值数组可以在说明时初始化。数组可以在说明时初始化。全部赋初值全部赋初值int a23=1,2,3,4,5,6; 下标为下标为0的一行的一行下标为下标为1的一行的一行int b23=1,2,3,4,5,6;按内存顺序赋初值。按内存顺序赋初值。部分赋初值部分赋初值int a23= 1 , 2 ; 0行的行的0列的元素赋初列的元素赋初值。

13、值。0行其余值为行其余值为0。int a23=1,2; 对全体数组元素赋初值,第一维下标可以省略。对全体数组元素赋初值,第一维下标可以省略。int a 3=1, 2, 3, 4, 5, 6;第二章第二章 C C语言基语言基础础合肥工业大学Chapter 4 ArrayHefei University of Technology Xuan & Li数组元素的引用数组元素的引用 数组定义后,具备数组定义后,具备简单变量的一切性质简单变量的一切性质,可以作为表达式的运,可以作为表达式的运算对象,也可以被赋值。引用时,算对象,也可以被赋值。引用时,只能引用数组元素只能引用数组元素,方式如下:,方式如下

14、:arrayexp1expnint a1010 ,y,i=2;ai+26=20;y=ai+26*100/30;a1011=34;对对4行行6列的元素赋值。列的元素赋值。参加表达式运算。参加表达式运算。 C语言不作下标检查,语法正确,语言不作下标检查,语法正确,但使用危险,可能造成程序的错误!但使用危险,可能造成程序的错误!整型表达式。整型表达式。第二章第二章 C C语言基语言基础础合肥工业大学Chapter 4 ArrayHefei University of Technology Xuan & Li4.3 字字 符符 数数 组组 C语言没有字符串变量,可以定义字符数组,每个元素存放一语言没有

15、字符串变量,可以定义字符数组,每个元素存放一个字符,从而达到存放字符串的目的。个字符,从而达到存放字符串的目的。字符数组的说明字符数组的说明char charrayconst exp1const expn,;char a10,b212;字符数组的初始化字符数组的初始化一维数组赋初值一维数组赋初值char str16= h, e, l, l, o,0;char str2 =”hello ”;用单个字符对每一个元素赋值。用单个字符对每一个元素赋值。用字符串对数组赋初值。用字符串对数组赋初值。可以指定长度,也可不指定长度。可以指定长度,也可不指定长度。 系统会在字串的结尾加系统会在字串的结尾加0,表

16、示字符串结束。,表示字符串结束。因此,说明数组因此,说明数组时,长度指定应至少比实际长度大时,长度指定应至少比实际长度大1,保证赋初值正确。,保证赋初值正确。0存储结构:存储结构:hello0第二章第二章 C C语言基语言基础础合肥工业大学Chapter 4 ArrayHefei University of Technology Xuan & Li二维数组赋初值二维数组赋初值二维数组的每一行可以存放一个字符串。二维数组的每一行可以存放一个字符串。char str36=”wang”,”zhang”,”liu”;wang0zhang0liu0 str数组在内存中数组在内存中的首地址。的首地址。存存

17、储储结结构构第二章第二章 C C语言基语言基础础合肥工业大学Chapter 4 ArrayHefei University of Technology Xuan & Li字符数组的输入输出字符数组的输入输出格式输入输出函数格式输入输出函数输出:输出: for(i=0;iSTRLEN;i+) printf(“%c”,str i ); /*通过循环输出各元素通过循环输出各元素*/ printf(”%s”,str); /*用字符串形式输出用字符串形式输出*/输入:输入: scanf(”%s”,str); /*用字符串输入整个数组用字符串输入整个数组*/ 用用scanf函数输入时函数输入时space作

18、为作为输入的分隔符输入的分隔符,因此输入带空格,因此输入带空格的字符串,会造成输入不全。的字符串,会造成输入不全。char a20;scanf(”%s”,a);输入:输入:China Anhui Hefei 结果结果a数组的内容是:数组的内容是:China0为了解决这个问题,系统定义如下专用于字符数组的为了解决这个问题,系统定义如下专用于字符数组的i/o函数。函数。第二章第二章 C C语言基语言基础础合肥工业大学Chapter 4 ArrayHefei University of Technology Xuan & Ligets( )字符串输入函数字符串输入函数用法:用法:char str 8

19、0;gets(str); 作用作用: 读入一个以换行符为终结符的字符串到读入一个以换行符为终结符的字符串到str中,用中,用0代替换行符。代替换行符。数组名作为函数的参数。puts( )字符串输出函数字符串输出函数用法:用法:char string =”China”;puts(string);数组名作为函数的参数。作用:作用:输出以输出以NULL 即即0结尾的字符串结尾的字符串string,自动加上,自动加上换行符换行符。 第二章第二章 C C语言基语言基础础合肥工业大学Chapter 4 ArrayHefei University of Technology Xuan & Li字符输入输出举

20、例#include void main(void) char str80; int i; gets(str); for(i=0 ; str i !=0; i+) if(stri=a&stri=z) stri -=32; puts(str);chp4ex0判断字符串结束。判断字符串结束。第二章第二章 C C语言基语言基础础合肥工业大学Chapter 4 ArrayHefei University of Technology Xuan & Li常用的字符处理函数常用的字符处理函数 C语言定义了一系列的字符处理函数用于字符串的处理,该类语言定义了一系列的字符处理函数用于字符串的处理,该类函数的原型定

21、义在函数的原型定义在string.h中。因此,在使用该类函数时,应在程中。因此,在使用该类函数时,应在程序的开始处,加序的开始处,加#include 字符串拷贝函数字符串拷贝函数strcpy(str1,str2)作用:将作用:将str2拷贝到拷贝到str1中。中。用法:用法:char str110, str2 =”Computer”;strcpy(str1,str2); /*str1的内容是的内容是“Computer”*/strcpy(str2,”Program”); /*str2的内容是的内容是“Program”*/说明:说明:str1的长度要足够长;的长度要足够长;str1只能是字符数组名

22、只能是字符数组名,str2可以是字符数组或字符串常量。可以是字符数组或字符串常量。第二章第二章 C C语言基语言基础础合肥工业大学Chapter 4 ArrayHefei University of Technology Xuan & Li字符串连接函数字符串连接函数strcat(str1, str2)作用:将作用:将str2连接到连接到str1后(去掉后(去掉str1的的0)。)。用法:用法:char str115=“Anhui ”, str2 =”Hefei”;strcat(str1,str2);puts(str1); /*输出结果为输出结果为 Anhui Hefei */说明:说明:st

23、r1的长度要足够长;的长度要足够长;str1只能是字符数组名只能是字符数组名,str2可以是字符数组或字符串常量。可以是字符数组或字符串常量。测试字符串长度函数测试字符串长度函数strlen(str) 作用:测试字符串的实际长度。函数运算得到整型值,该值是作用:测试字符串的实际长度。函数运算得到整型值,该值是字符串的长度!字符串的长度!int iLenStr;char str =“China”;iLenStr=strlen(str);printf(“%d”,iLenStr);结果?第二章第二章 C C语言基语言基础础合肥工业大学Chapter 4 ArrayHefei University o

24、f Technology Xuan & Li字符串的比较字符串的比较 strcmp(str1,str2) 作用:作用:对对str1和和str2 进行逐位无符号字符(进行逐位无符号字符(ASCII码)比较,码)比较,直到对应位字符能够确定关系或到串尾为止。直到对应位字符能够确定关系或到串尾为止。返回整型比较结果返回整型比较结果。字符的数值关系也就是字符的字符的数值关系也就是字符的ASCII码值的数值关系。码值的数值关系。比较结果如下:比较结果如下:比较结果比较结果strcmp的值的值str1str2str20char str1 =”abcd”;char str2 =“abcd”;int iRe1

25、,iRe2,iRe3;iRe1=strcmp(str1,”abdc”);iRe2=strcmp(str1,str2);iRe3=strcmp(”abcde”,str2); abcd abdccdc-d -1结果小于0。第二章第二章 C C语言基语言基础础合肥工业大学Chapter 4 ArrayHefei University of Technology Xuan & Listrlwr(str)将将str中的大写字母转换成小写字母。中的大写字母转换成小写字母。strupr(str)将将str中的小写字母转换成大写字母中的小写字母转换成大写字母#include #include void mai

26、n(void) char str1 =c programming! 123,str2=Computer; strlwr(str2); strupr(str1); puts(str1); puts(str2);C PROGRAMMING! 123computer第二章第二章 C C语言基语言基础础合肥工业大学Chapter 4 ArrayHefei University of Technology Xuan & Li举例:统计一行文字中大写字母、小写字母及数字的个数。举例:统计一行文字中大写字母、小写字母及数字的个数。#include #include void main(void) char

27、str80; int i, iAnum=0, ianum=0,i0num=0; gets(str); for(i=0; i=A& stri=a& stri=0& stri=9)i0num+; printf(“%6d,%6d,%6d”,iAnum,ianum,i0num); chp4ex2第二章第二章 C C语言基语言基础础合肥工业大学Chapter 4 ArrayHefei University of Technology Xuan & Li专题一、数组的常用算法专题一、数组的常用算法 数组是同类型数据的集合。便于整体处理数据,数组操作的主数组是同类型数据的集合。便于整体处理数据,数组操作的主

28、要算法有:要算法有:求极值;求极值;排序;排序;查找查找; ;第二章第二章 C C语言基语言基础础合肥工业大学Chapter 4 ArrayHefei University of Technology Xuan & Li求极值及其位置求极值及其位置算法演示算法演示 一维数组一维数组的极值的极值#include void main(void) int a10=1,6,-2,5,4,32,47,-66,13,14; int iMax, iPos, i; iPos=0; iMax=a0; for(i=1; iiMax) iMax = ai; iPos = i; printf(“Max=%5d Pos

29、ition=%5d”,iMax,iPos);假定最大值及其位置。假定最大值及其位置。循循环环比比较较 当前元素比最大值大,将其当前元素比最大值大,将其赋值为新的最大值并记录其位置。赋值为新的最大值并记录其位置。chp4ex3第二章第二章 C C语言基语言基础础合肥工业大学Chapter 4 ArrayHefei University of Technology Xuan & Li二维数组求极值二维数组求极值#include void main(void) float a34= 1.0, 3.0, 5.2, 7.4, 4.6, 5.5, 4.2, 1.2, 10.5, 0.23,1.3, 0.5

30、; int i, j, iRow=0,iCol=0; for(i=0; i3; i+) for(j=0;j4;j+) if(aijaiRowiCol) iRow = i; iCol = j; printf(”%f7.2,iRow%5d,iCol%5d”,aiRowiCol,iRow,iCol); 假定最小值的位置。假定最小值的位置。二二重重循循环环遍遍历历所所有有元元素素比较求最小值,记录其位置。比较求最小值,记录其位置。chp4ex4第二章第二章 C C语言基语言基础础合肥工业大学Chapter 4 ArrayHefei University of Technology Xuan & Li

31、排排 序序排序的概念排序的概念 排序排序是将一组随机排放的数按下标顺序是将一组随机排放的数按下标顺序从大到小从大到小或或从小到大从小到大重重新排列。新排列。1 ,5,4,6,7,99,7,6,5,4,11,4,5,6,7,9降序降序升序升序冒泡排序算法冒泡排序算法 冒泡排序算法演示冒泡排序算法演示第二章第二章 C C语言基语言基础础合肥工业大学Chapter 4 ArrayHefei University of Technology Xuan & Li冒泡排序程序如下:冒泡排序程序如下:#include void main(void) int i, j, a10=4,3,5,1,10,12,2

32、,6,7,9, iTemp; for(i=0; i9 ;i+) for( j=i+1;j10;j+) if(aiaj) iTemp=a i ; a i =a j ; a j =iTemp; for(i=0;i10; i+) printf(”%4d”,ai); 外外层层循循环环i变变化化内内层层循循环环j变变化化比比较较交交换换chp4ex5第二章第二章 C C语言基语言基础础合肥工业大学Chapter 4 ArrayHefei University of Technology Xuan & Li思考题思考题 升序的条件如何构造?升序的条件如何构造? 联合排序问题联合排序问题 已知一个班有已知一

33、个班有36个同学,个同学,a数组存放一门课的成绩,数组存放一门课的成绩,m数组存放数组存放其学号。要求将成绩从大到小排序。其学号。要求将成绩从大到小排序。 提示:提示:应考虑的问题是当应考虑的问题是当a数组元素比较交换时,数组元素比较交换时,m数组如何处数组如何处理?理?a 5 89.5 m 5 1005a 7 90.0 m 7 1007被动排序方。第二章第二章 C C语言基语言基础础合肥工业大学Chapter 4 ArrayHefei University of Technology Xuan & Li选择排序选择排序 冒泡排序冒泡排序在内层循环的比较中,满足条件的每次都需要交换。在内层循环

34、的比较中,满足条件的每次都需要交换。其中一些交换是无效的,交换算法会占用系统时间,从而降低算法其中一些交换是无效的,交换算法会占用系统时间,从而降低算法效率。效率。 选择排序算法的基本思路,每轮排序将选择排序算法的基本思路,每轮排序将a i 假定为极值,每次假定为极值,每次在在a i 到到 aMAX中找出个极值,记录其位置,最后让极值位置的中找出个极值,记录其位置,最后让极值位置的元素与元素与a i 交换。交换。 选择排序保证每轮排序只有一次交换,且为有效的交换!选择排序保证每轮排序只有一次交换,且为有效的交换!选择排序算法演示选择排序算法演示第二章第二章 C C语言基语言基础础合肥工业大学C

35、hapter 4 ArrayHefei University of Technology Xuan & Li选择排序程序选择排序程序#include void main(void) int i, j,iMax,a10=4,3,5,1,10,12,2,6,7,9, iTemp; for(i=0; i9 ;i+) iMax=i; for( j=i+1;j10;j+) if(aiMaxaj)iMax=j; if(iMax!=i) iTemp=ai; ai=aiMax; aiMax=iTemp; for(i=0;i10; i+) printf(”%4d”,ai); 排排序序循循环环假定最大值位置。假定

36、最大值位置。循环比较找出最大值的位置。循环比较找出最大值的位置。与本次比较的第一个元素交换。与本次比较的第一个元素交换。chp4ex6升序如升序如何构造何构造?第二章第二章 C C语言基语言基础础合肥工业大学Chapter 4 ArrayHefei University of Technology Xuan & Li算法的效率 无论是选择排序,还是冒泡排序其循环次数相同。无论是选择排序,还是冒泡排序其循环次数相同。 外层循环外层循环i从从0到到MAX-1 内层循环内层循环j从从i+1到到MAX总次数:总次数: r=1+2+n-1 n*n/2, n为数组元素个数。为数组元素个数。问问 题:题:4

37、00个元素求前十名,如何高效率地排序?个元素求前十名,如何高效率地排序?方法一:对方法一:对400个元素排完序后,取前个元素排完序后,取前10个。次数为个。次数为80000次。次。方法二:选择方法二:选择10个最大值。次数为个最大值。次数为4000次。次。假如一次循环需要假如一次循环需要1ms方法一需要方法一需要80s方法二需要方法二需要4s如何构造如何构造400取前十名的算法?取前十名的算法?第二章第二章 C C语言基语言基础础合肥工业大学Chapter 4 ArrayHefei University of Technology Xuan & Li 查查 找找查找是在一组数中,寻找一个特定的

38、数,并显示结果。查找是在一组数中,寻找一个特定的数,并显示结果。顺序查找顺序查找 顺序查找算法:顺序查找算法:构造循环,使循环的变量遍历数组每个元素的构造循环,使循环的变量遍历数组每个元素的下标。循环的过程中让特定的数和每个元素比较,相等则表示找到下标。循环的过程中让特定的数和每个元素比较,相等则表示找到该数,并输出其下标(位置)。该数,并输出其下标(位置)。程序设计中标志的设置和应用:程序设计中标志的设置和应用: 在程序设计中,经常要记录一些状态,作为判断的条件。因此在程序设计中,经常要记录一些状态,作为判断的条件。因此需要在程序中设置一些标志,通常标志是整型变量。需要在程序中设置一些标志,

39、通常标志是整型变量。 如查找问题,可以先设置一个整型变量如查找问题,可以先设置一个整型变量iFlag=0表示没有找到,表示没有找到,在查找的过程中一旦找到后,将在查找的过程中一旦找到后,将iFlag赋值为赋值为1,结束查找后,可以,结束查找后,可以由由iFlag值所代表的逻辑状态,确定是否已找到特定的数。值所代表的逻辑状态,确定是否已找到特定的数。第二章第二章 C C语言基语言基础础合肥工业大学Chapter 4 ArrayHefei University of Technology Xuan & Li标志设置框图标志设置框图int iFlag;iFlag=0;是否找到?iFlag=1;yes

40、no第二章第二章 C C语言基语言基础础合肥工业大学Chapter 4 ArrayHefei University of Technology Xuan & Li顺序查找程序顺序查找程序#include void main(void) int i,j,iFlag,a10=4,3,5,1,10,12,2,6,7,9; iFlag=0; scanf(“%d”,&j); for(i=0;i10;i+) if(j=ai) iFlag=1; printf(“The position is %dn”,i); if(iFlag=1) printf(“Found! %d”,j); else printf(“N

41、ot found!); 设置标志为没找到。设置标志为没找到。循循环环遍遍历历所所有有元元素素比较设置标志输出位置。比较设置标志输出位置。chp4ex7第二章第二章 C C语言基语言基础础合肥工业大学Chapter 4 ArrayHefei University of Technology Xuan & Li折半查找折半查找适用于在有序数组中查找适用于在有序数组中查找 在一个有序的一维数组中查找某一个数。已知某数组按升序排在一个有序的一维数组中查找某一个数。已知某数组按升序排列,给定一个数,找出该数在数组中的位置。列,给定一个数,找出该数在数组中的位置。 可以通过将区间折半,快速缩小查找区间,提

42、高效率!可以通过将区间折半,快速缩小查找区间,提高效率!折半查找算法演示折半查找算法演示第二章第二章 C C语言基语言基础础合肥工业大学Chapter 4 ArrayHefei University of Technology Xuan & Li折折半半查查找找程程序序#include void main(void) int iTop,iBot,iMid,iS,iFlag,a10=1,2,3,5,6,8,9,10,11,12; iFlag=0; iTop=0; iBot=9; scanf(“%d”,&iS); do iMid=(iTop+iBot)/2; if(iS=aiMid) iFlag=

43、1; printf(“iS has be found : a%d”,iMid); else if(iSaiMid) iBot=iMid-1; else iTop=iMid+1; while(iTop=iBot&iFlag=0); if(iFlag=0) printf(“Not found!n”); 初始化查找标志及顶、底。初始化查找标志及顶、底。查查找找循循环环折半。折半。找到。找到。没找到,调整没找到,调整iTop或或iBotchp4ex8第二章第二章 C C语言基语言基础础合肥工业大学Chapter 4 ArrayHefei University of Technology Xuan &

44、Li专题二、字符数组专题二、字符数组第二章第二章 C C语言基语言基础础合肥工业大学Chapter 4 ArrayHefei University of Technology Xuan & Li统计字符串中的各元音字母的个数统计字符串中的各元音字母的个数#include void main(void) char str80,ch6=a,e,i,o,u,0; int i,iCount5=0,0,0,0,0; gets(str); for(i=0;stri!=0;i+) switch(stri) case a: case A: iCount0+;break; case e: case E: iCo

45、unt1+;break; case i : case I: iCount2+;break; case o: case O: iCount3+;break; case u: case U: iCount4+; for(i=0;i5;i+) printf(“Num of %c :%5d”,chi,iCounti);循环遍历数组元素判断字母。chp4ex9判断字符串是否结束的方法。 istrlen(str)第二章第二章 C C语言基语言基础础合肥工业大学Chapter 4 ArrayHefei University of Technology Xuan & Li字符的加密解密字符的加密解密 将字符串

46、中的字母加密,将字符串中的字母加密,密钥密钥为循环平移两个字母。如为循环平移两个字母。如A加密加密成成C.,Z加密成加密成B。如:I am a student. Zip 230009加密后: K co c uvwfgpw. Bkr 230009 加密算法可以描述为:如果stri是字母 循环平移两个字符;以大写字母为例,循环平移两个字符的加密算法:以大写字母为例,循环平移两个字符的加密算法: stri=(stri-A+2)%26+A第二章第二章 C C语言基语言基础础合肥工业大学Chapter 4 ArrayHefei University of Technology Xuan & Li程序如下

47、:#include #include void main(void) int i; char str80,chKey=2; gets(str); for(i=0;i=a&stri=A&stri=Z) stri=(stri-A+chKey)%26+A; puts(str);密钥。密钥。输入待加密的字符串。循循环环遍遍历历字字符符。是字母,则加密!是字母,则加密!chp4exa设计解密算法!设计解密算法!第二章第二章 C C语言基语言基础础合肥工业大学Chapter 4 ArrayHefei University of Technology Xuan & Li专题三、数组与矩阵专题三、数组与矩阵i

48、nt a33a00 a01 a02 a10 a11 a12a20 a21 a22 该表示方法,在数学上称为该表示方法,在数学上称为“矩阵矩阵”,当行、列,当行、列数相同时,称为数相同时,称为“方阵方阵”,也称为,也称为“行列式行列式”。 第二章第二章 C C语言基语言基础础合肥工业大学Chapter 4 ArrayHefei University of Technology Xuan & Li矩阵的相关算法矩阵的相关算法 生成特殊矩阵生成特殊矩阵生成单位方阵生成单位方阵单位方阵:1 0 0 00 1 0 00 0 1 00 0 0 1主对角线元素为主对角线元素为1,其余为,其余为0。if(i=

49、j)aij=1, 其余为其余为0。#include void main(void) int a44,i,j; for(i=0;i4;i+) for(j=0;j4;j+) if(i=j) aij=1; else aij=0; for(i=0;i4;i+) for(j=0;j4;j+) printf(“%4d”,aij); printf(“n”); chp4exb第二章第二章 C C语言基语言基础础合肥工业大学Chapter 4 ArrayHefei University of Technology Xuan & Li生成三角阵生成三角阵三角阵的概念三角阵的概念,以对角线为界以对角线为界,一半元素

50、为一半元素为0的的方阵。方阵。1 2 3 40 5 6 70 0 9 100 0 0 11 上三角阵。当当i=j值值非非0为为下下三三角角阵阵ij如何生成元素为行、列下标和的下三角阵如何生成元素为行、列下标和的下三角阵?第二章第二章 C C语言基语言基础础合肥工业大学Chapter 4 ArrayHefei University of Technology Xuan & Li与下标相关矩阵与下标相关矩阵形成如下矩阵形成如下矩阵 :1 4 72 5 83 6 90 1 2 3 012 在列方向上每跨一列,要走三步;在行方向上每跨一行,要走在列方向上每跨一列,要走三步;在行方向上每跨一行,要走一步

51、,只能横向或纵向行走,且不走远路,确定从一行一列走到任一步,只能横向或纵向行走,且不走远路,确定从一行一列走到任意行列所走的步数。意行列所走的步数。18显然,所走的步数和当前行列的位置有关。显然,所走的步数和当前行列的位置有关。s=i*1+j*3第二章第二章 C C语言基语言基础础合肥工业大学Chapter 4 ArrayHefei University of Technology Xuan & Li1 4 72 5 83 6 9aij=i*1+j*3+1#include void main(void) int a33,i,j; for(i=0;i3;i+) for(j=0;j3;j+) ai

52、j=i+j*3+1; for(i=0;i3;i+) for(j=0;j3;j+) printf(“%4d”,aij); printf(“n”); chp4exc生成如下矩阵:生成如下矩阵:1 5 9 135 9 13 179 13 17 21 第二章第二章 C C语言基语言基础础合肥工业大学Chapter 4 ArrayHefei University of Technology Xuan & Li矩阵及元素求和矩阵及元素求和求方阵主、辅对角线之和。求方阵主、辅对角线之和。 1 5 2 6 -9 8 7 3 5 4 0 1 9 8 4 2主对角线:主对角线:满足下标为满足下标为ii的元素和。的

53、元素和。辅对角线:辅对角线: 满足下标为满足下标为i jMAX-i的所有元的所有元素之和。素之和。如何构造程序?如何构造程序?第二章第二章 C C语言基语言基础础合肥工业大学Chapter 4 ArrayHefei University of Technology Xuan & Li求两个矩阵之和求两个矩阵之和cij=aij+bij 对应元素之和,要求对应元素之和,要求a、b行列数相同。行列数相同。#include void main(void) int a23=1,2,3,4,5,6; int b23=1,3,5,2,4,6,c23,i,j; for(i=0;i2;i+) for(j=0;j

54、3;j+) cij=aij+bij; for(i=0;i2;i+) for(j=0;j3;j+) printf(“%4d”,cij); printf(“n”); chp4exd对应元素和。对应元素和。第二章第二章 C C语言基语言基础础合肥工业大学Chapter 4 ArrayHefei University of Technology Xuan & Li矩阵的转置运算矩阵的转置运算转置阵的概念:转置阵的概念:1 2 34 5 6a1 42 53 6b 矩阵矩阵a的转置阵的转置阵b,b矩阵行、列的最大下标应和矩阵矩阵行、列的最大下标应和矩阵a列、行列、行的最大下标相同。遍历所有下标,赋值:的最

55、大下标相同。遍历所有下标,赋值:b i j =a j i 求非方阵的转置阵求非方阵的转置阵a、b互为转置阵。第二章第二章 C C语言基语言基础础合肥工业大学Chapter 4 ArrayHefei University of Technology Xuan & Li求方阵的转置阵求方阵的转置阵如果求方阵的转置阵,行、列相同不需要定义新的数组。如果求方阵的转置阵,行、列相同不需要定义新的数组。1 5 9 132 6 10 14 3 7 11 154 8 12 16 1 2 3 4 5 6 7 8 9 10 11 1213 14 15 16算法:对角线两边的对称元素交换。chp4exe#inclu

56、de void main(void) int a33=1,2,3,4,5,6,7,8,9,i,j,iTemp; for(i=0;i3;i+) for(j=0;ji;j+) iTemp=a i j ; a i j =a j i ; a j i =iTemp; for(i=0;i3;i+) for(j=0;j3;j+) printf(“%4d”,a i j ); printf(“n”); Why?第二章第二章 C C语言基语言基础础合肥工业大学Chapter 4 ArrayHefei University of Technology Xuan & Li思思 考考 题题 狐狸捉兔子问题。狐狸捉兔子问

57、题。12345678910第二章第二章 C C语言基语言基础础合肥工业大学Chapter 4 ArrayHefei University of Technology Xuan & Li 已知一个班有已知一个班有36个学生。用个学生。用n数组存放学号,数组存放学号,a数组存放物数组存放物理成绩,理成绩,b数组存放数学成绩。要求计算:数组存放数学成绩。要求计算:数学及物理课程的平均成绩;数学及物理课程的平均成绩;输出两门课程都低于平均成绩的同学的学号和成绩;输出两门课程都低于平均成绩的同学的学号和成绩;对数学成绩从高到低排序。对数学成绩从高到低排序。打印打印“杨辉杨辉”三角形(七阶)三角形(七阶)

58、11 11 2 11 3 3 11 4 6 4 11 5 10 10 5 11 6 15 20 15 6 1 求求1,3,6,4,8,9,10的逆序排列。的逆序排列。逆序逆序 10,9,8,4,6,3,1第二章第二章 C C语言基语言基础础合肥工业大学Chapter 4 ArrayHefei University of Technology Xuan & Li 输入一串字符,将其中的奇数下标位置的小写字母表换成对输入一串字符,将其中的奇数下标位置的小写字母表换成对应的大写字母,其余不变,并输出结果。应的大写字母,其余不变,并输出结果。 统计一行(统计一行(80)英文文字中特定字符的数量,字符串

59、和特定)英文文字中特定字符的数量,字符串和特定字符从键盘输入。字符从键盘输入。 定义一个十个元素组成的整型数组,从键盘输入各个元素。定义一个十个元素组成的整型数组,从键盘输入各个元素。让数组的最大值和第一个元素交换,最小值和最后一个元素交换。让数组的最大值和第一个元素交换,最小值和最后一个元素交换。 编写程序生成编写程序生成4 4的上三角阵,要求各元素的值为其行号与的上三角阵,要求各元素的值为其行号与列号的和。以数学表示方式输出结果。列号的和。以数学表示方式输出结果。 统计一个字符串中的单词数,单词以空格、逗号、句号、分统计一个字符串中的单词数,单词以空格、逗号、句号、分号分隔。号分隔。(较难

60、较难) 编写程序求方阵主对角线上的最大值及其位置,输入编写程序求方阵主对角线上的最大值及其位置,输入a33输出结果。输出结果。 编程分别使用一维数组和二维实现打印如下图形:编程分别使用一维数组和二维实现打印如下图形: * * * *第二章第二章 C C语言基语言基础础合肥工业大学Chapter 4 ArrayHefei University of Technology Xuan & Li 输入一个二十人班级的一门课程的成绩,输入一个分数查找输入一个二十人班级的一门课程的成绩,输入一个分数查找是否有该成绩,如果有输出序号,没有打印提示!是否有该成绩,如果有输出序号,没有打印提示! 判判断一个字符串是否为回文,如果是输出断一个字符串是否为回文,如果是输出“Yes”,不是输出,不是输出“No”。 如如: ABCDCBA、ABCCBA是回文。是回文。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号