《C语言一维数组的定义和引用数组.pptx》由会员分享,可在线阅读,更多相关《C语言一维数组的定义和引用数组.pptx(47页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、会计学1C语言语言 一维数组的定义一维数组的定义(dngy)和引用和引用 数数组组第一页,共47页。2.2.数组名后是用数组名后是用 括起来的是常量表达式括起来的是常量表达式 包括:整、字符、符号常量表达式。包括:整、字符、符号常量表达式。如:如:int a2+3,b5,ca,_d8,int a2+3,b5,ca,_d8,xyz#(#=35)xyz#(#=35)#define N 5#define N 5 main()int aN;printf(“%dn”,a1=100);main()int aN;printf(“%dn”,a1=100);而:而:int a(10),bx,%5,83,x-y5
2、0,5x100 int a(10),bx,%5,83,x-y50,5x100 是否正确?是否正确?又如:又如:int i=5;int a5+i int i=5;int a5+i 是否正确性?是否正确性?3.3.数组的长度数组的长度 int a5 a0,a1,a2,a3,a4 int a5 a0,a1,a2,a3,a4 5 5个元素个元素 ,下标从,下标从0 4 0 4 注意:注意:在在Turbo C Turbo C 中超过中超过(chogu)(chogu)定义的数组下标元素是可以定义的数组下标元素是可以引用的,系统不作检查。引用的,系统不作检查。第1页/共47页第二页,共47页。例例T7-0-
3、1.c T7-0-1.c main()main()int i,a5;int i,a5;for(i=0;i=4;i+)for(i=0;i=4;i+)printf(“a%d=%d n”,i,ai=i+1);printf(“a%d=%d n”,i,ai=i+1);printf(“a5=%dt”,a5);printf(“a5=%dt”,a5);printf(“a6=%d n”,a6);printf(“a6=%d n”,a6);运行运行(ynxng)结果:结果:a0=1 a1=2 a2=3 a3=4 a4=5 a5=-30 a6=285第2页/共47页第三页,共47页。4.4.数组大小的定义只能数组大小
4、的定义只能(zh nn)(zh nn)是常量,是常量,而不能是变量或动态地定义。而不能是变量或动态地定义。例例7-0-2.C 7-0-2.C main()main()int n=5,an;int n=5,an;a1=100;a1=100;printf(“a1=%dn”,a1);printf(“a1=%dn”,a1);编译指出:编译指出:constant expression constant expression required in function main required in function main(主函数(主函数中要求常量表达式)中要求常量表达式)第3页/共47页第四页,共4
5、7页。7.1.2 一维数组元素的引用一维数组元素的引用引用规则:引用规则:1.先定义,后使用。先定义,后使用。2.引用形式:数组名引用形式:数组名下标下标 下标可以是下标可以是整、字符整、字符 型的常量、变量或表达式。型的常量、变量或表达式。3.引用方法:针对元素而不是引用方法:针对元素而不是(b shi)整个整个数组。数组。如:如:a0=ab-a+a b-96+a3-a2*2 例例T7-1.C 对数组对数组a 顺序赋值,逆序输出顺序赋值,逆序输出 main()int a5,i;for(i=0;i=0;i-)printf(“a%d=%dn”,i,ai);运行运行(ynxng)结果:结果:a4=
6、4 a3=3 a2=2 a1=1 a0=001234a0a1a2a3a4第4页/共47页第五页,共47页。7.1.3 7.1.3 一维数组的初始化一维数组的初始化 实现的方法有:实现的方法有:1.1.定义时对数组元素初始化定义时对数组元素初始化 如如:int a5=1,2,3,4,5;:int a5=1,2,3,4,5;2.2.只给部分元素赋值只给部分元素赋值 如:如:int a5=1,3,5;int a5=1,3,5;3.3.初始化时给全部元素赋初始化时给全部元素赋0 0值值 如:如:int a5=0,0,0,0,0;int a5=0,0,0,0,0;或或 int a5=0;int a5=0
7、;4.4.对全部元素赋初值时可以不指出长度对全部元素赋初值时可以不指出长度(chngd)(chngd)如:如:int a5=2,4,6,8,10;int a5=2,4,6,8,10;或或 int a =2,4,6,8,10;int a =2,4,6,8,10;效果一样。效果一样。第5页/共47页第六页,共47页。例例T7-1-1.c T7-1-1.c 定义时对数组元素初始化定义时对数组元素初始化 main()main()int i;int i;int a5=2,4,6,8,10;int a5=2,4,6,8,10;for(i=0;i=4;i+)for(i=0;i=4;i+)printf(“%d
8、n”,ai);printf(“%dn”,ai);注意:注意:static static 存储类别存储类别(libi)(libi),这和新,这和新ANSIANSI新标准一致,新标准一致,若采用若采用staticstatic,数组元素的值被存储在静态,数组元素的值被存储在静态区。区。运行运行(ynxng)结果:结果:2 4 6 8 10第6页/共47页第七页,共47页。7.1.4 7.1.4 一维数组程序举例一维数组程序举例(j l)(j l)例例T7-2.c T7-2.c 求求Fibonacci Fibonacci 数列问题数列问题 关于菲波那契算法:头两个数各为关于菲波那契算法:头两个数各为1
9、 1,以后的每个数皆为前两个数之和。以后的每个数皆为前两个数之和。main()main()int i;int i;int f20=1,1;int f20=1,1;for(i=2;i20;i+)fi=fi-2+fi-1;for(i=2;i20;i+)fi=fi-2+fi-1;for(i=0;i20;i+)for(i=0;i20;i+)if(i%5=0)printf(“n”);if(i%5=0)printf(“n”);printf(“%12d”,fi;printf(“%12d”,fi;i fi=fi-2+fi-1 2 f2=f1+f0=2 3 f3=f2+f1=3 4 f4=f3+f2=5 5 f
10、5=f4+f3=8 6 f6=f5+f4=13 7f7=f6+f5=21 运行运行(ynxng)结果:结果:1 1 2 3 5 8 13 21 34 55 144 233 377 610 987 1597 2584 4181 6765第7页/共47页第八页,共47页。例例T7-3.c 用起泡用起泡(q po)法对法对6个数排序个数排序(由小到大由小到大)思路思路:将相邻两数两两比较将相邻两数两两比较(bjio),若小则调到前头若小则调到前头,不小也要比较不小也要比较(bjio)第一轮大数第一轮大数(d sh)沉底沉底 第二轮第二轮 第三轮第三轮 第四轮第四轮 第五轮第五轮 此处:此处:n=6
11、外层循环外层循环j(1n-1)次次 内层循环内层循环i(1n-j)次次9 8 8 8 8 8 8 9 5 5 5 5 5 5 9 4 4 4 4 4 4 9 2 2 2 2 2 2 9 0 0 0 0 0 0 98 5 5 5 5 5 8 4 4 4 4 4 8 2 2 2 2 2 8 0 0 0 0 0 85 4 4 4 4 5 2 2 2 2 5 0 0 0 0 54 2 2 2 4 0 0 0 42 0 0 2第8页/共47页第九页,共47页。第9页/共47页第十页,共47页。main()int a7;int i,j,t;printf(“input 6 numbers:n”);for(i
12、=1;i7;i+)scanf(“%d”,&ai;printf(“n”);for(j=1;j=5;j+)for(i=1;iai+1)t=ai;ai=ai+1;ai+1=t;printf(“the sorted numbers:n”);for(i=1;i7;i+)printf(“%d _ _”,ai);运行运行(ynxng):input 6 numbers:输入:输入:9 8 5 4 2 0 输出:输出:0 2 4 5 8 9985420 xa0a1a2a3a4a5a6第10页/共47页第十一页,共47页。第11页/共47页第十二页,共47页。7.2 7.2 二维数组的定义和引用二维数组的定义和引
13、用 7.2.1 7.2.1 二维数组的定义二维数组的定义 1.1.一般形式:类型说明符一般形式:类型说明符 数组名数组名 常量表达式常量表达式常量常量表达式表达式 如:如:float a34 float a34 定义数组定义数组a a具有三行四列具有三行四列 在在C C中,可将二维数组看着是特殊形式的一维数组。中,可将二维数组看着是特殊形式的一维数组。如上述定义可看着是具有三个元素如上述定义可看着是具有三个元素(yun s)(yun s)的一的一维数组,而每个元素维数组,而每个元素(yun s)(yun s)又可看作是包含四个又可看作是包含四个元素元素(yun s)(yun s)的一维数组。的
14、一维数组。因此,上述定义相当于:因此,上述定义相当于:float a04,a14,a24 float a04,a14,a24 注注 :实际应用时若如此定义则被认为是重定义。:实际应用时若如此定义则被认为是重定义。2.2.二维数组各个元素二维数组各个元素(yun s)(yun s)在内存中的存放顺序在内存中的存放顺序是:是:按先行后列的顺序依次存放按先行后列的顺序依次存放第12页/共47页第十三页,共47页。例例T7-3-1.c main()int i,j,a23;for(i=0;i2;i+)for(j=0;j3;j+)scanf(“%d”,&aij);for(i=0;i2;i+)for(j=0
15、;j3;j+)printf(“&a%d%d=%x ”,i,j,&aij);printf(“a%d%d=%d n”,i,j,aij);地址地址值值ffceffd0ffd2ffd4ffd6ffd81357911数组元素数组元素a00a01a02a10a11a12输入输入(shr):1 3 5 7 9 11输出:输出:&a00=ffce a00=1&a01=ffd0 a01=3&a02=ffd2 a02=5&a10=ffd4 a10=7&a11=ffc6 a11=9&a12=ffd8 a12=11第13页/共47页第十四页,共47页。注:从键盘给实型数组元素赋值时,应通过一中间变量进行注:从键盘给实
16、型数组元素赋值时,应通过一中间变量进行(jnxng),或采用其它办法实施。或采用其它办法实施。T7-3-2.c 实型数组从键盘赋值情况实型数组从键盘赋值情况 main()int i,j;float a23,k;for(i=0;i2;i+)for(j=0;j3;j+)scanf(%f,&k);aij=k;for(i=0;i2;i+)for(j=0;j3;j+)printf(&a%d%d=%x ,i,j,&aij);printf(a%d%d=%fn,i,j,aij);for(j=0;j3;j+)scanf(“%f%f”,&a0j,&a1j)第14页/共47页第十五页,共47页。3.3.多维数组的定
17、义和在内存中的存放顺多维数组的定义和在内存中的存放顺序:序:如如 int a234;int a234;共共2424个元素,在内存中排列的顺序个元素,在内存中排列的顺序是:第三维变化最快,然后是:第三维变化最快,然后(rnhu)(rnhu)是是第二维,第一维最慢。第二维,第一维最慢。第15页/共47页第十六页,共47页。7.2.2 7.2.2 二维数组的引用二维数组的引用 形式:数组名形式:数组名 下标下标下标下标 其中:下标是整型或字符型的常量,变量或表达其中:下标是整型或字符型的常量,变量或表达式。(定义时不能使用变量)式。(定义时不能使用变量)如:如:a12 a12 aij aij 1.1
18、.数组元素可出现在表达式中,如:数组元素可出现在表达式中,如:a12=a22/2 a12=a22/2 2.2.使用数组元素时,应注意不要使用数组元素时,应注意不要(byo)(byo)超出其定超出其定义的范围;义的范围;如:如:int a23;int a23;a23=5;a23=5;第16页/共47页第十七页,共47页。7.2.3 7.2.3 二维数组的初始化二维数组的初始化 1.1.按行给二维数组赋初值按行给二维数组赋初值 如:如:int int a23=1,2,3,4,5,6;a23=1,2,3,4,5,6;2.2.按数组元素排列的顺序按数组元素排列的顺序(shnx)(shnx)赋初值赋初值
19、 如:如:int int a23=1,2,3,4,5,6;a23=1,2,3,4,5,6;3.3.对部分元素赋初值,按行赋值对部分元素赋初值,按行赋值较直观较直观 如:如:int int a23=2,5,3;a23=2,5,3;1 2 3 a=4 5 6 1 2 3 a=4 5 6 2 5 0 a=3 0 0第17页/共47页第十八页,共47页。4.4.全部全部(qunb)(qunb)元素赋值时,第一维下标可省略元素赋值时,第一维下标可省略 如:如:int a 3=1,2,3,4,5,6;int a 3=1,2,3,4,5,6;又如:又如:int a 4=0,0,3,0,0,10;int a
20、4=0,0,3,0,0,10;1 2 3 a=4 5 6 0 0 3 0 a=0 0 0 0 0 10 0 0第18页/共47页第十九页,共47页。7.2.4 7.2.4 二维数组程序举例二维数组程序举例(j l)(j l)例例T7-4 T7-4 将一个二维数组的行和列元素互换,存将一个二维数组的行和列元素互换,存到另一个二维数组中到另一个二维数组中 。1 2 3 a=4 5 6 1 4 b=2 5 3 6第19页/共47页第二十页,共47页。T7-4.c两数组行列两数组行列(hng li)互换互换 main()int a23=1,2,3,4,5,6;int b32,i,j;printf(“a
21、rray a:n”);for(i=0;i=1;i+)for(j=0;j=2;j+)printf(“%4d”,aij);bji=aij;printf(n”);printf(“array b:n”);for(i=0;i=2;i+)for(j=0;j=1;j+)printf(“%4d”,bij);printf(“n”);i j bji aij 0 0 b00 a00=1 1 b10 a01=2 2 b20 a02=3 1 0 b01 a10=4 1 b11 a11=5 2 b21 a12=6运行结果:运行结果:array a:1 2 3 4 5 6 array b:1 4 2 5 3 6第20页/共
22、47页第二十一页,共47页。例例T7-5.c 有有3 4矩阵,求出其中矩阵,求出其中(qzhng)最大元素所在的行号和列最大元素所在的行号和列号号 main()int i,j,r=0,c=0,max;int a34=1,2,3,4,9,8,7,6,-10,10,-5,2;max=a00;for(i=0;i=2;i+)for(j=0;jmax)max=aij;r=i;c=j printf(“max=%d,row=%d,colum=%dn”,max,r,c);1 2 3 4 a=9 8 7 5 -10 10 -5 2 运行结果:运行结果:max=10,row=2,colum=1问题问题(wnt):
23、在比较前:在比较前 为什么要把为什么要把a00赋给赋给max?第21页/共47页第二十二页,共47页。i=02 j=03 比较比较aijmax 吗吗 0 0 a00max 1 a01max max 2,r=0,c=1 2 a02max max 3,r=0,c=2 3 a03max max 4,r=0,c=3 1 0 a10max max 9,r=1,c=0 1 a11max 2 a12max 3 a13max 2 0 a20max 1 a21max max 10,r=2,c=1 2 a22max 3 a23max 第22页/共47页第二十三页,共47页。7.3 7.3 字符数组字符数组 字符型
24、数组:用于存放字符型数据。字符型数组:用于存放字符型数据。一维字符数组:存放一个字符串(每个数一维字符数组:存放一个字符串(每个数组元素存放一个字符)组元素存放一个字符)二维字符数组:存放多个字符串(行数是字二维字符数组:存放多个字符串(行数是字符串的个数)符串的个数)7.3.1 7.3.1 字符数组的定义字符数组的定义 形式形式(xngsh)(xngsh):char char 数组名数组名 常量表达式常量表达式 char char 数组名数组名 常量表达式常量表达式常量表常量表达式达式 常量表达式:整、字符、符号常量。常量表达式:整、字符、符号常量。例:例:char a5;char a5;a
25、0=C;a0=C;a1=H;a2=I;a1=H;a2=I;a3=N;a4=A;a3=N;a4=A;C CH HI IN NA Aa0a0a1a1a2a2a3a3a4a4 第23页/共47页第二十四页,共47页。7.3.2 7.3.2 字符数组的初始化字符数组的初始化 如:如:char a5=C,H,I,N,char a5=C,H,I,N,A;A;char b5=C,H,I,N,char b5=C,H,I,N,W,U;W,U;编译时将指出:初始化值太多编译时将指出:初始化值太多 char c5=C,H,I;char c5=C,H,I;char d =C,H,I,N,char d =C,H,I,N
26、,A A 系统自动确认系统自动确认(qurn)(qurn)其长度为其长度为5 5C H I 0 0第24页/共47页第二十五页,共47页。7.3.3 7.3.3 字符字符(z f)(z f)数组的引用数组的引用 例例T7-6.c T7-6.c 输出一个字符输出一个字符(z f)(z f)串串main()main()char c10=I,_,a,char c10=I,_,a,m,_,h,a,p,m,_,h,a,p,p,y;p,y;int i;int i;for(i=0;i10;i+)printf(“%c”,ci);for(i=0;i10;i+)printf(“%c”,ci);print(“n”)
27、;print(“n”);运行运行(ynxng)(ynxng)结果:结果:I_am_happyI_am_happy第25页/共47页第二十六页,共47页。T7-7.CT7-7.C输出输出(shch)(shch)一个钻石图一个钻石图 main()main()char diamond5=,*,char diamond5=,*,*,*,*,*,*,*,*,*,*,*,*,*;,*,*;int i;int j;int i;int j;for(i=0;i5;i+)for(i=0;i5;i+)for(j=0;j5;j+)for(j=0;j5;j+)printf(%c,diamondij);printf(%c
28、,diamondij);printf(n);printf(n);第26页/共47页第二十七页,共47页。7.3.4 7.3.4 字符串和字符串结束标志字符串和字符串结束标志(biozh)(biozh)几点说明:几点说明:(1 1)字符串:用双引号括起的若干字符,可)字符串:用双引号括起的若干字符,可将其存放在一维或两维字符型数组中。将其存放在一维或两维字符型数组中。(2 2)字符串结束标志)字符串结束标志(biozh)(biozh)为:为:0 0 (既无动作既无动作,又不显示又不显示)(3 3)字符串的长度:第一个)字符串的长度:第一个 0 0以前字符以前字符的个数的个数 第27页/共47页第
29、二十八页,共47页。(4 4)在字符型数组或字符串中遇)在字符型数组或字符串中遇 0 0,即认为该字符结束;,即认为该字符结束;(5 5)字符串可对字符型数组初始化)字符串可对字符型数组初始化 如:如:char c =“I_am_happy”;char c =“I_am_happy”;系统自动系统自动(zdng)(zdng)在数组的最后加了在数组的最后加了 0 0,长度为,长度为1111 或或char c =“I_am_happy”;char c =“I_am_happy”;系统自动系统自动(zdng)(zdng)在数组的最后加了在数组的最后加了 0 0,长度为,长度为1111第28页/共47
30、页第二十九页,共47页。相当于相当于 c =I c =I,_,aa,mm,_,hh,aa,pp,pp,yy,0;0;而而 char c10=“CHINA”char c10=“CHINA”注意:字符注意:字符 0 0 并不一定都在字符数组的后面并不一定都在字符数组的后面(hu(hu mian)mian),输出时遇到第一个,输出时遇到第一个 0 0 结束;结束;例例T7-7-1.c T7-7-1.c main()main()char a =a,b,0,1,char a =a,b,0,1,2;2;char b =“ab 0cd”;char b =“ab 0cd”;printf(“%s n%s n”,
31、a,b);printf(“%s n%s n”,a,b);C H I N A 0 0 0 0 0运行运行(ynxng)结果:结果:a b a b第29页/共47页第三十页,共47页。7.3.5 7.3.5 字符字符(z f)(z f)数组的输入输出数组的输入输出 1.1.字符字符(z f)(z f)数组的输出:数组的输出:%c:%c:输出一个字符输出一个字符 以数组元素以数组元素格式:格式:%s:%s:输出一个字符串输出一个字符串 以数组名以数组名第30页/共47页第三十一页,共47页。例例T7-7-2.c main()int i;char a10=“CHINA”;char b18=“CHINA
32、 0CHINA 0CHINA”;for(i=0;i10;i+)printf(“%c”,ai);printf(“n”);printf(“%s n”,a);for(i=0;i 1 串串2 2 返回值为正数返回值为正数 其值是其值是AsciiAscii码的差值码的差值 (3)(3)串串1 1 串串2 2 返回值为负数返回值为负数 其值也是其值也是AsciiAscii码的差值码的差值第41页/共47页第四十二页,共47页。例例T7-7-8.c main()int i,j,k;char a1 =“wuhan”,a2 =“beijing”;i=strcmp(a1,a2);j=strcmp(“china”,
33、“korea”);k=strcmp(a2,“beijing”);printf(“i=%d nj=%d nk=%d n”,i,j,k);注意注意(zh y):两字符串比较不能用:两字符串比较不能用“=”运算符,运算符,虽然编译无虽然编译无错,但结果不对错,但结果不对 运行运行(ynxng)结果:结果:i=21 i=w-b=119-98=21 j=-8 j=c-k=99-107=-8 k=0 k=b-b=98-98=0第42页/共47页第四十三页,共47页。6.求字符串长度函数求字符串长度函数(hnsh)形式:形式:strlen(字符数组字符数组)功能:检测字符串长度,返回字符串长度值,不包括功能
34、:检测字符串长度,返回字符串长度值,不包括 0;例例T7-7-9.c main()char a110=“china”;printf(“%d n”,strlen(a1);printf(“%d n”,strlen(“beijing 0wuhan”);运行运行(ynxng)结果:结果:5 7第43页/共47页第四十四页,共47页。7.大大 小写字母转换小写字母转换(zhunhun)函数:函数:strlwr(字符串)字符串)8.小小 大写字母转换大写字母转换(zhunhun)函数:函数:strupr(字符串)字符串)例例T7-7-10.c main()char a16=“CHinA”,a2=“wuHA
35、n”;printf(“%s n”,strlwr(a1);printf(“%s n”,strupr(a2);运行运行(ynxng)结果:结果:china WUHAN 第44页/共47页第四十五页,共47页。7.3.7 字符数组应用举例字符数组应用举例 例例T7-8.c 输入一行字符,统计单词输入一行字符,统计单词(dnc)数,数,单词单词(dnc)间用间用_ 分隔。分隔。main()char s81;int i,n=0,w=0;char c;gets(s);for(i=0;(c=si)!=0;i+)if(c=_)w=0;else if(w=0)w=1;n+;printf(“There_are_%
36、d words_in_the_line n”,n);I-ama-boy0.s0s1s2s3s4s5s6s7s8s9s10s11输入输入(shr):I_am_a_boy.输出:输出:There_are_4_word_in_the_line其中其中(qzhng):n:统计单词数统计单词数 w:单词标志单词标志,在单词中在单词中 为为1,出了单词为出了单词为 0 i:11第45页/共47页第四十六页,共47页。i c w n 0 I 1 1 1 _ 0 2 a 1 2 3 m 4 _ 0 5 a 1 3 6 _ 0 7 b 1 4 8 o 9 y 10 .11 0第46页/共47页第四十七页,共47页。