C语言一维数组的定义和引用数组.ppt

上传人:牧羊曲112 文档编号:5426216 上传时间:2023-07-05 格式:PPT 页数:47 大小:238.50KB
返回 下载 相关 举报
C语言一维数组的定义和引用数组.ppt_第1页
第1页 / 共47页
C语言一维数组的定义和引用数组.ppt_第2页
第2页 / 共47页
C语言一维数组的定义和引用数组.ppt_第3页
第3页 / 共47页
C语言一维数组的定义和引用数组.ppt_第4页
第4页 / 共47页
C语言一维数组的定义和引用数组.ppt_第5页
第5页 / 共47页
点击查看更多>>
资源描述

《C语言一维数组的定义和引用数组.ppt》由会员分享,可在线阅读,更多相关《C语言一维数组的定义和引用数组.ppt(47页珍藏版)》请在三一办公上搜索。

1、第7章 数 组 数组:是构造类型,元素由基类型(整、实、字符)组成。它是有序的、同类型数据的集合。7.1 一维数组的定义和引用 7.1.1 一维数组的定义 形式:类型说明符 数组名常量表达式 如:int a5;float b10;说明:1.命名规则:数组名是由合法的标识符组成。,2.数组名后是用 括起来的是常量表达式 包括:整、字符、符号常量表达式。如:int a2+3,b5,ca,_d8,xyz#(#=35)#define N 5 main()int aN;printf(“%dn”,a1=100);而:int a(10),bx,%5,83,x-y50,5x100 是否正确?又如:int i=

2、5;int a5+i 是否正确性?3.数组的长度 int a5 a0,a1,a2,a3,a4 5个元素,下标从0 4 注意:在Turbo C 中超过定义的数组下标元素是可以引用的,系统不作检查。,例T7-0-1.c main()int i,a5;for(i=0;i=4;i+)printf(“a%d=%d n”,i,ai=i+1);printf(“a5=%dt”,a5);printf(“a6=%d n”,a6);,运行结果:a0=1 a1=2 a2=3 a3=4 a4=5 a5=-30 a6=285,4.数组大小的定义只能是常量,而不能是变量或动态地定义。例7-0-2.C main()int n

3、=5,an;a1=100;printf(“a1=%dn”,a1);编译指出:constant expression required in function main(主函数中要求常量表达式),7.1.2 一维数组元素的引用引用规则:1.先定义,后使用。2.引用形式:数组名下标 下标可以是整、字符 型的常量、变量或表达式。3.引用方法:针对元素而不是整个数组。如: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);,运行结果:a4=4 a3=3 a2

4、=2 a1=1 a0=0,7.1.3 一维数组的初始化 实现的方法有:1.定义时对数组元素初始化 如:int a5=1,2,3,4,5;2.只给部分元素赋值 如:int a5=1,3,5;3.初始化时给全部元素赋0值 如:int a5=0,0,0,0,0;或 int a5=0;4.对全部元素赋初值时可以不指出长度 如:int a5=2,4,6,8,10;或 int a=2,4,6,8,10;效果一样。,例T7-1-1.c 定义时对数组元素初始化 main()int i;int a5=2,4,6,8,10;for(i=0;i=4;i+)printf(“%dn”,ai);注意:static 存储类

5、别,这和新ANSI新标准一致,若采用static,数组元素的值被存储在静态区。,运行结果:2 4 6 8 10,7.1.4 一维数组程序举例 例T7-2.c 求Fibonacci 数列问题 关于菲波那契算法:头两个数各为1,以后的每个数皆为前两个数之和。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;,运行结果:1 1 2 3 5 8 13 21 34 55 144 233 377 610 987 1597 2584 4181 676

