C语言程序设计第8章数组课件

PPT
  • 阅读 41 次
  • 下载 0 次
  • 页数 65 页
  • 大小 602.535 KB
  • 2022-11-24 上传
  • 收藏
  • 违规举报
  • © 版权认领
下载文档30.00 元 加入VIP免费下载
此文档由【小橙橙】提供上传,收益归文档提供者,本网站只提供存储服务。若此文档侵犯了您的版权,欢迎进行违规举报版权认领
C语言程序设计第8章数组课件
可在后台配置第一页与第二页中间广告代码
C语言程序设计第8章数组课件
可在后台配置第二页与第三页中间广告代码
C语言程序设计第8章数组课件
可在后台配置第三页与第四页中间广告代码
C语言程序设计第8章数组课件
C语言程序设计第8章数组课件
还剩10页未读,继续阅读
【这是免费文档,您可以免费阅读】
/ 65
  • 收藏
  • 违规举报
  • © 版权认领
下载文档30.00 元 加入VIP免费下载
文本内容

【文档说明】C语言程序设计第8章数组课件.ppt,共(65)页,602.535 KB,由小橙橙上传

转载请保留链接:https://www.ichengzhen.cn/view-44492.html

以下为本文档部分文字说明:

2022/11/24华中科技大学计算机学院1C语言程序设计第8章数组一维数组的声明、初始化和使用数组的运算、作为函数参数的使用字符串、多维数组2022/11/24华中科技大学计算机学院28.1数组概述程序=算法+数据结构PASCAL程序设计语言发明者Nik

lausWirth曾经说过简单数据类型的变量仅能描述一个单独的数据描述能力十分有限如何描述一群有联系的数据集合?数组属于构造类型是相同数据类型数据的集合元素组成数组的这些数据任何类型(简单类型、构造类型)2022/11/24华中科技大学计算机学院38.1数

组概述数组特点其所有元素数目固定其所有元素类型相同其所有元素顺序存放数组作用集中管理将相关的同类型数据集中用一个标识符(数组名)表示元素顺序存放,但可随机定位用若干个数字序号(下标)来区别各数组元素例如定义floatscore[30],可

表述30位学生成绩用数组具有什么好处?2022/11/24华中科技大学计算机学院48.1数组概述问题计算全班30位同学某门课程的平均成绩解决方法设置30个float型变量来记录成绩设置一个有30个float型元素的数组来记录成绩问题分析参与运算的平均成绩,

其数据类型都相同(符合数组特点)30位同学属于一个班,用数组可把30个成绩表示成一个整体用数组的优点便于循环处理提高效率,便于书写、检查、修改(对海量数据效果更明显)2022/11/24华中科技大学计算机学院58.2一维数组维数标识

一个数组元素所需要使用的下标的个数一维数组只有一个下标可用于表示一个线性的数据队列使用数组的要求先声明数组对它进行初始化,然后才能使用2022/11/24华中科技大学计算机学院68.2.1一维数组的声明要解决三个问题确定数组的数据类型给

数组定义一个名字,以便在程序中使用指明数组的大小,即数组中元素的个数声明形式[存储类型说明符][类型修饰符]类型说明符数组名[常量表达式]={初值表};存储类型说明符:extern、static类

型修饰符:const、volatile数组名:是一个标识符,是一个地址常量,用以表示数组中打头元素的地址2022/11/24华中科技大学计算机学院78.2.1一维数组的声明例8.1具有基本数据类型的一维数组的声

明#defineSIZE10intarray[5];doubled[5],e[SIZE];charname[SIZE*5];错误例子unsignedintsize;charstr[size],buffer[2*size];

错误原因数组的大小一经说明就不能改变长度说明不是常量表达式,在编译之前就必须明确确定2022/11/24华中科技大学计算机学院88.2.1一维数组的声明例8.2采用类型修饰符的一维数组的声明staticinty[10];数组y中的每一

个成员都是静态整型成员externdoubles[2];作了一个外部双精度型数组的引用性声明应该在另外的源文件中通过doubles[2];来定义s数组,这样第2个声明语句才有意义2022/11/24华中科技大学计算机学院98.2.

2一维数组的使用C提供的各种操作符针对基本数据类型的变量数组是构造数据类型但其元素是基本数据类型的变量访问数组不需设计专门的数组操作符方法:数组名[下标表达式]例inta[5],j=2;5个元素依次是a[0],a[1],a[2],a[3],a[4]

