一维数组的定义和引用.ppt_第1页
一维数组的定义和引用.ppt_第2页
一维数组的定义和引用.ppt_第3页
一维数组的定义和引用.ppt_第4页
一维数组的定义和引用.ppt_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、,第 7 章 数组 7.1 一维数组的定义和引用 7.2 二维数组的定义和引用 7.3 字符数组,7.1 一维数组的定义和引用,7.1.1 定义: 类型说明符 数组名常量表达式 如: int a10, b100; 说明:(1) 数组名定义同变量名. (2) 用 ,而不能用( ) . (3) 常量表达式表示元素的个数: a10中有10个元素,从a0a9,下标从0开始,不能使用数组元素a10. (4) 常量表达式中不能包含变量. int n; scanf (“%d”, ,7.1.2 一维数组元素的引用,先定义,后使用。不能一次引用整个数组。 表示形式: 数组名下标 下标可以是整型常量或表达式。例如

2、: a0=a5+a7-a2*3,EG: main( ) int i, a10 ; for (i=0;i=0;i ) printf(“%d”,ai); 运行结果: 9 8 7 6 5 4 3 2 1 0,1. 定义数组时对数组元素赋初值. static int a10 =0,1,2,3,4,5,6,7,8,9; 2. 只将一部分元素赋值. static int a10=0,1,2,3,4; 只提供前五个元素的初值. 3.对全部数组元素赋初值时,可以不指定数组的长度. static int a =1,2,3,4,5; static int a10=1,2,3,4,5; 注意:的区别 中只有5个元素

3、,而中有10个元素,其中后5个元素初值为0. 4. 使数组元素全部为0 int a10=0,0,0,0,0,0,0,0,0,0;但不能:int a10=0*10;,7.1.3 一维数组的初始化,7.1.4 一维数组程序举例,例7.2 Fibonacci 数列 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); ,例7.3 用起泡法将10个数从小到大排序 起泡法排序思想:将相邻两个数比较,将小的调到前头. 算法: m

4、ain( ) int a11, i , j , t ; printf (“input 10 numbers : n ” ) ; for (i=1; iai+1) t = ai ; ai = ai+1 ; ai+1 = t ; printf (“ the sorted numbers :n”); for (i=1;i11;i+) printf ( “%d” ,ai ); ,9 8 8 8 8 8 8 5 5 5 5 8 9 5 5 5 5 5 8 4 4 4 5 5 9 4 4 4 4 4 8 2 2 4 4 4 9 2 2 2 2 2 8 0 2 2 2 2 9 0 0 0 0 0 8 0 0

5、 0 0 0 9,输入n个数给a1到an,For j=1 to n-1,For i=1 to n-j,Y,N,aiai+1,aiaI+1,输出a1到an,Void sound(unsigned frequency) void nosound () void delay(unsigned milliseconds);,唱名 1 2 3 4 5 6 7 频率 131 147 165 175 196 220 247 唱名 1 2 3 4 5 6 7 频率 262 294 330 349 392 440 494 1=C 4/4 1 2 3 1| 1 2 3 1| 3 4 5 -| 3 4 5-| 56

6、 54 31| 56 54 3 1| 2 5 1- | 2 5 1-|,#include main() unsigned int sing=262,250,294,250,330,262,250, 262,250,294,250,330,250,262,250, 330,250,349,250,392,500, 330,250,349,250,392,500, 392,125,440,125,392,125,349,125,330,250,262,250, 392,125,440,125,392,125,349,125,330,250,262,250, 294,250,196,250,262,

7、500, 294,250,196,250,262,500, 0,0;,unsigned int *p; p=sing; while (*p) sound(*p+); delay(*p+); nosound(); ,7.2 二维数组的定义和引用,7.2.1 二维数组的定义与引用 类型说明符 数组名常量表达式常量表达式 说明:元素的排列顺序是按行存放的,这在数组初始化和指针表示时方便易行.,C语言允许使用多维数组 如:int f345;,7.2.2 二维数组的引用,表示形式: 数组名下标下标 注意:下标值应在已定义的数组大小的范围内,不要越界. b12=a23/2; 区分:定义数组 a22 和引用

8、元素 a22 前者是定义数组的维数和各维的大小,后者是下标值,不要混淆.,1.分行赋值: static int a22=1,2,3,4; 2.将所有数据写入一个花括号中: static int a22=1,2,3,4; 3.对部分元素赋值: 若定义为静态的,其余为0. int a34 = 1, 5, 9;,7.2.3 二维数组的初始化:,int a34 = 1,0,6,0,0,11;,4.若对全部元素赋值,第一维的长度可省略, 但第二维的长度不可省. static int a22=1,2,3,4; 等同于 static int a 2=1,2,3,4;,例如,int a34=1,6;,可以对某