6、5,例T7-3.c 用起泡法对6个数排序(由小到大),思路:将相邻两数两两比较,若小则调到前头,不小也要比较,第一轮大数沉底 第二轮 第三轮 第四轮 第五轮,此处:n=6,外层循环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 9,8 5 5 5 5,5 8 4 4 4,4 4 8 2 2,2 2 2 8 0,0 0 0 0 8,5 4 4 4,4 5 2 2,2 2 5 0,0 0 0 5,4 2 2,2 4 0,0 0 4,2 0,0 2,main()in

7、t a7;int i,j,t;printf(“input 6 numbers:n”);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);,运行:input 6 numbers:输入:9 8 5 4 2 0 输出:0 2 4 5 8 9,7.2 二维数组的定义和引用 7.2.1 二维数组的定义 1.一般形式:类型说明符 数组名常量表达式常量表达式 如:float a34 定义数组a具有三行四列 在C中,可将二维数组看着是特殊形式的一维数组。如上述定义

8、可看着是具有三个元素的一维数组,而每个元素又可看作是包含四个元素的一维数组。因此,上述定义相当于:float a04,a14,a24 注:实际应用时若如此定义则被认为是重定义。2.二维数组各个元素在内存中的存放顺序是:按先行后列的顺序依次存放,例T7-3-1.c main()int i,j,a23;for(i=0;i2;i+)for(j=0;j3;j+)scanf(“%d”,输入: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,注

9、:从键盘给实型数组元素赋值时,应通过一中间变量进行,或采用其它办法实施。T7-3-2.c 实型数组从键盘赋值情况 main()int i,j;float a23,k;for(i=0;i2;i+)for(j=0;j3;j+)scanf(%f,for(j=0;j3;j+)scanf(“%f%f”,&a0j,&a1j),3.多维数组的定义和在内存中的存放顺序:如 int a234;共24个元素,在内存中排列的顺序是:第三维变化最快,然后是第二维,第一维最慢。,7.2.2 二维数组的引用 形式:数组名下标下标 其中:下标是整型或字符型的常量,变量或表达式。(定义时不能使用变量)如:a12 aij 1.

10、数组元素可出现在表达式中,如:a12=a22/2 2.使用数组元素时,应注意不要超出其定义的范围;如:int a23;a23=5;,7.2.3 二维数组的初始化 1.按行给二维数组赋初值 如:int a23=1,2,3,4,5,6;2.按数组元素排列的顺序赋初值 如:int a23=1,2,3,4,5,6;3.对部分元素赋初值,按行赋值较直观 如:int a23=2,5,3;,4.全部元素赋值时,第一维下标可省略 如:int a 3=1,2,3,4,5,6;又如:int a 4=0,0,3,0,0,10;,7.2.4 二维数组程序举例 例T7-4 将一个二维数组的行和列元素互换,存到另一个二维

11、数组中。,T7-4.c两数组行列互换 main()int a23=1,2,3,4,5,6;int b32,i,j;printf(“array 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”);,例T7-5.c 有3 4矩阵,求出其中最大元素所在的行号和列号 main()int i,j,r=0,c=0,max;int a34=1,2,3,4,9

12、,8,7,6,-10,10,-5,2;max=a00;for(i=0;imax)max=aij;r=i;c=j printf(“max=%d,row=%d,colum=%dn”,max,r,c);,运行结果:max=10,row=2,colum=1问题:在比较前 为什么要把a00赋给max?,7.3 字符数组 字符型数组:用于存放字符型数据。一维字符数组:存放一个字符串(每个数组元素存放一个字符)二维字符数组:存放多个字符串(行数是字符串的个数)7.3.1 字符数组的定义 形式:char 数组名常量表达式 char 数组名常量表达式常量表达式 常量表达式:整、字符、符号常量。例:char a5

13、;a0=C;a1=H;a2=I;a3=N;a4=A;,7.3.2 字符数组的初始化 如:char a5=C,H,I,N,A;char b5=C,H,I,N,W,U;编译时将指出:初始化值太多 char c5=C,H,I;char d=C,H,I,N,A 系统自动确认其长度为5,7.3.3 字符数组的引用 例T7-6.c 输出一个字符串main()char c10=I,_,a,m,_,h,a,p,p,y;int i;for(i=0;i10;i+)printf(“%c”,ci);print(“n”);,运行结果:I_am_happy,T7-7.C输出一个钻石图 main()char diamond

14、5=,*,*,*,*,*,*,*,*;int i;int j;for(i=0;i5;i+)for(j=0;j5;j+)printf(%c,diamondij);printf(n);,7.3.4 字符串和字符串结束标志 几点说明:(1)字符串:用双引号括起的若干字符,可将其存放在一维或两维字符型数组中。(2)字符串结束标志为:0(既无动作,又不显示)(3)字符串的长度:第一个 0以前字符的个数,(4)在字符型数组或字符串中遇 0,即认为该字符结束;(5)字符串可对字符型数组初始化 如:char c=“I_am_happy”;系统自动在数组的最后加了 0,长度为11 或char c=“I_am_h

15、appy”;系统自动在数组的最后加了 0,长度为11,相当于 c=I,_,a,m,_,h,a,p,p,y,0;而 char c10=“CHINA”注意:字符 0 并不一定都在字符数组的后面,输出时遇到第一个 0 结束;例T7-7-1.c main()char a=a,b,0,1,2;char b=“ab 0cd”;printf(“%s n%s n”,a,b);,运行结果:a b a b,7.3.5 字符数组的输入输出 1.字符数组的输出:,例T7-7-2.c main()int i;char a10=“CHINA”;char b18=“CHINA 0CHINA 0CHINA”;for(i=0;

16、i10;i+)printf(“%c”,ai);printf(“n”);printf(“%s n”,a);for(i=0;i18;i+)printf(“%c”,bi);printf(“n”);printf(“%sn”,b);,运行结果:CHINA CHINA CHINA_CHINA_CHINA CHINA,注意:(1)%s格式输出时,遇第一个 0时结束;(2)%c格式输出时,按指定的长度输出,当遇 0 时输出_;(3)%s格式输出字符型数组元素时,如printf(“%s”,a2);编译时虽然无错,但输出的是不可确定的字符,因此,这里必须是数组名;2.字符数组的输入 形式:scanf(“%s”,a

17、);其中:a是一个已被定义的字符型的数组名,字符数组名前不加地址运算符&,数组名代表数组的首地址。,例T7-7-3.c 输入函数中为多个字符型数组输入字符串,main(),char a15,a25,a35;,scanf(“%s%s%s”,a1,a2,a3);,printf(“a1=%s na2=%s na3=%s n”,a1,a2,a3);,printf(“,printf(“,printf(“,说明:,(1)用scanf函数输入 多个字符串时,可用_,Tab分隔。(2)在printf 函数中,用%s打印字符型数组的内容;而用%x,或%o可打印字符型数组的地址。,输入:,how_are_you?

18、,输出:a1=how,a2=are,a3=you?,&a1=ffcc,&a2=ffd2,&a3=ffd8,h,o,w,0,0,0,a,r,e,0,0,0,y,o,u,ffcc,ffcd,ffce,ffcf,ffd0,ffd1,ffd2,ffd3,ffd4,ffd5,ffd6,ffd7,ffd8,ffd9,ffda,a10,a11,a12,a13,a14,a20,a21,a22,a23,a34,a30,a31,a32,a33,0,?,a34,ffdb,ffdc,7.3.6 字符串处理函数 1.字符串输出函数 形式:puts(字符数组或字符串)功能:输出一个字符串,且将 0换成 n。例T7-7-4

19、.c main()char a1=“china nbeijing”;char a2=“china 0beijing”;puts(a1);puts(a2);puts(“WUHAN”);,运行结果:china beijing china WUHAN,这里是将 0 n 因此光标移 到下行,2.字符串输入函数 形式:gets(字符数组)功能:从键盘输入一个字符串到字符数组。在输入过程中,遇“”结束,并将其转换为 0 存入字符串尾部,对输入的_,Tab 作为字符存入字符型数组中。,例T7-7-5.c 用gets 和scanf 函数分别输入字符串,在scanf 中遇_ 字符串便结束了,而gets 中,却将

20、_ 作为字符存入字符型 数组中。main()char a115,a215;gets(a1);scanf(“%s”,a2);printf(“a1=%s n”,a1);printf(“a2=%s n”,a2);,输入:china_beijing china_beijing 输出:a1=china_beijing a2=china,3.字符串连接函数 形式:strcat(字符数组1,字符数组2)功能:连接两个数组中的字符串。操作:把字符数组2(串2)中的内容连接到字符数组1的后面,结果是两串相加存放到字符数组1中,使用时要考虑字符数组1的容量要足够大。,例T7-7-6.c,main(),char s

21、tr130=“Peoples_Republic_of_”;,char str2=“china”;,printf(“%s n”,strcat(str1,str2);,i,a,h,n,l,e,-,e,o,p,l,s,i,c,-,o,f,-,l,e,-,o,p,l,e,p,u,i,c,-,o,f,-,n,a,4.字符串拷贝函数 形式:strcpy(字符数组1,字符数组2)功能:将字符串2(也可以是字符数组)拷贝到字符数组1中,字符数组1中原来的内容被覆盖。例T7-7-7.c main()char a18,a2=“china”,a3=“wuhan”;strcpy(a1,a2);strcpy(a2,a3

22、);strcpy(a3,“beijing”);printf(“a1=%s na2=%s na3=%s n”,a1,a2,a3);,运行结果:a1=china a2=wuhan a3=beijing,注意:(1)字符串拷贝不能用赋值语句“=”;如:char a110,a210=“china”;a1=a2;只能用strcpy(a1,a2);(2)字符数组的元素可用赋值语句,如:a11=a21;(2)字符数组初始化时可用“=”,其它地方对字符数组赋值时不能用“=”;,5.字符串比较函数 形式:strcmp(字符串1,字符串2)功能:两串按Ascii码值从左向右逐个比较,直到出现不同字符或 0 为止;

23、比较结果:(1)串1=串2 返回值为0(2)串1 串2 返回值为正数 其值是Ascii码的差值(3)串1 串2 返回值为负数 其值也是Ascii码的差值,例T7-7-8.c main()int i,j,k;char a1=“wuhan”,a2=“beijing”;i=strcmp(a1,a2);j=strcmp(“china”,“korea”);k=strcmp(a2,“beijing”);printf(“i=%d nj=%d nk=%d n”,i,j,k);注意:两字符串比较不能用“=”运算符,虽然编译无错,但结果不对,运行结果:i=21 i=w-b=119-98=21 j=-8 j=c-k

24、=99-107=-8 k=0 k=b-b=98-98=0,6.求字符串长度函数 形式:strlen(字符数组)功能:检测字符串长度,返回字符串长度值,不包括 0;例T7-7-9.c main()char a110=“china”;printf(“%d n”,strlen(a1);printf(“%d n”,strlen(“beijing 0wuhan”);,运行结果:5 7,7.大小写字母转换函数:strlwr(字符串)8.小大写字母转换函数:strupr(字符串)例T7-7-10.c main()char a16=“CHinA”,a2=“wuHAn”;printf(“%s n”,strlwr

25、(a1);printf(“%s n”,strupr(a2);,运行结果:china WUHAN,7.3.7 字符数组应用举例 例T7-8.c 输入一行字符,统计单词数,单词间用_ 分隔。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_%d words_in_the_line n”,n);,输入:I_am_a_boy.输出:There_are_4_word_in_the_line,其中:n:统计单词数 w:单词标志,在单词中 为1,出了单词为 0 i:11,

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号