C语言程序设计ppt-第8章-数组.ppt

上传人:本田雅阁 文档编号:3479496 上传时间:2019-09-01 格式:PPT 页数:65 大小:602.52KB
返回 下载 相关 举报
C语言程序设计ppt-第8章-数组.ppt_第1页
第1页 / 共65页
C语言程序设计ppt-第8章-数组.ppt_第2页
第2页 / 共65页
C语言程序设计ppt-第8章-数组.ppt_第3页
第3页 / 共65页
C语言程序设计ppt-第8章-数组.ppt_第4页
第4页 / 共65页
C语言程序设计ppt-第8章-数组.ppt_第5页
第5页 / 共65页
点击查看更多>>
资源描述

《C语言程序设计ppt-第8章-数组.ppt》由会员分享,可在线阅读,更多相关《C语言程序设计ppt-第8章-数组.ppt(65页珍藏版)》请在三一文库上搜索。

1、2019/9/1,华中科技大学计算机学院,1,C语言程序设计,第8章 数组 一维数组的声明、初始化和使用 数组的运算、作为函数参数的使用 字符串 、多维数组,2019/9/1,华中科技大学计算机学院,2,8.1 数组概述,程序=算法+数据结构 PASCAL程序设计语言发明者Niklaus Wirth曾经说过 简单数据类型的变量 仅能描述一个单独的数据 描述能力十分有限 如何描述一群有联系的数据集合? 数组 属于构造类型 是相同数据类型数据的集合 元素 组成数组的这些数据 任何类型(简单类型、构造类型),2019/9/1,华中科技大学计算机学院,3,8.1 数组概述,数组特点 其所有元素数目固定

2、 其所有元素类型相同 其所有元素顺序存放 数组作用 集中管理 将相关的同类型数据集中用一个标识符(数组名)表示 元素顺序存放,但可随机定位 用若干个数字序号(下标)来区别各数组元素 例如定义float score30,可表述30位学生成绩 用数组具有什么好处?,2019/9/1,华中科技大学计算机学院,4,8.1 数组概述,问题 计算全班30位同学某门课程的平均成绩 解决方法 设置30个float型变量来记录成绩 设置一个有30个float型元素的数组来记录成绩 问题分析 参与运算的平均成绩,其数据类型都相同(符合数组特点) 30位同学属于一个班,用数组可把30个成绩表示成一个整体 用数组的优

3、点 便于循环处理 提高效率,便于书写、检查、修改(对海量数据效果更明显),2019/9/1,华中科技大学计算机学院,5,8.2 一维数组,维数 标识一个数组元素所需要使用的下标的个数 一维数组 只有一个下标 可用于表示一个线性的数据队列 使用数组的要求 先声明数组 对它进行初始化,然后才能使用,2019/9/1,华中科技大学计算机学院,6,8.2.1 一维数组的声明,要解决三个问题 确定数组的数据类型 给数组定义一个名字,以便在程序中使用 指明数组的大小,即数组中元素的个数 声明形式 存储类型说明符 类型修饰符 类型说明符 数组名常量表达式=初值表; 存储类型说明符:extern、static

4、 类型修饰符:const、volatile 数组名:是一个标识符,是一个地址常量,用以表示数组中打头元素的地址,2019/9/1,华中科技大学计算机学院,7,8.2.1 一维数组的声明,例8.1 具有基本数据类型的一维数组的声明 #define SIZE 10 int array5; double d5,eSIZE; char nameSIZE*5; 错误例子 unsigned int size; char strsize,buffer2*size; 错误原因 数组的大小一经说明就不能改变 长度说明不是常量表达式,在编译之前就必须明确确定,2019/9/1,华中科技大学计算机学院,8,8.2.