a[j+2]、a[++j]、a[j--]、a[5*j-7]错误写法:a[j-3]、a[2*j+1]2022/11/24华中科技大学计算机学院10例8.3使用一维数组计算学生的平均成绩。1.#inclu

de〞stdio.h〞2.voidmain(void)3.{4.intscore[30],i,sum=0;5.doubleaverage;6.printf("inputthescoresplease:\n");7.for(i=0;i<30;i++)8.s

canf(“%d”,&score[i]);/*将键盘输入的成绩赋给各个数组元素*/9.for(i=0;i<30;i++)10.sum+=score[i];/*求学生成绩的累加和*/11.average=sum/30.0;/*计算平均成绩*/12.prin

tf("sum=%d\n",sum);13.printf("average=%lf\n",average);14.}2022/11/24华中科技大学计算机学院118.2.3一维数组的初始化显式初始化值的个数与说明长度相同i

ntx[5]={0,1,2,3,4};inty[5]={0,1,2,3,4,5};错误:初值个数大于数组长度有初始化值时,长度说明可缺省数组长度由初值个数确定inty[]={1,2,3,4,5,6,7,8};初始化值的个数可以小于说明长度,但只

能缺省最后连续元素的初值intz[10]={0,1,2,3,4};/*前5个下标变量赋值*/intu[9]={,1,,,2};错误:缺省u[0],u[2]不是最后连续元素2022/11/24华中科技大学计算机学院12例8.8观察局部数

组、静态数组和外部数组的缺省初值的程序1.#include"stdio.h"2.doubles[2];3.voidmain(void)4.{5.inta[2],i;6.staticintb[2];7.for(i=0;i<2;i++){8.printf("s[%d]=%d\

n",i,s[i]);9.printf("a[%d]=%d\n",i,a[i]);10.printf("b[%d]=%d\n",i,b[i]);11.}12.}程序的运行结果如下:s[0]=0,a[0]

=64,b[0]=0s[1]=0,a[1]=3129,b[1]=0结论:外部数组s和静态数组b的元素的缺省初值都是0局部数组a的初值则是随机的2022/11/24华中科技大学计算机学院138.2.4一维数组的存储结构存放方法各个

元素从数组名标明的起始地址开始在内存中连续存放例如inta[5];这里是16位机,1个int变量占2个字节空间数组元素a[0]a[1]a[2]a[3]a[4]元素地址a+0a+1a+2a+3a+4&a[0]&a[1

]&a[2]&a[3]&a[4]2022/11/24华中科技大学计算机学院14例8.9观察一维数组的存储情况的程序1.#include"stdio.h"2.#defineSIZE33.voidmain(void)4.{5.intx[SIZ

E]={1,3,5},k;6.chars[SIZE+1]="ABC";7.floatf[SIZE]={1.414,3.1415,5.25};8.printf("thevalueofxis0x%x\n",x);9.for(k=0;k<SIZE;k++)10.printf("x

[%d]=%d\taddr=0x%x\n",x[k],&x[k]);程序运行结果如下:thevalueofxis0xffc8x[0]=1addr=0xffc8x[1]=3addr=0xffcax[2]=5addr=0

xffcc2022/11/24华中科技大学计算机学院15例8.9观察一维数组的存储情况的程序11.k=0;12.printf("\nthevalueofsis0x%x\n",x);13.while(s[k])14.printf("s[%d]=%c\ta

ddr=0x%x\n",s[k],&s[k]),k++;15.printf("s[%d]+X=%c\taddr=0x%x\n",s[k]+'X',&s[k]);16.printf("\nthevalueoffis0x%x\n",f);17.for(k=0;k<

SIZE;k++)18.printf("f[%d]=%f\taddr=0x%x\n",f[k],&f[k]);19.}程序运行结果如下:thevalueofsis0xffces[0]=Aaddr=0xffces[

1]=Baddr=0xffcfs[2]=Caddr=0xffd0s[3]+X=Xaddr=0xffd1thevalueoffis0xffd2f[0]=1.414000addr=0xffd2f[1]=3.141

500addr=0xffd6f[2]=5.250000addr=0xffda2022/11/24华中科技大学计算机学院168.2.5一维数组的运算C提供的各种操作符赋值运算、各种算术运算、++、--针对基本数据类型的变量可针对int、float