9、几行元素赋值int a34=1,5,6;,7.2.4 程序举例,例7.5 3X4矩阵,求最大值及其所在的行号和列号。,Max=a00,For i=0 to 2,For j=0 to 3,aijmax,Y,N,Max=aIj row=i colum=j,输出: max 和row, colim,main( ) int i ,j, row=0,col=0,max; static int a34=1,2,3,4,9,8,7,6,-10,10,-5,2; max=a00; for (i=0;imax) max=aij; row=i; col=j; printf(“max=%d,row=%d,col=%d

10、”, max,row,col); 输出结果:max=10,row=2,col=1,7.3 字符数组,7.3.1 字符数组的定义 char c10; (占一个字节) c0=I; c1= ; c2=a; c3=m; c4= ; c5=h; c6=a; c7=p; cp=; c9=y; I am happy 也可用 int c10; (占两个字节),7.3.2 一维数组的初始化:,1)逐一赋值。 Char c10=I, , a, m, , h,a,p,p,y; 2)初值个数同预定的长度相同时,可忽略数组长度。 Char c=I, , a, m, , h,a,p,p,y;,应用:,main( ) st

11、atic char c5=a ,b ,c ,d ,e; int i; for (i=0;i5;i+) printf (“%c”, ci) ; printf (“n”); 运行结果: a b c d e,7.3.3 字符数组的引用,例7.6 输出一个字符串 main() char c10=I, , a,m, ,a, ,b,o,y; int i; for (i=0;i10;i+) printf (%c, ci); printf (n); I am a boy,例7.7 输出一个钻石图形,main() char diamond5= , ,*, ,*, ,*, *, , , ,*, ,*, ,*, ,

12、 ,*,; int i, j; for (i=0;i5;i+) for (j=0;j5;j+) printf (%c,diamondij); printf(n); ,* * * * * * * *,7.3.4字符串和字符串结束标志 0,注意:static char c =c,h,i,n,a; static char c =“china” 前者的长度为5,不包含结束标志0,而后者的长度为6,包含结束标志0,第六个元素为0。 有了字符串结束标志数组的长度就不重要了。 Char c= I am happy; Char c= I am happy; static char c =c,h,i,n,a,0

13、; static char c =“china” static char c10 =“china” ,C h i n a 0 0 0 0 0,7.3.5 字符数组的输入输出,(1)逐个输入输出,用“%c”. (2)整个字符串输入输出,用“%s”. Static char c =“china”; printf (“%s”,c); 输出结果:china 注意:(1)遇到结束标志0就结束,但不输出. (2) 用“%s”输出时,输出是字符数组名,不是数组元素名. char c =“china”; printf (“%s”,c0);,(3)若字符数组中包含一个以上0,则遇第一个0时输出就结束. (4)用

14、“%s”格式时,输入项为字符数组名,不要加地址符 实际上数组名就是 数组的首地址。,7.3.6字符串处理函数,注意:功能、参数、返回值 调用字符串处理函数时应包含 string.h, stdio.h (1) puts (字符数组) 输出的字符串可包含转义字符. Static char str =“I amn a student”; puts (str); 输出:I am a student int puts (char *str),2)gets (字符数组),得到的返回值是字符数组的起始地址,字符数组不能用字符常量代替, char str20; gets (str);,且只能输入或输出一个字符

15、串. gets( str1,str2)(错) puts(str1,str2) (错),3)strcat (字符数组1,字符数组2),将字符串2接到1后面,返回的函数值为字符数组1的地址. Static char c130=“ how are ”; static char c2 =“ you ”; printf (“%s”,strcat(c1,c2); 输出: how are you 注意:1)字符数组1的长度必须足够大 2)只在新串的最后保留一个0. 返回值是第一个字符数组的首地址,(4) strcpy (字符数组1,字符串2),将字符串2拷贝到字符数组1中 char str110, str2

16、=China; strcpy(str1,str2); 说明:1) 字符数组1的长度应足够大. 2) 字符数组1必须是数组名。字符串2可以是字符数组名,也可以是字符串常量. 比如:strcpy(str1,China);,3)在复制时连同0一 起复制到字符数组中。 4)在字符数组中,不能用赋值语句, 只能用此函数处理. Char str110,str2=China; str1=str2; (非法) 5) 可进行部分拷贝. Eg: strcpy(c1,c2,3); 此语句将c2前面的3各字符拷贝到c1中, 最后加一个结束标志0.,(5) strcmp(字符串1,字符串2),Strcmp(str1,s

17、tr2)Strcmp(China,Korea) strcmp(str1,Heijing); 从左至右比较 AA,computercompare. 字符串1=字符串2。 返回值为0 字符串1字符串2。 返回值为正整数 字符串1字符串2。 返回值为负整数 注意:if(str1= =str2) printf(Yes); (错误)而只能: if(strcmp(str1, str2) = =0 ) printf(Yes);,(6) strlen (字符数组) 测试字符串长度,不包括结束标志0.char str10 = china;printf (%d, strlen(str); (7) strlwr (

18、字符串)将大写字母转换成小写字母. (8) strupr (字符串) 将小写字母转换成大写字母.,输入一行字符,统计单词个数。 #include “stdio.h” main( ) char string81, c; int i,num=0,word=0; /*num统计单词个数*/ gets(string); for (i=0;(c=stringi)!=0;i+) if(c= = ) word=0; else if (word= =0) word=1;num+; printf(“ There are %d words in the linen”,num);,How do you do,小结:本章分为

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论