5、1 一维数组的声明,例8.2 采用类型修饰符的一维数组的声明 static int y10; 数组y中的每一个成员都是静态整型成员 extern double s2; 作了一个外部双精度型数组的引用性声明 应该在另外的源文件中通过double s2;来定义s数组,这样第2个声明语句才有意义,2019/9/1,华中科技大学计算机学院,9,8.2.2 一维数组的使用,C提供的各种操作符 针对基本数据类型的变量 数组 是构造数据类型 但其元素是基本数据类型的变量 访问数组 不需设计专门的数组操作符 方法:数组名下标表达式 例int a5, j=2; 5个元素依次是a0,a1,a2,a3,a4 aj+

6、2 、a+j 、aj-、a5*j-7 错误写法:aj-3 、a2*j+1,2019/9/1,华中科技大学计算机学院,10,例8.3 使用一维数组计算学生的平均成绩。,#include stdio.h void main(void) int score30,i,sum=0; double average; printf(“input the scores please:n“); for(i=0;i30;i+) scanf(“%d”, /* 将键盘输入的成绩赋给各个数组元素 */,for(i=0;i30;i+) sum+=scorei; /* 求学生成绩的累加和 */ average=sum/30

7、.0; /* 计算平均成绩 */ printf(“sum=%dn“,sum); printf(“average=%lfn“,average); ,2019/9/1,华中科技大学计算机学院,11,8.2.3 一维数组的初始化,显式初始化值的个数与说明长度相同 int x5=0,1,2,3,4; int y5=0,1,2,3,4,5; 错误:初值个数大于数组长度 有初始化值时,长度说明可缺省 数组长度由初值个数确定 int y=1,2,3,4,5,6,7,8; 初始化值的个数可以小于说明长度,但只能缺省最后连续元素的初值 int z10=0,1,2,3,4; /*前5个下标变量赋值*/ int u

8、9= , 1, , ,2; 错误:缺省u0, u2不是最后连续元素,2019/9/1,华中科技大学计算机学院,12,例8.8 观察局部数组、静态数组和外部数组的缺省初值的程序,#include “stdio.h“ double s2; void main(void) int a2, i; static int b2; for(i=0;i2;i+) printf(“s%d=%dn“,i,si); printf(“a%d=%dn“,i,ai); printf(“b%d=%dn“,i,bi); ,程序的运行结果如下: s0=0, a0=64, b0=0 s1=0, a1=3129, b1=0 结论:

9、 外部数组s和静态数组b的元素的缺省初值都是0 局部数组a的初值则是随机的,2019/9/1,华中科技大学计算机学院,13,8.2.4 一维数组的存储结构,存放方法 各个元素从数组名标明的起始地址开始在内存中连续存放 例如int a5; 这里是16位机,1个int变量占2个字节空间,2019/9/1,华中科技大学计算机学院,14,例8.9 观察一维数组的存储情况的程序,#include “stdio.h“ #define SIZE 3 void main(void) int xSIZE=1,3,5, k; char sSIZE+1=“ABC“; float fSIZE=1.414,3.1415