、以及double类型数组中元素合法操作intx[3]={1,2,3},y[3]={4,5,6},z[3],k=1;z[0]=x[0]+y[0];z[1]=x[0]+y[3];z[k]=++x[0]+--y[k++];z[1]=x[0]+y[x[

1]];不允许两个数组直接相加z=x+y;编译时给出提示“cannotaddtwopointers”2022/11/24华中科技大学计算机学院17数组的直接相加例8.10设5个同学修了高等数学﹑普通物理、程序设计语言

并取得了成绩,现计算三门课总分、平均分,每门课的总分、平均分,每个同学的总分、平均分1.#include"stdio.h"2.#defineSIZE53.voidmain(void)4.{5.intmath[SIZE]={91,6

7,88,78,81};6.intphysics[SIZE]={87,79,81,86,67};7.intprogramming[SIZE]={86,81,85,92,87};/*3个数组依次存放数学、物理、程序

设计的成绩*/2022/11/24华中科技大学计算机学院18例8.108.intcourse_sum[3]={0,0,0};9.doublecourse_even[3];/*分别为各门课程总分、平均分数组*/10.i

ntstudent_sum[5]={0,0,0,0,0};11.doublestudent_even[5];/*分别为各位同学总分、平均分数组*/12.intsum=0;13.doubleeven;/*分别为全部课程的总分、平均分*/14.inti;15.for(i=0;

i<5;i++){16.course_sum[0]+=math[i];17.course_sum[1]+=physics[i];18.course_sum[2]+=programming[i];19.}/*计算各门课程的总分

*/20.for(i=0;i<3;i++){21.course_even[i]=course_sum[i]/5.0;22.sum+=course_sum[i];23.}/*计算各门课平总分*/24.even=sum/(3.0*SIZE);/*计算全部课程的平均分*/2022/11/24

华中科技大学计算机学院19例8.1025.for(i=0;i<5;i++){/*计算每个学生的总分、平均分*/26.student_sum[i]=math[i]+physics[i]+programming[i];27.student_eve

n[i]=student_sum[i]/3.0;28.}29.printf("三门课程的总分:%d\n",sum);30.printf("三门课程的平均分:%lf\n",even);程序的运行结果如下三门课程的总分:

