为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

数组

2011-11-30 50页 ppt 207KB 17阅读

用户头像

is_035687

暂无简介

举报
数组nullnull数 组null7.1 一维数的定义和引用null一、一维数组的定义: 类型说明符 数组名[常量表达式] ; 例如:int data[10], number[5]; 数组的存储结构:data[0] data[1] data[2] …….. data[9]null定义数组,就是要: (1)规定数组的名称,其取名规则与变量名相同; (2)规定数组的类型,包括其数据类型和存储类型; (3)规定数组的大小,即数组的维数及包含的数组元素的个数...
数组
nullnull数 组null7.1 一维数的定义和引用null一、一维数组的定义: 类型说明符 数组名[常量表达式] ; 例如:int data[10], number[5]; 数组的存储结构:data[0] data[1] data[2] …….. data[9]null定义数组,就是要: (1)规定数组的名称,其取名规则与变量名相同; (2)规定数组的类型,包括其数据类型和存储类型; (3)规定数组的大小,即数组的维数及包含的数组元素的个数。数组元素就是包含在数组中的变量。null二、一维数组元素的引用 数组名[下标] 例如:a[0]=a[5]+a[7]-a[2*3][例7.1] main( ) { int i , a[10]; for(i=0; i<=9;i++) a[i]=i ; for(i=9; i>=0;i--) printf(“%d ”,a[i]); printf(“\n”); }null三、一维数组的初始化null(1)在定义数组时对数组元素赋以初值; int a[10]={0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; (2)可以只给一部分元素赋值; int a[10]={0, 1, 2, 3, 4}; (3)如果想使一个数组中全部元素值为0,可简便实现; int a[10]={0, 0, 0, 0, 0, 0, 0, 0, 0, 0} null(4)C允许通过所赋初值的个数来隐含定义一维数组的大小; int a[]={0,1,2,3,4,5,0}; 相当于 int a[7]={0,1,2,3,4,5,0}; (5)花括号中的初值可以缺省,但有时逗号不能省略,缺省的值将被视为0。 float array[5]={,2.5, ,3.5,}; float array[5]={0,2.5,0,3.5,0};null四、一维数组应用举例null[例7.2] 利用数组来处理求Fibonacci数列的问题。nullmain( ) { int i; int f[20]={1, 1}; for (i=2; i<20; i++) f[i]=f[i-2]+f[i-1]; for(i=0;i<20;i++) { if (i%5= =0) printf(“\n”); printf(“%12d”,f[i]); } }null[例7.3] 用起泡法对10个数由小到大排序。起泡法的思路是:将相邻两个数比较,将小的调到前头。null9 8 5 4 2 0 初态8 8 8 8 8 9 5 5 5 5 5 9 4 4 4 4 4 9 2 2 2 2 2 9 0 0 0 0 0 9 第一趟5 5 5 5 8 4 4 4 4 8 2 2 2 2 8 0 0 0 0 8 9 9 9 9 第二趟 4 4 4 5 2 2 2 5 0 0 0 5 8 8 8 9 9 9 第三趟2 2 4 0 0 4 5 5 8 8 9 9 第四趟0 2 4 5 8 9 第五趟比较5次比较4次比较3次比较2次比较1次N-S图如下:N-S图如下:nullmain( ) { int i, j, t, a[11]; for(i=1;i<11;i++) scanf(“%d”,&a[i]); for(j=1;j<=9;j++) for (i=1;i<=10-j;i++) if (a[i]>a[i+1]) { t=a[i]; a[i]=a[i+1];a[i+1]=t;} for (i=1; i<11;i++) printf(“%d “,a[i]); }null§7.2 二维数组的定义和引用null一、二维数组的定义 类型说明符 数组名[常量表达式][常量表达式]; 如:int number[5][4]; char ch[3][4], name[8]; ch[0] ch[0] [0] ch[0] [1] ch[0] [2] ch[0] [3] ch[1] ch[1] [0] ch[1] [1] ch[1] [2] ch[1] [3] ch[2] ch[2] [0] ch[2] [1] ch[2] [2] ch[2] [3]null数组的存储结构:以行为主序ch[0][0]ch[0][1]ch[0][2]ch[0][3]ch[1][1]ch[1][0]ch[1][2]ch[1][3]ch[2][2]ch[2][3]null二、二维数组的引用 二维数组元素的表示形式为: 数组名[下标][下标]null 如:a[2][3]、b[1][2]=a[2][3]/2、a[2][3]=3等; 注意: (1)其中下标可以是整型表达式; (2)不要写成a[2,3]等形式; (3)应该注意下标值应在已定义的数组大小范围内; (4)定义数组时用的a[3][4]与引用数组元素时用的a[3][4]的区别。null三、二维数组的初始化null (1)分行给二维数组赋初值:如 int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; (2)可以将所有数据写在一个花括号内,按数组排列的顺序对元素赋初值;如: int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; (3)花括号内的初值个数少于每行中的数组元素个数,则每行中后面的元素自动赋初值0;也允许代表给每行元素赋初值的花括号的数目少于数组的行数,这时,后面各行的元素也自动赋0值。如: int a[3][4]={{1},{5},{9}}; 等价于 int a[3][4]={{1,0,0,0},{5,0,0,0},{9,0,0,0}};null int a[4][3]={{1,2},{4,5}}; 等价于 int a[4][3]={{1,2,0},{4,5,0},{0,0,0},{0,0,0}}; (4)C语言规定,可以用初始化的方法来隐含定义二维数组第一维的大小,即可以省略数组定义中第一个方括号中的表达式,但不能省略第二个方括号中的表达式。 如: int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; 等价于 int a[ ][4]={1,2,3,4,5,6,7,8,9,10,11,12}; (5)在定义时也可以只对部分元素赋初值而省略第一维长度,但应分行赋初值。 如: static int a[ ][4]={{0,0,3},{},{0,10}}; null四、二维数组应用举例null[例7.4] 将一个二维数组行和列元素互换,存到另一个二维数组中。[] 设:程序如下:nullmain( ) { int a[2][3]={{1,2,3},{4,5,6}}; int b[3][2]; int i, j; for(i=0;i<=1;i++) { for (j=0; j<=2;j++) { printf(“%5d”,a[i][j]); b[j][i]=a[i][j]; } printf(“\n”); } for(i=0;i<=2;i++) { for(j=0;j<=1;j++) printf(“%5d”,b[i][j]); printf(“\n”); } }null[例7.5] 有一个二维数组a[3][4],找出其中的最大和最小元素,并指出它们所在的行号和列号。null分析: 求最大值和最小值的方法在前面章节中已介绍过,求最大值的N-S图如右图所示,求最小值的算法请读者自己完成。nullfor (i=0; i<=2; i++) for (j=0; j<=3; j++) if (a[i][j]>max) { max=a[i][j]; row=i; colum=j; } printf(“max=%d,row=%d,colum=%d\n”,max,row,colum); }main() { int i,j,row=0,colum=0,max; int a[3][4]={{1,2,3,4},{9,8,7,6},{-10,10,-5,2}}; max=a[0][0];null§7.3 字符数组null一、字符数组的定义 char 数组名[常量表达式]; 如:char c[10]; int c[10]; 二、字符数组的初始化 (1)给每一个字符型数组元素依次赋给一个单字符。 如:char str[6]={‘C’,’h’,’i’,’n’,’a’,’\0’}; (2)直接在赋值号右边给出字符串常量。 如:char str[6]=“China”;null注意: (1)字符数组的长度可以通过赋初值的方式隐含定义;如: char str[]={‘C’,’h’,’i’,’n’,’a’,’\0’}; char str[]=“China”; (2)如果括号中提供的初值个数(即字符个数)大于数组长度,则作语法错误处理。如果初值个数小于数组长度,则只将这些字符赋给数组中前面那些元素,其余的元素自动定义为空字符(即‘\0’)。null三、字符数组的引用 [例7.6] 输出一个字符串。main( ) { char c[10]=“I am a boy”; int i; for(i=0;i<10;i++) printf(“%c”,c[i]); printf(“\n”); }nullmain() { char diamond[][5]={{‘ ’,‘ ’,‘*’,},{‘ ’,‘*’,‘ ’,‘*’},\ {‘*’,‘ ’ ,‘ ’ ,‘ ’,‘*’}, {‘ ’,‘*’,‘ ’,‘*’},{‘ ’ ,‘ ’ ,‘ ’,‘*’}}; int i,j; for (i=0;i<5;i++) { for (j=0;j<5;j++) printf(“%c”,diamond[i][j]); printf(“\n”); } } * * * * * * * *[例7.7] 输出一个钻石图案null四、字符串和字符串结束标志 字符串结束标志是“\0”,如: “China”在存储器中实际占用6个字节:char str[12]=“The string.”; 或 char str[]=“The string.”;如:char c[6]={‘C’,’h’,’i’,’n’,’a’} 为了处理方法的一致,而写为: char c[6]={‘C’,’h’,’i’,’n’,’a’,’\0’}null五、字符数组的输入和输出 1.字符数组的输出 (1)用格式符“%c”控制的printf();如:nullmain() {char c[10]={‘I’,‘ ’,’a’,’m’,‘ ’,’a’, ‘ ’,’b’,’o’,’y’}; int i; for(i=0;i<10;i++) printf(“%c”,c[i]); printf(“\n”); }null(2)用格式符“%s”控制的printf();如:main() {char c[ ]=“China”; int i; for(i=0;i<10;i++) printf(“%s”,c); }注意: (1)输出字符不包括“\0”; (2)用“%s”格式符输出字符串时,printf函数中的输出项是字符数组名,而不是数组元素名;null(3)puts(字符数组);如:#include main() {char city[ ]=“YangZhou”; int i, j; for(i=0;i<=8;i++) printf(“%c”,city[i]); printf(“\n”); printf(“%s\n”,city); puts(city); }null注意: (1)puts用字符数组名,而不用数组元素名; (2)输出的字符串中可含转义字符;如: char str[]=“China\nBeijing”; puts(str); (3)如果数组长度大于字符串实际长度,也只输出到遇‘\0’时结束(即若一个字符数组中包含一个以上的‘\0’,则遇到第一个时输出就结束)。如: printf(“%s\n”,“ABCD\0EFGH”); 只输出ABCDnull 2.字符数组的输入 (1)用格式符“%s”控制的scanf();如:char c[6]; scanf(“%s”,c); 再如: char str1[5],str2[5],str3[5]; scanf(“%s%s%s”,str1,str2,str3); 若输入数据流为:How are you? 时, str1,str2,str3分别接收到“How”、“are”、“you?”。且在各个字符串的最后自动加‘\0’。null注意: ① 如果利用一个scanf函数输入多个字符串时,则以空格分隔; ② scanf(“%s”,&str); 不对!null(2)用gets( );如: char ch[16]; gets(ch);null注意: ① gets一次只能输入一个字符串; ② 自变量应是数组名,而不能是数组元素名; ③ 要求从键盘上输入一个字符串直到遇到换行符为止,系统会自动把换行符换成“\0”加在字符串末尾。与scnaf不同,输入字符串中的空格也会被接收。null六、字符串处理函数null 1.puts(字符数组) 功能:将一个以‘\0’结束的字符序列输出到终端; 如: char str[]=“China”;puts(str); 说明:输出的字符串中可含转义字符。 2.gets(字符数组) 功能:从终端输入一个字符串到字符数组中,并得到一个函数值,该函数值是字符数组的起始地址; 如: gets(str); **说明:gets与puts只能输入或输出一个字符串。null 3.strcat(字符数组1,字符数组2) 功能:将字符串2接到字符串1的后而且去掉字符串1的尾空; 如: char str1[30]=“YangZhou ”; char str2[ ]=“China”; printf(“%s\n”,strcat(str1,str2)); 说明: ①字符数组1的长度需足够大; ②去掉字符串1的尾空。 4.strcpy(字符数组1,字符串2) 功能:将字符串2拷贝到字符数组1中去; 如: char str1[10],str2[]=“China”; strcpy(str1,str2);执行后:null说明: ①字符数组1的长度需足够大; ②字符数组1必须写成数组名形式,字符串2可以是 数组名,也可以是一个字符串常量。如: strcpy(str1,“China”); ③拷贝时连同字符串2后的‘\0’一起拷贝; ④不能用赋值语句将一个字符串常量或字符数组 直接赋给一个字符数组。如: str1=“China”; str1=str2; 均是错误的。 ⑤strncpy (str1,str2, 2) ; 拷贝str2中前面2字符到str1中, str1第3位往后不变。 null 5.strcmp(字符串1,字符串2) 功能:比较字符串1和字符串2,返回: ①串1=串2,返回0; ②串1>串2,返回正整数; ③串1<串2,返回负整数。 如: if(strcmp(str1,str2)= =0) printf(“yes”); 说明:不能进行如下比较: if(str1= =str2) printf(“yes”); 6.strlen(字符数组) 功能:测试字符串的长度; 如: char str1[10]=“China”; printf(“%d\n”,strlen(str)); 说明:不包含‘\0’在内。null 7.strlwr(字符串) 功能:将字符串中的大写字母转换成小写字母; 说明:lwr: lowercase。 8.strupr(字符数组) 功能:将字符串中的小写字母转换成大写字母。 说明:upr: uppercase。null七、字符数组应用举例 null[例6.8] 编程将两个字符串连接起来,不用strcat函数。分析:N-S图如下:nullmain( ) { char s1[80],s2[40]; int i=0,j=0; scanf(“%s”,s1); scanf(“%s”,s2); while(s1[i]!=‘\0’) i++; while(s2[j]!=‘\0’) s1[i++]=s2[j++]; s1[i]=‘\0’; printf(“\n结果为:%s”,s1); }null例7.9 比较两个给出的C字符串,按比较结果函数返回如下函数值。若s1=s2,则返回0;若s1s2,则返回正值。nullint scmp(char s1[],char s2[]) { int i=0; while(s1[i]) if (s1[i]-s2[i]) return(s1[i]-s2[i]); else { i++; } return(0); }null例7.10 输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。null分析: (1)假设将文本行存入字符串string中,从string[0]起逐个检查数组元素,一旦当前字符为非空格且前一个字符为空格时,就说明一个单词的开始; (2)num用来统计单词数目,初值为0; c用来存放当前字符;nullN-S图如下:=0null#include “stdio.h” main() { char string[81]; int i,num=0,word=0; char c; gets(string); for(i=0;(c=string[i])!=‘\0’;i++) if(c= =‘ ’ )word=0; else if (word= =0) { word=1; num+ +; } printf(“There are %d words in \ the line\n”,num); }null
/
本文档为【数组】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索