10、, 5.25; printf(“the value of x is 0x%xn“,x); for(k=0;kSIZE;k+) printf(“x%d=%dt addr=0x%xn“,xk,程序运行结果如下: the value of x is 0xffc8 x0=1 addr=0xffc8 x1=3 addr=0xffca x2=5 addr=0xffcc,2019/9/1,华中科技大学计算机学院,15,例8.9 观察一维数组的存储情况的程序,k=0; printf(“nthe value of s is 0x%xn“,x); while(sk) printf(“s%d=%ct addr=0x

11、%xn“,sk, ,程序运行结果如下: the value of s is 0xffce s0=A addr=0xffce s1=B addr=0xffcf s2=C addr=0xffd0,s3+X=X addr=0xffd1 the value of f is 0xffd2 f0=1.414000 addr=0xffd2 f1=3.141500 addr=0xffd6 f2=5.250000 addr=0xffda,2019/9/1,华中科技大学计算机学院,16,8.2.5 一维数组的运算,C提供的各种操作符 赋值运算、各种算术运算、+、- 针对基本数据类型的变量 可针对int、float

12、、以及double类型数组中元素 合法操作 int x3=1,2,3,y3=4,5,6,z3,k=1; z0 = x0 + y0; z1 = x0 + y3; zk = +x0 + -yk+; z1 = x0 + yx1; 不允许两个数组直接相加 z=x+y; 编译时给出提示“cannot add two pointers”,2019/9/1,华中科技大学计算机学院,17,数组的直接相加,例8.10 设5个同学修了高等数学普通物理、程序设计语言并取得了成绩,现计算三门课总分、平均分,每门课的总分、平均分,每个同学的总分、平均分 #include “stdio.h“ #define SIZE 5

13、 void main(void) int mathSIZE=91,67,88,78,81; int physicsSIZE=87,79,81,86,67; int programmingSIZE=86,81,85,92,87; /*3个数组依次存放数学、物理、程序设计的成绩*/,2019/9/1,华中科技大学计算机学院,18,例8.10,int course_sum3=0,0,0; double course_even3; /* 分别为各门课程总分、平均分数组*/ int student_sum5=0,0,0,0,0; double student_even5; /*分别为各位同学总分、平均分

14、数组*/ int sum=0; double even; /*分别为全部课程的总分、平均分 */ int i;,for(i=0;i5;i+) course_sum0+=mathi; course_sum1+=physicsi; course_sum2+=program mingi; /* 计算各门课程的总分 */ for(i=0;i3;i+) course_eveni=course_su mi/5.0; sum+=course_sumi; /* 计算各门课平总分 */ even=sum/(3.0*SIZE); /* 计算全部课程的平均分 */,2019/9/1,华中科技大学计算机学院,19,例

15、8.10,for(i=0;i5;i+) /* 计算每个学生的总分、平均分 */ student_sumi=mathi+physicsi+programmingi; student_eveni=student_sumi/3.0; printf(“三门课程的总分: %dn“,sum); printf(“三门课程的平均分: %lfn“,even);,程序的运行结果如下 三门课程的总分: 1236 三门课程的平均分: 82.400000,2019/9/1,华中科技大学计算机学院,20,例8.10,for(i=0;i3;i+) printf(“course_sum%d=%dn“,i,course_sum

16、i); printf(“course_even%d=%lfn“,i,course_eveni); ,程序的运行结果如下 course_sum0=405 course_even0=81.000000 course_sum1=400 course_even1=80.000000 course_sum2=431 course_even2=86.200000,2019/9/1,华中科技大学计算机学院,21,例8.10,for(i=0;i5;i+) printf(“student_sum%d=%dn“,i,student_sumi); printf(“student_even%d=%lfn“,i,stu

17、dent_eveni); ,程序的运行结果如下 student_sum0=264 student_even0=88.000000 student_sum1=227 student_even1=75.666667 student_sum2=254 student_even2=84.666667,student_sum3=256 student_even3=85.333333 student_sum4=235 student_even4=78.333333,2019/9/1,华中科技大学计算机学院,22,8.2.6 一维数组作为函数参数,参数的传递 传值 传地址 数组作为函数参数 采用的是参数传址

18、 传送的是数组的地址 或传送数组元素的地址 还需传送数组元素的个数,2019/9/1,华中科技大学计算机学院,23,例8.11 一维数组作为函数参数的例子,#include “stdio.h“ void fun(int y,int n); /* y是形式数组 */ void main(void) int k,x5=1,2,3,4,5; fun(x,3); fun( void fun(int y,int n) ,子函数 需给出形式数组的声明和形式数组中元素的个数 调用函数 实参的值是数组x的起始地址 参数传递,2019/9/1,华中科技大学计算机学院,24,例8.12 对n个整数采用冒泡法对其排

19、序,分析 输入n个数存放在一数组中,便于循环处理 排序 是将一个数据元素任意的序列 按照一定的规则排列成为一个有序的序列 void bubble_sort(int a,int n) 对an表示的n个整数进行排序处理 main() 输入n个数; 输出n个数检验排序效果 ,调用bubble_sortsort对n个数排序;,2019/9/1,华中科技大学计算机学院,25,例8.12 冒泡排序,第一遍 从下标为0的元素开始,对两两相邻的元素进行比较 如果前一个元素大于后一个元素,就交换这两个元素的值 循环n-1次比较 在第一遍循环后 不仅把最大整数移到数组最末尾(其下标为n-1)(像冒泡) 还尽量把较

20、大值往后挪,例如“31” 还剩前面n-1个数需排序,2019/9/1,华中科技大学计算机学院,26,例8.12 冒泡排序,第2遍 对前n-1个数,与第1遍一样循环处理 还剩前n-2个数未排序 第i遍 对前n-i+1个数,与第1遍一样循环处理 还剩前n-i个数未排序 大循环结束时机(对i) i=n-1 一遍循环中未发生交换,即已排好序,2019/9/1,华中科技大学计算机学院,27,例8.12 冒泡排序,void bubble_sort(int a,int n) /* 形参用形式数组a */ int i,j,t,k; int flag=1; for(i=0; (iaj+1) /* 对两两相邻的元

21、素进行比较 */ t=aj, aj=aj+1, aj+1=t; flag=1; ,2019/9/1,华中科技大学计算机学院,28,8.3 字符数组,8.3.1 字符数组的声明和使用 字符数组 元素的数据类型为char或wchar_t 声明格式 与前面讨论的一维数组相同 char s81; 字符串 用一对双引号界定的一个字符序列 C语言没有规定字符串类型 用一个字符数组来存放字符序列,并且在末尾加一个空字符0来构造字符串,2019/9/1,华中科技大学计算机学院,29,8.3 字符数组,字符串的存储 字符串的长度 字符串的长度 = 字符串的存储长度1 设计字符数组的最小长度 应该等于该字符串的存

22、储长度 或字符数组的最小长度应该等于该字符串的长度加1 字符数组的使用 通过下标来访问字符数组中的具体字符元素,2019/9/1,华中科技大学计算机学院,30,#include “stdio.h“ void main(void) char Capital27,Lowercase27; int i, delt=a-A; Capital0= A; Lowercase0=Capital0+delt; for(i=1;i26;i+) Capitali=Capitali-1+1; Lowercasei=Lowercasei-1+1; Capital26= 0; Lowercase26=Capital26

23、; printf(“%sn“,Capital); printf(“%sn“,Lowercase); ,例8.13 产生大写和小写的26个英文字母字符串,程序运行结果如下: ABCDEFGHIJKLMN OPQRSTUVWXYZ abcdefghijklmnop qrstuvwxyz,2019/9/1,华中科技大学计算机学院,31,8.3.2 字符数组的初始化,通过初始化列表 char s18=W,u,h,a,n,0; 0必须在初始化列表中显示给出 用字符串初值 char s228=Computer Science; 末尾将自动加上一个0 第三种方法 数组长度未明显给出 char s3=Comp

24、uter Engineering; 字符数组的容量恰好等于字符串的存储长度,2019/9/1,华中科技大学计算机学院,32,8.4 字符串处理函数,串操作函数 求字符串长度 字符串的拷贝 字符串的比较 字符串的连接 求字符串的子串 删除字符串首尾空白字符 从字符串中删除所有与给定字符相同的字符 将字符串反转等函数,2019/9/1,华中科技大学计算机学院,33,例8.14 求字符串长度的函数,int strlen(char s) int j=0; while(sj!= 0) j+; return j; ,void main(void) char str=“there is a boat on

25、the lake“; int length; length = strlen(str); printf(“length of the string is %dn“,length); 运行结果: length of the string is 28,2019/9/1,华中科技大学计算机学院,34,例8.15 字符串拷贝的函数,void strcpy(char t, char s) int j=0; while(tj=sj+) ; ,void main(void) char str130, str2= “there is a boat on the lake.“; strcpy(str1,str2

26、); puts(str1); 运行结果: there is a boat on the lake.,2019/9/1,华中科技大学计算机学院,35,例8.16 两个字符串比较函数,比较规则 从两个字符串的第一个字符起开始 按照字符ASCII码值的大小进行比较 返回规定 当两个字符串相等时,返回0 当第一个串大于第二个串时,返回一个大于零的值 当第一个串小于第二个串时,返回一个小于零的值,int strcmp(char s,char t) int j=0; while(sj=tj ,2019/9/1,华中科技大学计算机学院,36,例8.16 两个字符串比较函数,void main(void) c

27、har s1=“car“,s2=“bus“,s3=“truck“,s4=“car“; printf(“%s is %s %s.n“, s1,strcmp(s1,s2)0?“great then“:strcmp(s1,s2)0?“great then“:strcmp(s1,s3)0?“great then“:strcmp(s1,s4)0?“less then“ : “equal to“,s4); 运行结果: car is great then bus. car is less then truck. car is equal to car.,2019/9/1,华中科技大学计算机学院,37,例8.

28、17 字符串的连接函数,char * strcat(char t,char s) int j=0,k=0; while(tj+!=0) ; j-; while(tj+=sk+) ; return t; ,void main(void) char s180=“I like “,s2=“the C programming.“; strcat(s1,s2); printf(“%sn“,s1); 运行结果: I like the C programming.,2019/9/1,华中科技大学计算机学院,38,例8.18 求字符串子串的函数,int strstr(char cs, char ct) int

29、 j=0,k; for( ; csj!= 0; j+) if(csj=ct0 ) k=1; while(csj+k=ctk ,void main(void) char s180=“C is the most widely used programming language.“,s2=“use“; int i,j=0; i = strstr(s1,s2); printf(“the sub_strings beginning position is %dn“,i); while(ji) putchar(s1j+); putchar(n); while(putchar(s1i+) ; putchar

30、(n);,运行结果: the sub_strings beginning position is 21 C is the most widely used programming language.,2019/9/1,华中科技大学计算机学院,39,例8.19 删除字符串首尾空白字符的函数,int trim(char s) int i, num, j=0, k=0, L=strlen(s); while(sj= |sj= t|sj= n|sj= r) j+; /* j计算首部空白字符的个数 */ i=L-1; /* i为字符串最后一个字符(0前面)的下标 */ while(si-k= |si-k

31、=t|si-k= n|si-k=r) k+; /*k计算尾部空白字符的个数 */ num=L-j-k; for(i=0;inum;i+) si=si+j; snum=0; return strlen(s);,2019/9/1,华中科技大学计算机学院,40,例8.20 从字符串s中删除所有与给定字符相同的字符,从字符串s中去掉与字符变量c值相同的字符 void delete_c(char s,char c) int j=0, k=0; /*j-读指示器,k-写指示器*/ while(sj!=0) if(sj!=c) sk+=sj; j+; sk=0; ,2019/9/1,华中科技大学计算机学院,

32、41,例8.21 将字符串反转的函数,将一个字符串首尾颠倒过来如:将abcde颠倒为edcba void reverse(char s) int j, k; /*j-前指示器 k-尾指示器*/ char c; for(j=0,k=strlen(s)-1;jk;j+,k-) c=sj,sj=sk,sk=c; ,2019/9/1,华中科技大学计算机学院,42,上面三个函数的应用,void main(void) char str80=“ atbtctdtetft “; printf(“before trim,the string is “%s“n“,str); trim(str); printf(“

33、after trim,the string is “%s“n“,str); delete_c(str, t); printf(“after delete t,the string is “%s“n“,str); reverse(str); printf(“after reverse,the string is “%s“n“,str);,运行结果: before trim,the string is “ atbtctdtetft “ after trim,the string is “atbtctdtetft“,after delete t,the string is “abcdef“ afte

34、r reverse,the string is “fedcba“,2019/9/1,华中科技大学计算机学院,43,8.4.2 数字串与数之间转换的函数,例8.22 将一个十进制数字串转换成为对应的整数的函数 atoi函数功能 将s字符数组中存放的一个十进制数字串转换成为对应的整数,并返回该整数 算法: ASCII码字符sj转换为对应数字 sj-0 本位乘以10加下一位的算法 54321 =(5)*10+4)*10+3)*10+2*10)+1,2019/9/1,华中科技大学计算机学院,44,atoi函数,#define BASE 10 int atoi(char s) int j=0,num=0

35、; for(;sj!=0;j+) num=num*BASE +sj-0; return num; ,2019/9/1,华中科技大学计算机学院,45,例8.23 将一个整数转换成为基数为BASE的数字串的函数,#define BASE 10 void itoa(int n,char s) int sign,j=0; if(sign=n)0) sj+=n%BASE+0; n/=BASE; if(sign0) sj+=-; sj=0; reverse(s);,2019/9/1,华中科技大学计算机学院,46,例8.24 将一个十六进制数字串转换成为对应的整数的函数,问题 当基数BASE大于10,如:1

36、6,由于十六进制数的表示形式,如a和A,b和B 以及0到f或F在ASCII码表的编码不连续性 因此需要在转换中进行一定的调整 htoi函数 将一个存放在字符数组s中的十六进制数字串转换成为对应的整数 并且返回转换后的整数,2019/9/1,华中科技大学计算机学院,47,htoi函数,int htoi(char s) int j=0,num=0; if(sj=0 ,2019/9/1,华中科技大学计算机学院,48,8.5 多维数组,实际应用 有时需要用多个下标来实现对数组元素的访问 例如 张三同学,学号为01,语文和数学成绩分别为85,91,李四同学,学号位02,语文和数学成绩分别为82,95 解

37、决方法 用二维数组可以描述学号-课程成绩表中的成绩数据 多维数组的用途 二维数组可以描述数学中的矩阵或行列式 三维数组可以描述空间中的点集 n维数组来描述n维线性空间中的n维向量,2019/9/1,华中科技大学计算机学院,49,8.5.1 多维数组的说明与使用,形式 类型说明 数组名常量表达式1 常量表达式2常量表达式n=初值表; 类型说明:存储类型说明符 类型修饰符 数据类型 例如,int x22; 对其元素的引用 数组名下标1 下标2下标n 例如,x10=3;,2019/9/1,华中科技大学计算机学院,50,例8.25 对二维数组中元素的访问与操作,#include “stdio.h“ v

38、oid main(void) int x23,a=2; x02=8; scanf(“%d“, ,2019/9/1,华中科技大学计算机学院,51,计算每个同学的平均成绩并且输出数组中各元素的地址和内容 #include “stdio.h“ #define SIZE 2 void main(void) int xSIZESIZE+1; int i,j; for(i=0;iSIZE;i+) for(j=0;jSIZE;j+) scanf(“%d“,例8.26 用二维数组表示学号-课程成绩表,输入如下: 85 91 82 95,2019/9/1,华中科技大学计算机学院,52,例8.26 用二维数组表示

39、学号-课程成绩表,for(i=0;iSIZE;i+) for(j=0;jSIZE+1;j+) printf(“%ptx%d%d=%dt“, 程序的运行结果为: FFD0 x00=85 FFD2 x01=91 FFD4 x02=88 FFD6 x10=82 FFD8 x11=95 FFDA x12=88,2019/9/1,华中科技大学计算机学院,53,8.5.2 多维数组的存储结构,二维数组x的逻辑存储结构,二维数组x的物理存储结构,2019/9/1,华中科技大学计算机学院,54,8.5.3 多维数组的初始化,按照物理存储结构的顺序 int a22=85,91,82,95; 按照逻辑存储结构的顺

40、序 可读性好,但初值表的形式与数组的维数有关 int x23= 85,91,0,82,95,0; int d222=1,2,3,4,5,6,7,8; 注意 当数组的初值全部给出时,第1维大小的说明可以省略 int x 3= 85,91,0,82,95,0; int d 22=1,2,3,4,5,6,7,8; 其它维大小不能省略,2019/9/1,华中科技大学计算机学院,55,8.5.4 二维字符数组,二维字符数组 与其它二维数组类似 用char说明的二维数组 char text2580; 初始化 与其它二维数组类似 char s24= a,b,c,0,d,e,f,0; char s24=a,b

41、,c,0,d,e,f,0; 用字符串对二维数组进行初始化 char devices312=“hard disk”,”CRT”,”keyboard”; 省略第1维的方式 char devices 12=“hard disk”,”CRT”,”keyboard”;,2019/9/1,华中科技大学计算机学院,56,二维字符数组的使用,引用单个字符元素 weekendij =m; 引用字符串 weekendi表示weekend数组中第i行字符串的首地址 printf(“%s”,weekendi);,2019/9/1,华中科技大学计算机学院,57,例8.27 字符串数组的输入输出操作,#include “

42、stdio.h“ void main(void) int i; char devices312=“hard disk“, “CRT“, “keyboard“; devices00= H; /* “hard disk“变为“Hard disk“*/ devices20= K; /* “keyboard “变为“Keyboard “*/ for(i=0;i3;i+) printf(“%sn“, ,2019/9/1,华中科技大学计算机学院,58,*8.6 数组的应用程序设计,8.6.1 矩阵乘法运算 算法 定义3个2维数组 通过三重循环来实现 外层循环用于控制乘积矩阵C的行 中间层循环用于控制乘积矩

43、阵C的列 内层循环用于计算乘积矩阵元素Cij,2019/9/1,华中科技大学计算机学院,59,例8.28 矩阵的乘法运算,#include “stdio.h“ #define N 3 #define K 4 #define M 3 void mul_matrix(int aK, int bM, int cM, int n, int k, int m) int i, j, p, sum; for(i=0;in;i+) for(j=0;jm;j+) sum=0; for(p=0;pk;p+) sum+=aip*bpj; cij=sum; ,2019/9/1,华中科技大学计算机学院,60,例8.28

44、 矩阵的乘法运算,void main(void) int ANK=1,2,3,4,5,6,7,8,9,0,1,2; int BKM=1,2,3,4,5,6,7,8,9,0,1,2; int CNM; int i,j; mul_matrix(A,B,C,N,K,M); for(i=0;iN;i+) for(j=0;jM;j+) printf(“%8d “,Cij); printf(“n“); ,程序的运行结果为: 30 40 50 78 104 130 16 28 40,2019/9/1,华中科技大学计算机学院,61,8.6.2 基于分治策略的二分查找函数,二分查找算法的思路 将已排好序的n个元

45、素数组a分成两半,取an/2与x比较 如果x=an/2,则找到x,算法结束 如果xan/2,则在数组a的后半部分继续查找x 返回值 如果找到x,返回该数所在单元的下标 如果没有找到,返回-1,2019/9/1,华中科技大学计算机学院,62,例8.29 二分查找函数,#include “stdio.h“ int BinarySearch(int a,int x,int n) int front=0, back=n-1, middle; while(frontamiddle) front=middle+1; /*查找单元变成原来的后半部*/ else return (middle); /* 找到,返回下标 */ return -1; /* 没有找到,返回-1 */,2019/9/1,华中科技大学计算机学院,63,例8.29 二分查找函数,void main(void) int x=1,3,5,7,9,11,13,15

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

当前位置:首页 > 其他


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