1236三门课程的平均分:82.4000002022/11/24华中科技大学计算机学院20例8.1031.for(i=0;i<3;i++){32.printf("course_sum[%d]=%d\n",i,course_sum[i]);33.printf("course_

even[%d]=%lf\n",i,course_even[i]);34.}程序的运行结果如下course_sum[0]=405course_even[0]=81.000000course_sum[1]=400course_even[1]=80.000000course_su

m[2]=431course_even[2]=86.2000002022/11/24华中科技大学计算机学院21例8.1035.for(i=0;i<5;i++){36.printf("student_sum[%d]=%d\n",i,st

udent_sum[i]);37.printf("student_even[%d]=%lf\n",i,student_even[i]);38.}39.}程序的运行结果如下student_sum[0]=264student_even[0]=88.000000student_sum[1]=22

7student_even[1]=75.666667student_sum[2]=254student_even[2]=84.666667student_sum[3]=256student_even[3]=85.333333student_sum[4]=

235student_even[4]=78.3333332022/11/24华中科技大学计算机学院228.2.6一维数组作为函数参数参数的传递传值传地址数组作为函数参数采用的是参数传址传送的是数组的地址或传送数组元

素的地址还需传送数组元素的个数2022/11/24华中科技大学计算机学院23例8.11一维数组作为函数参数的例子12345xy1.#include"stdio.h"2.voidfun(inty[],intn);/*y是形式数组*/3.void

main(void)4.{intk,x[5]={1,2,3,4,5};5.……6.fun(x,3);7.……8.fun(&x[2],3);9.……}10.voidfun(inty[],intn)11.{……}子函数需给出形式数组的声明和形式数组中元素的个

数调用函数实参的值是数组x的起始地址参数传递2022/11/24华中科技大学计算机学院24例8.12对n个整数采用冒泡法对其排序分析输入n个数存放在一数组中,便于循环处理排序是将一个数据元素任意的序列按照一定的规则排列成为一个有序的序列1.voidbub

ble_sort(inta[],intn)2.{对a[n]表示的n个整数进行排序处理3.}4.main()5.{输入n个数;6.7.输出n个数检验排序效果8.}调用bubble_sortsort对n个数排序;2022/11/24华中科技大学计算机学院25例8.12冒泡排序a[0

]a[1]a[2]a[3]a[4]a[5]原始312512864261-1253112864261-2251231864261-3251231864261-4251231428661-525123142686第一遍从下标为0的元素开始,对两两相邻的元素进行比较

如果前一个元素大于后一个元素,就交换这两个元素的值循环n-1次比较在第一遍循环后不仅把最大整数移到数组最末尾(其下标为n-1)(像冒泡)还尽量把较大值往后挪,例如“31”还剩前面n-1个数需排序2022/11/24华中科技大学计算

机学院26例8.12冒泡排序a[0]a[1]a[2]a[3]a[4]a[5]1遍251231426862遍122531642863遍122563142864遍126253142865遍61225314286第2遍对前n-1个数,与第1遍一样循环处理还剩前n-2个数未

排序第i遍对前n-i+1个数,与第1遍一样循环处理还剩前n-i个数未排序大循环结束时机(对i)i>=n-1一遍循环中未发生交换,即已排好序2022/11/24华中科技大学计算机学院27例8.12冒泡

排序1.voidbubble_sort(inta[],intn)/*形参用形式数组a[]*/2.{3.inti,j,t,k;intflag=1;4.for(i=0;(i<n-1)&&flag;i++)*共进行n-

1轮"冒泡"*/5.{6.flag=0;7.for(j=0;j<n-i-1;j++)8.if(a[j]>a[j+1])/*对两两相邻的元素进行比较*/9.{t=a[j],a[j]=a[j+1],a[j+1]=t;

10.flag=1;11.}12.}13.}2022/11/24华中科技大学计算机学院288.3字符数组8.3.1字符数组的声明和使用字符数组元素的数据类型为char或wchar_t声明格式与前面讨论的一维数组相同chars[81

];字符串用一对双引号界定的一个字符序列C语言没有规定字符串类型用一个字符数组来存放字符序列,并且在末尾加一个空字符ˊ\0ˊ来构造字符串2022/11/24华中科技大学计算机学院298.3字符

数组字符串的存储字符串的长度字符串的长度=字符串的存储长度–1设计字符数组的最小长度应该等于该字符串的存储长度或字符数组的最小长度应该等于该字符串的长度加1字符数组的使用通过下标来访问字符数组中的具体字符元素ˊWˊˊuˊˊhˊˊaˊˊnˊˊ\0ˊ2022/11/24华中科技大学计

算机学院301.#include"stdio.h"2.voidmain(void)3.{charCapital[27],Lowercase[27];4.inti,delt=ˊaˊ-ˊAˊ;5.Capital[0]=ˊAˊ;6.Lowercase[0]=Capital[0]+del

t;7.for(i=1;i<26;i++){8.Capital[i]=Capital[i-1]+1;9.Lowercase[i]=Lowercase[i-1]+1;10.}11.Capital[26]=ˊ\0ˊ;Lower

case[26]=Capital[26];12.printf("%s\n",Capital);13.printf("%s\n",Lowercase);}例8.13产生大写和小写的26个英文字母字符串程序运行结果如下:ABCDEFGHIJKLMNOPQ

RSTUVWXYZabcdefghijklmnopqrstuvwxyz2022/11/24华中科技大学计算机学院318.3.2字符数组的初始化通过初始化列表chars1[8]={ˊWˊ,ˊuˊ,ˊhˊ,ˊaˊ,ˊnˊ,ˊ\0ˊ};ˊ\0ˊ必须

在初始化列表中显示给出用字符串初值chars2[28]=〞ComputerScience〞;末尾将自动加上一个ˊ\0ˊ第三种方法数组长度未明显给出chars3[]=〞ComputerEngineering〞;

字符数组的容量恰好等于字符串的存储长度2022/11/24华中科技大学计算机学院328.4字符串处理函数串操作函数求字符串长度字符串的拷贝字符串的比较字符串的连接求字符串的子串删除字符串首尾空白字符从字符串中

删除所有与给定字符相同的字符将字符串反转等函数2022/11/24华中科技大学计算机学院33例8.14求字符串长度的函数1.intstrlen(chars[])2.{3.intj=0;4.while(s[j]!=′\0′)j++;5.returnj;6.}7.voidmain(void)8.{9

.charstr[]="thereisaboatonthelake";10.intlength;11.length=strlen(str);12.printf("lengthofthestringis%d\n",length);13.}运行结果:lengthofthes

tringis282022/11/24华中科技大学计算机学院34例8.15字符串拷贝的函数1.voidstrcpy(chart[],chars[])2.{3.intj=0;4.while(t[j]=s[j++])5.;6.}7.voidmain(void)8.{9.charstr1[30],st

r2[]="thereisaboatonthelake.";10.strcpy(str1,str2);11.puts(str1);7.}运行结果:thereisaboatonthelake.2022/11/24华中科技大学计算机学院35例8.

16两个字符串比较函数比较规则从两个字符串的第一个字符起开始按照字符ASCII码值的大小进行比较返回规定当两个字符串相等时,返回0当第一个串大于第二个串时,返回一个大于零的值当第一个串小于第二个串时,返回一个小于零的值1.intstrcmp(chars

[],chart[])2.{3.intj=0;4.while(s[j]==t[j]&&s[j]!=′\0′)5.j++;6.returns[j]-t[j];7.}2022/11/24华中科技大学计算机学院36例8.

16两个字符串比较函数8.voidmain(void)9.{10.chars1[]="car",s2[]="bus",s3[]="truck",s4[]="car";11.printf("%sis%s%s.\n",s1,strcmp(s1,s2)>0?"

great12.then":strcmp(s1,s2)<0?"lessthen":"equalto",s2);13.printf("%sis%s%s.\n",s1,strcmp(s1,s3)>0?"great14.then":str

cmp(s1,s3)<0?"lessthen":"equalto",s3);15.printf("%sis%s%s.\n",s1,strcmp(s1,s4)>0?"great16.then":strcmp(s1,

s4)<0?"lessthen":"equalto",s4);17.}运行结果:carisgreatthenbus.carislessthentruck.carisequaltocar.2022/11/24华中科技大学计算机学院37例8.17字符串的连接函数1.char*strcat(

chart[],chars[])2.{intj=0,k=0;3.while(t[j++]!=′\0′)4.;5.j--;6.while((t[j++]=s[k++]));7.returnt;8.}9.voidmain(void)10.{11.chars1[80]="

Ilike",s2[]="theCprogramming.";12.strcat(s1,s2);13.printf("%s\n",s1);14.}运行结果:IliketheCprogramming.2022/11/24华中科技大学计算机学院38例8.1

8求字符串子串的函数1.intstrstr(charcs[],charct[])2.{intj=0,k;3.for(;cs[j]!=′\0′;j++)4.if(cs[j]==ct[0]){5.k=1;6.while(cs[j+k]

==ct[k]&&ct[k]!=′\0′)7.k++;8.if(k==strlen(ct))9.returnj;10.}11.return-1;}12.voidmain(void)13.{chars1[80]="Cist

hemostwidelyusedprogramminglanguage.",s2[]="use";14.inti,j=0;15.i=strstr(s1,s2);16.printf("thesub_string'sbeginni

ngpositionis%d\n",i);17.while(j<i)18.putchar(s1[j++]);19.putchar(ˊ\nˊ);20.while(putchar(s1[i++]))21.;22.putchar(′\

n′);}运行结果:thesub_string'sbeginningpositionis21Cisthemostwidelyusedprogramminglanguage.2022/11/24华中科技大学计算机学院39例8.19删

除字符串首尾空白字符的函数1.inttrim(chars[])2.{inti,num,j=0,k=0,L=strlen(s);3.while(s[j]==′′||s[j]==′\t′||s[j]==′\n′||s[j]==′\r′)4.j++;/*j计算首部空白字

符的个数*/5.i=L-1;/*i为字符串最后一个字符(„\0‟前面)的下标*/6.while(s[i-k]==′′||s[i-k]==′\t′||s[i-k]==′\n′||s[i-k]==′\r′)7.k++;/*k计算尾部空白字符的

个数*/8.num=L-j-k;9.for(i=0;i<num;i++)10.s[i]=s[i+j];11.s[num]=′\0′;12.returnstrlen(s);}2022/11/24华中科技大学计算机学院40例8.20

从字符串s中删除所有与给定字符相同的字符从字符串s中去掉与字符变量c值相同的字符1.voiddelete_c(chars[],charc)2.{3.intj=0,k=0;/*j-读指示器,k-写指示器*/4.while(s[j]!=′\0′){5

.if(s[j]!=c)6.s[k++]=s[j];7.j++;8.}9.s[k]=′\0′;10.}2022/11/24华中科技大学计算机学院41例8.21将字符串反转的函数将一个字符串首尾颠倒过来如:将″abcde″颠倒为″edcba″

1.voidreverse(chars[])2.{3.intj,k;/*j-前指示器k-尾指示器*/4.charc;5.for(j=0,k=strlen(s)-1;j<k;j++,k--)6.c=s[j],s[j]=s[k],s[k]=c;7.}2022/11/24华中科技

大学计算机学院42上面三个函数的应用1.voidmain(void)2.{charstr[80]="atbtctdtetft";3.printf("beforetrim,thestringis\"%s\"\n",str

);4.trim(str);5.printf("aftertrim,thestringis\"%s\"\n",str);6.delete_c(str,ˊtˊ);7.printf("afterdelete't',the

stringis\"%s\"\n",str);8.reverse(str);9.printf("afterreverse,thestringis\"%s\"\n",str);}运行结果:beforetrim,thestringis"atbtctdt

etft"aftertrim,thestringis"atbtctdtetft"afterdeleteˊtˊ,thestringis"abcdef"afterreverse,thestringis"fedcba"2022/11/24华中科技大学计算

机学院438.4.2数字串与数之间转换的函数例8.22将一个十进制数字串转换成为对应的整数的函数atoi函数功能将s字符数组中存放的一个十进制数字串转换成为对应的整数,并返回该整数算法:ASCII码字符s[j]转换为对应数字s[j]-′0′本位乘以10加下一位的算法

54321=((((5)*10+4)*10+3)*10+2*10)+12022/11/24华中科技大学计算机学院44atoi函数1.#defineBASE102.intatoi(chars[])3.{4.intj=0,num=0;5.for(;s[j]!=′

\0′;j++)6.num=num*BASE+s[j]-′0′;7.returnnum;8.}2022/11/24华中科技大学计算机学院45例8.23将一个整数转换成为基数为BASE的数字串的函数1.#defineBASE102.voiditoa(intn,chars

[])3.{intsign,j=0;4.if((sign=n)<0)5.n=-n;6.while(n>0){7.s[j++]=n%BASE+′0′;8.n/=BASE;}9.if(sign<0)10.s[j++]=′-′;11.s[j]=′\0′;

12.reverse(s);}2022/11/24华中科技大学计算机学院46例8.24将一个十六进制数字串转换成为对应的整数的函数问题当基数BASE大于10,如:16,由于十六进制数的表示形式,如′a′

和′A′,′b′和′B′以及0到f或F在ASCII码表的编码不连续性因此需要在转换中进行一定的调整htoi函数将一个存放在字符数组s中的十六进制数字串转换成为对应的整数并且返回转换后的整数2022/11/24华中科技大学计算机学院47

htoi函数1.inthtoi(chars[])2.{intj=0,num=0;3.if(s[j]==„0‟&&(s[j+1]==„x‟||s[j+1]==„X‟))4.j+=2;5.else6.return-1;

7.for(;s[j]!=′\0′;j++){8.if(s[j]>=„0‟&&s[j]<=„9‟)num=num*16+s[j]-‟0‟;9.if(s[j]>=„a‟&&s[j]<=„f‟)num=num*16+s[j]-‟a‟+10;10.if(s[j]>=„A‟&&s[j]<=„F‟)n

um=num*16+s[j]-‟A‟+10;11.}12.returnnum;13.}2022/11/24华中科技大学计算机学院488.5多维数组语文数学010285829195实际应用有时需要用多个下标来实现对数组元素的访问例如张三同学,

学号为01,语文和数学成绩分别为85,91,李四同学,学号位02,语文和数学成绩分别为82,95解决方法用二维数组可以描述学号-课程成绩表中的成绩数据多维数组的用途二维数组可以描述数学中的矩阵或行列式三

维数组可以描述空间中的点集n维数组来描述n维线性空间中的n维向量2022/11/24华中科技大学计算机学院498.5.1多维数组的说明与使用形式类型说明数组名[常量表达式1][常量表达式2]…[常量表达式n]={初值表};类型说明:[存储类型

说明符][类型修饰符]数据类型例如,intx[2][2];对其元素的引用数组名[下标1][下标2]…[下标n]例如,x[1][0]=3;2022/11/24华中科技大学计算机学院50例8.25对二维数组中元素的访问与操作1.#include"stdio.h"2.voidmain

(void)3.{4.intx[2][3],a=2;5.x[0][2]=8;6.scanf("%d",&x[1][2]);7.x[1][1]=x[0][2];8.x[1][2]<<=a;/*将元素x[1][2]的内容左移2位*/9.printf("%d\n",x[1]

[2]);10.}2022/11/24华中科技大学计算机学院51计算每个同学的平均成绩并且输出数组中各元素的地址和内容1.#include"stdio.h"2.#defineSIZE23.voidmain(void)4.{intx[SIZE][SIZE+1];5.inti,j;6.for(i=0

;i<SIZE;i++){7.for(j=0;j<SIZE;j++)8.scanf("%d",&x[i][j]);9.x[i][SIZE]=(x[i][0]+x[i][1])/2;}10.printf("\n");例8.26用二维数组表示学号-课程成绩表输入如下:8591829

5语文数学0102858291952022/11/24华中科技大学计算机学院52例8.26用二维数组表示学号-课程成绩表11.for(i=0;i<SIZE;i++){12.for(j=0;j<SIZE+1;j++)13.printf("%

p\tx[%d][%d]=%d\t",&x[i][j],i,j,x[i][j]);14.printf("\n");15.}16.}程序的运行结果为:FFD0x[0][0]=85FFD2x[0][1]=

91FFD4x[0][2]=88FFD6x[1][0]=82FFD8x[1][1]=95FFDAx[1][2]=882022/11/24华中科技大学计算机学院538.5.2多维数组的存储结构x[0][0]=85x[0][1]=91x[0][2]=88x[1][

0]=82x[1][1]=95x[1][2]=88地址元素值0xFFD0x[0][0]850xFFD20xFFD40xFFD60xFFD80xFFDAx[0][1]x[0][2]x[1][0]x[1][1]x[1][2]9188829588二维数组x的逻辑存

储结构二维数组x的物理存储结构2022/11/24华中科技大学计算机学院548.5.3多维数组的初始化按照物理存储结构的顺序inta[2][2]={85,91,82,95};按照逻辑存储结构的顺序可读性好,但初值表的形式与数组的维数有关intx[2][3]={{85,91,0},{8

2,95,0}};intd[2][2][2]={{{1,2},{3,4}},{{5,6},{7,8}}};注意当数组的初值全部给出时,第1维大小的说明可以省略intx[][3]={{85,91,0},{82,95

,0}};intd[][2][2]={{{1,2},{3,4}},{{5,6},{7,8}}};其它维大小不能省略2022/11/24华中科技大学计算机学院558.5.4二维字符数组二维字符数组与其它二维数组类似用char说明的二维数组chartext

[25][80];初始化与其它二维数组类似chars[2][4]={„a‟,‟b‟,‟c‟,‟\0‟,‟d‟,‟e‟,‟f‟,‟\0‟};chars[2][4]={{„a‟,‟b‟,‟c‟,‟\0‟},{‟d‟,‟e

‟,‟f‟,‟\0‟}};用字符串对二维数组进行初始化chardevices[3][12]={“harddisk”,”CRT”,”keyboard”};省略第1维的方式chardevices[][12]={

“harddisk”,”CRT”,”keyboard”};2022/11/24华中科技大学计算机学院56二维字符数组的使用引用单个字符元素weekend[i][j]=m;引用字符串weekend[i]表示weeken

d数组中第i行字符串的首地址printf(“%s”,weekend[i]);2022/11/24华中科技大学计算机学院57例8.27字符串数组的输入输出操作1.#include"stdio.h"2.voidmain(vo

id)3.{4.inti;5.chardevices[3][12]={"harddisk","CRT","keyboard"};6.devices[0][0]=′H′;/*"harddisk"变为"Harddisk"*/7.devices[2][0]=′K′;/*

"keyboard"变为"Keyboard"*/8.for(i=0;i<3;i++)9.printf("%s\n",&devices[i][0]);10.scanf("%s",devices[1]);11.for(i=0;i<3;

i++)12.printf("%s\n",devices[i]);13.}2022/11/24华中科技大学计算机学院58*8.6数组的应用程序设计30323130222120121110

020100232221201312111003020100,,kkjikijbacBACbbbbbbbbbbbbBaaaaaaaaaaaaA其中8.6.1矩阵乘法运算算法定义3个2维数组通过三重循环来实现外层循环用于控制乘积矩阵C的行

中间层循环用于控制乘积矩阵C的列内层循环用于计算乘积矩阵元素Cij2022/11/24华中科技大学计算机学院59例8.28矩阵的乘法运算1.#include"stdio.h"2.#defineN33.#defineK44.#defineM35.vo

idmul_matrix(inta[][K],intb[][M],intc[][M],intn,intk,intm)6.{inti,j,p,sum;7.for(i=0;i<n;i++)8.for(j=0;j<m;j++){9.sum=0;10.for(p=0;p<k;p++)11.

sum+=a[i][p]*b[p][j];12.c[i][j]=sum;13.}14.}2022/11/24华中科技大学计算机学院60例8.28矩阵的乘法运算15.voidmain(void)16.{intA[N][K]={{1,2,3,4},{5,6,7,8},{9,0,1,2}};

17.intB[K][M]={{1,2,3},{4,5,6},{7,8,9},{0,1,2}};18.intC[N][M];inti,j;19.mul_matrix(A,B,C,N,K,M);20.for(i=0;

i<N;i++){21.for(j=0;j<M;j++)22.printf("%8d",C[i][j]);23.printf("\n");24.}}程序的运行结果为:304050781041301628402022/11/24华中科技大学计算机学院618.6.2基于分治策略的二分

查找函数二分查找算法的思路将已排好序的n个元素数组a分成两半,取a[n/2]与x比较如果x=a[n/2],则找到x,算法结束如果x<a[n/2],则在数组a的前半部分继续查找x如果x>a[n/2],则在数组a的后半部分继续查找x返回值如果找到x,返回该数所

在单元的下标如果没有找到,返回-12022/11/24华中科技大学计算机学院62例8.29二分查找函数1.#include"stdio.h"2.intBinarySearch(inta[],intx,intn)3.{intfront=0,bac

k=n-1,middle;4.while(front<=back){5.middle=(front+back)/2;/*计算中间单元的下标*/6.if(x<a[middle])7.back=middle-1;/*查找

单元变成原来的前半部*/8.elseif(x>a[middle])9.front=middle+1;/*查找单元变成原来的后半部*/10.else11.return(middle);/*找到,返回下标*/12.}13.retur

n-1;}/*没有找到,返回-1*/}2022/11/24华中科技大学计算机学院63例8.29二分查找函数14.voidmain(void)15.{16.intx[]={1,3,5,7,9,11,13,15,17,19},in

dex;17.index=BinarySearch(x,11,10);18.if(index!=-1)19.printf("find%d!\n",x[index]);20.else21.printf("notfind!\n");22.}程序的运行结果是:find11!2022/11/24华中科技

大学计算机学院648.6.3选择法排序122-2156789-1234假设有下面的8个整数构成的数组算法思想首先找出数组内8个元素中最小的元素然后将它与第一个元素(下标为0)交换再在剩余的后续7个元素中找出最小的元素

,再将它与第二个元素(下标为1)交换余以类推,直到在最后剩余的两个元素中找出较小者并将较大者放在最后(下标为7)为止2022/11/24华中科技大学计算机学院65例8.30用选择法进行排序1.#include"stdio.h"2.intf_small(inta

[],intbegin,intend)/*在begin与end之间找最小数*/3.{inti,p=begin;4.for(i=begin;i<=end;i++)5.if(a[i]<a[p])6.p=i;7.returnp;}8.voidsel_sort(inta[],intn)9

.{/*排序函数*/10.intcur,index,t;13.for(cur=0;cur<n-1;cur++)14.{index=f_small(a,cur,n-1);13.if(index!=cur)14.

t=a[cur],a[cur]=a[index],a[index]=t;}15.}16.voidmain(void)17.{intx[]={12,2,-21,5,67,89,-12,34},i,n;18.n=8;19.sel_sort(x,n);20.for(i=

0;i<8;i++)21.printf("%d",x[i]);22.printf("\n");23.}

小橙橙
小橙橙
文档分享,欢迎浏览!
  • 文档 25747
  • 被下载 7
  • 被收藏 0
相关资源
广告代码123
若发现您的权益受到侵害,请立即联系客服,我们会尽快为您处理。侵权客服QQ:395972555 (支持时间:9:00-21:00) 公众号
Powered by 太赞文库
×
确认删除?