C语言chap7多维数组ppt课件

上传人:桔**** 文档编号:570783083 上传时间:2024-08-06 格式:PPT 页数:40 大小:168KB
返回 下载 相关 举报
C语言chap7多维数组ppt课件_第1页
第1页 / 共40页
C语言chap7多维数组ppt课件_第2页
第2页 / 共40页
C语言chap7多维数组ppt课件_第3页
第3页 / 共40页
C语言chap7多维数组ppt课件_第4页
第4页 / 共40页
C语言chap7多维数组ppt课件_第5页
第5页 / 共40页
点击查看更多>>
资源描述

《C语言chap7多维数组ppt课件》由会员分享,可在线阅读,更多相关《C语言chap7多维数组ppt课件(40页珍藏版)》请在金锄头文库上搜索。

1、7.1 一一维数数组第第 7 章章 多多维数数组1一一维数数组的定的定义语句方式:句方式: 类型型阐明符明符 数数组名名常量表达式常量表达式阐明:明: 数数组名定名名定名规那么和那么和变量名一量名一样。 常量表达式表示数常量表达式表示数组元素的个数,即数元素的个数,即数组的的长度。如:度。如: int a10;表表示示a数数组有有10个个元元素素:a0,a1,a2, a9,没没有有a10。留意:数留意:数组的下的下标是从是从0开开场的。的。2一一维数数组元素的援用元素的援用 C不允不允许对数数组进展展动态定定义。以下作法是。以下作法是错误的。的。 int n; scanf(“%d,&n); i

2、nt an; 数组必需先定义,然后再运用。C的数组元素只能逐个援用而不能一次援用整个数组。 一维数组元素的表示方式为: 数组名下标下标可以是整型常量或整型表达式。例例7.1 main( ) int i,a10; for (i=0; i=0; i-) printf(“%2d,a i); 输出出结果:果:10 9 8 7 6 5 4 3 2 13一一维数数组的初始化的初始化赋值语句句和和输入入语句句均均可可使使数数组中中的的元元素素赋初初值,但但占占用用运运转时间。简捷的方法是在程序运捷的方法是在程序运转之前使数之前使数组初始化。初始化。对数数组元素初始化的方法有:元素初始化的方法有:1) 在定在

3、定义数数组时对数数组元素元素赋以初以初值。如:。如: static int a10=0,1,2,3,4,5,6,7,8,9;阐明:明: 依次依次赋予数予数组元素的初元素的初值必需用必需用 括起来。括起来。 “static是是C的一个关的一个关键字,意字,意为“静静态存存储。C规定只需定只需静静态存存储(static)数数组和外部存和外部存储(extern)数数组才干初始化。才干初始化。2) 可以只可以只给一部分元素一部分元素赋值。如:。如: static int a10=0,1,2,3,4;3) 在在C中系中系统会自会自动对所定所定义的静的静态数数组的每个元素的每个元素赋初初值0。4) 对全部

4、数全部数组元素元素赋初初值时,可以不指定数,可以不指定数组长度。如:度。如: static int a5=1,2,3,4,5;可以写成:可以写成: static int a =1,2,3,4,5;例例7.2 将一个十将一个十进制正整数制正整数转换成二成二进制数。制数。main( ) int i, k, r, x, b16; printf(“Enter an integer x :); scanf(“%d,&x); printf(“%6d binary number is :n,x); k = -1; do r =x%2; b+k= r ; x/=2; while (x != 0); for (

5、 i=k; i=0; i-) printf(“%d,bi); printf(“n);例7.3 用冒泡法将10个数按从小到大排序。当有当有n个数个数时需求作需求作n1趟趟这样的搜索,每趟搜的搜索,每趟搜索要作索要作n1次比次比较。main( ) int i, j,t,a11; printf(“input 10 numbers :n); for (i=1; i11; i+) scanf(“%d,&ai); printf(“n); for ( j=1; j=9; j+) for ( i=1; iai+1) t=ai; ai=ai+1; ai+1= t; printf(“the sorted numb

6、ers :n); for (i=1; i11; i+) printf(“%d ,ai);7.2. 二二维数数组语句方式句方式: 类型型阐明符明符 数数组名名常量表达式常量表达式1 常量表达式常量表达式2如:如:float a34;定定义a是一个是一个3x4 (3行行4列列)的数的数组,即,即a数数组有有12个元素。个元素。但不得写成:但不得写成:float a3,4;留意:留意: 二二维数数组中中元元素素的的陈列列顺序序为按按行行按按列列。即即存存放放完完第第1 行的元素后再接着存放第行的元素后再接着存放第 2 行的元素,依次行的元素,依次类推。推。 C允允许定定义多多维数数组。如:。如: f

7、loat a345;static int a34=1,5,9;static int a34=1,0,6,0,0,11;static int a34=1,5,6;static int a34=1, ,9;留意:所留意:所赋给的的值是按行按列是按行按列对号入座的。号入座的。 对二二维数数组的的全全部部元元素素赋初初值时,可可以以不不指指定定第第一一维的的长度,但不得省去第二度,但不得省去第二维的的长度。如:度。如:static int a34=1,2,3,4,5,6,7,8,9,10,11,12;可以写成:可以写成:static int a 4=1,2,3,4,5,6,7,8,9,10,11,12

8、;同同样,static int a 4=0,0,3, ,0,10; 也是正确的。也是正确的。 可以可以对部分元素部分元素赋初初值。如:。如:例例7.4 将一个二将一个二维数数组行和列的元素互行和列的元素互换后存到另一个数后存到另一个数组中。如:中。如:main( ) static int a23=1,2,3,4,5,6; static int b32, i, j; printf(“array a:n); for (i=0; i=1; i+) for ( j=0; j=2; j+) printf(“%5d,ai j); b ji=ai j; / 元元素素互互换 / printf(“n); pri

9、ntf(“array b:n); for (i=0; i=2; i+) for ( j=0; j=1; j+) printf(“%5d,bi j); printf(“n); 例例7.5 输出出一一个个3 4数数组中中每每行行中中的的最最大大元元素素之之值及及其其位置。位置。main( ) int i, j, c, max ; static int a34=6,-5,11,3,8,9,4,7,2,13,1,-10; for (i=0; i=2; i+) max=a i0; c=0; for ( j=0; jmax) max=ai j; c=j; printf(“max=%2d,row=%d,co

10、lum=%dn,max,i+1,c+1); 输出出结果:果:max=11, row=1, colum=3max= 9, row=2, colum=2max=13, row=3, colum=27.3 多多维数数组与二与二维数数组的定的定义类似似例如例如: int a345, b2453;分分别为定定义的三的三维、四、四维数数组。其中,其中,a有有60个元素,个元素,b有有120个元素。个元素。7.4字符数字符数组与字符串与字符串7.4.1 字符数组的逐个字符操作例例7.6 从从键键盘盘输输入入一一个个字字符符串串,回回车车键键终终了了,并并将将字字符符串串在在屏屏幕上输出。幕上输出。 main

11、( ) int i; static char str80; clrscr(); for(i=0;i80;i+) stri=getch(); /*逐逐次次给给数数组组元元素素stri赋赋值值,但不回显在屏幕上但不回显在屏幕上*/ printf(*); /*以以星星号号替替代代输输入入字字符符的的个个数数*/ if(stri=x0d) break;/*假假设设输输入入回回车车那那么么终终止止循循环环*/ i=0; while(stri!=x0d) printf(%c,stri+);/*逐逐次次输输出出字字符符数数组组的的各各个元素个元素*/ printf(n); getch();/*程序暂停程序暂

12、停*/ 1字符数组的定义1维字符数组,用于存储和处置1个字符串,其定义格式与1维数值数组一样。2维字符数组,用于同时存储和处置多个字符串,其定义格式与2维数值数组一样。2字符数组的初始化字符数组的初始化,可以经过为每个数组元素指定初值字符来实现。3字符数组的援用 字符数组的逐个字符援用,与援用数值数组元素类似。 1字符数字符数组的的输入入 除除了了可可以以经过初初始始化化使使字字符符数数组各各元元素素得得到到初初值外外,也也可可以以运运用用getchar()或或scanf()函函数数输入入字符。字符。 例如:例如: char str10;for(i=0; i10; i+) scanf(%c,

13、&stri); fflush(stdin);/*去除去除键盘输入入缓冲区冲区*/ 2字符数字符数组的的输出出 字字符符数数组的的输出出,可可以以用用putchar()或或printf()函函数。数。 例如:例如: char str10=c language;for(i=0; i10; i+) printf(%c, stri);printf(n); 留留意意:逐逐个个字字符符输入入、输出出时,要要指指出出元元素素的的下下标,而而且且运运用用“%c格格式式符符。另另外外,从从键盘上上输入入字字符符时,无无需需输入入字字符符的的定定界界符符单引引号号;输出出时,系,系统也不也不输出字符的定界符。出字

14、符的定界符。Scanf(“%s)方式方式输入字符串入字符串时:从第一个非空白字符开从第一个非空白字符开场,遇到第一,遇到第一个空白字符个空白字符终了;并在末尾自了;并在末尾自动补上上一个字符一个字符0#include main( ) char name13; int i; for (i =0; i =12; i +)scanf(“ %c,&namei); for (i =0; i =12; i +)printf(“ %c,namei); scanf(“ %s,name); printf(“ %s,name);例例7e_1:采用不同的方式:采用不同的方式输入入输出字符串出字符串运运转结果果:Pe

15、ar & Apple Pear & ApplePear & Apple Pear#include #include main( )int i; char name74=sun,mon,tue,wed, thu,wen,sat; printf(Result is:n); name03=&; name23=&; name53=&; for (i=0;i7;i+) printf(%sn,namei); getch();例例: 7e_2字符串数组值的改动。字符串数组值的改动。程序运程序运转结果果:sun&monmontue&wedwedthuwen&satsat赋初值:改动后:7.4.2 字符数组的整

16、体操作例例7.7 字符数字符数组的整体的整体输入与入与输出。出。 将将2维字符数字符数组进展初始化,并在屏幕上展初始化,并在屏幕上输出出*/main() int i; char name510=“zhangshan, “lisi, “wangwu, “zhaolui, “luiqi; for(i=0;i5;i+) printf(n%st,namei); /*namei代代表表该行行数数组元元素素的首地址的首地址*/ getch(); 1字符串及其字符串及其终了了标志志 所所谓字字符符串串,是是指指假假设干干有有效效字字符符的的序序列列。C言言语中中的的字字符符串,可以包括字母、数字、公用字符、

17、本串,可以包括字母、数字、公用字符、本义字符等。字符等。C言言语规定定:以以0作作为字字符符串串终了了标志志0代代表表ASCII码为0的的字字符符,表表示示一一个个“空空操操作作,只只起起一一个个标志志作作用用。因因此此可可以以对字字符符数数组采采用用另另一一种种方方式式进展展操操作作了了字字符符数数组的的整整体体操作。操作。 留留意意:由由于于系系统统在在存存储储字字符符串串常常量量时时,会会在在串串尾尾自自动动加加上上1个个终终了了标志,所以无需人为地再加标志,所以无需人为地再加1个。个。另另外外,由由于于终终了了标标志志也也要要在在字字符符数数组组中中占占用用一一个个元元素素的的存存储储

18、空空间间,因此在阐明字符数组长度时,至少为字符串所需长度加因此在阐明字符数组长度时,至少为字符串所需长度加1。2字符数组的整体初始化字符数组的整体初始化字字符符串串设设置置了了终终了了标标志志以以后后,对对字字符符数数组组的的初初始始化化,就就可可以以用用字字符符串常量来初始化字符数组。串常量来初始化字符数组。3字符数组的整体援用字符数组的整体援用1字符串的输入字符串的输入除除了了可可以以经经过过初初始始化化使使字字符符数数组组各各元元素素得得到到初初值值外外,也也可可以以运运用用scanf()函数输入字符串。函数输入字符串。2字符串的输出字符串的输出printf()函函数数,不不仅仅可可以以

19、逐逐个个输输出出字字符符数数组组元元素素,还还可可以以整整体体输输出出存存放在字符数组中的字符串。放在字符数组中的字符串。7.4.3 常用的字符串处置函数字符串字符串规范函数的原型在范函数的原型在头文件文件string.h中。中。1输入字符串入字符串gets()函数函数1调用方式:用方式:gets(字符数字符数组)2函函数数功功能能:从从规范范输入入设备(stdin)键盘上上,读取取1个个字字符符串串可可以以包包含含空空格格,并并将将其其存存储到字符数到字符数组中去。中去。3运用运用阐明明 1gets()读取取的的字字符符串串,其其长度度没没有有限限制制,编程程者者要要保保证字字符符数数组有有

20、足足够大大的的空空间,存存放放输入入的的字字符串。符串。 2该函函数数输入入的的字字符符串串中中允允许包包含含空空格格,而而scanf()函数不允函数不允许。遇到回。遇到回车输入入终了!了!2输出字符串出字符串puts()函数函数1调用方式:用方式:puts(字符数字符数组)2函函数数功功能能:把把字字符符数数组中中所所存存放放的的字字符符串串,输出出到到规范范输出出设备中中去去,并并用用n取取代代字字符符串串的的终了了标志志0。所所以以用用puts()函函数数输出出字字符符串串时,不不要要求另加求另加换行符。行符。 3运用运用阐明明1)字字符符串串中中允允许包包含含本本义字字符符,输出出时产

21、生生一一个控制操作。个控制操作。2)该函函数数一一次次只只能能输出出一一个个字字符符串串,而而printf()函数也能用来函数也能用来输出字符串,且一次能出字符串,且一次能输出多个。出多个。1. 输入入(用用scanf(“%s)(2) 输入多个字符串入多个字符串,可用空格隔开。可用空格隔开。 static char str15, str25, str35; scanf(%s%s%s, str1, str2,str3);(1) 输入字符串入字符串时,系系统自自动加上加上0输入入 How are you str1得到得到: H o w0 str2得到得到: a r e0 str3得到得到: y o

22、 u 02.2.输入输入( (用用gets()gets() static char str 15, static char str 15, gets(str); gets(str); 输入输入:how are you :how are you 那么那么strstr得到得到: how are you0 : how are you0 例例7e_3(7e_3(演示演示) ) #include #include #include #include main() main() static char str15,str25,str35,str15; static char str15,str25,str

23、35,str15; scanf(%s%s%s, str1, str2,str3); /* scanf(%s%s%s, str1, str2,str3); /*输入输入 how are youhow are you回车回车*/*/ printf(%s%s%s%sn, str1, str2,str3); printf(%s%s%s%sn, str1, str2,str3); puts(str1);puts(str2);puts(str3); /*puts() puts(str1);puts(str2);puts(str3); /*puts()将将00转换为转换为n*/n*/ fflush(stdi

24、n); /* fflush(stdin); /*去除键盘缓冲区去除键盘缓冲区, ,內部位置指內部位置指针置首位针置首位*/*/ gets(str); /* gets(str); /*输入输入 how are you how are you回车回车*/ */ puts(str); puts(str); 运转屏幕显示运转屏幕显示:how are youhowareyouhowareyouhow are youhow are you例例7e_4(演示演示)从从键盘按下面次序按下面次序输入入,分析程序分析程序结果果: aa bb回回车cc dd回回车#include #include main()ch

25、ar a15,a25,a35,a45; scanf(“%s%s,a1,a2); gets(a3);gets(a4); puts(a1); puts(a2); puts(a3); puts(a4);程序运转结果程序运转结果: :aaaabbbbcc ddcc dd阐明明: :输入流入流为一一队列列 aabbccdd aabbccddscanf(“%sscanf(“%s,);,);从从队列中一个一个地列中一个一个地读字符字符, ,每每读一个一个, ,规范范输入入设备文件文件stdinstdin内部指内部指针向右挪向右挪动一个字符位置一个字符位置; ;以非空白字符开以非空白字符开场, ,以第一个空以

26、第一个空白字符白字符终了了. .gets();gets();从从队列中一个一个地列中一个一个地读字符字符, ,每每读一个一个, ,规范范输入入设备文件内部指文件内部指针向右挪向右挪动一个字符位置一个字符位置; ;以以为串串输入入终了了标志志. .那么那么: :a15:aa0 a25:bb0a15:aa0 a25:bb0a35:0 a45:ccdd0a35:0 a45:ccdd03字符串比字符串比较strcmp()函数函数1调用方式:用方式:strcmp(字符串字符串1 ,字符串字符串2)其中其中“字符串可以是串常量,也可以是字符串可以是串常量,也可以是1维字符数字符数组。2函数功能:比函数功能

27、:比较两个字符串的大小。两个字符串的大小。假假设:字符串:字符串1=字符串字符串2,函数前往,函数前往值等于等于0; 字符串字符串1字符串字符串2,函数前往,函数前往值正整数。正整数。3运用运用阐明明1假假设一一个个字字符符串串是是另另一一个个字字符符串串从从头开开场的的子子串串,那那么母串么母串为大。大。2不不能能运运用用关关系系运运算算符符“来来比比较两两个个字字符符串串,只只能用能用strcmp() 函数来函数来处置。置。例7.8 gets函数和strcmp函数的运用。 /*功能:简单密码检测程序*/#include stdio.hmain() char pass_str80; /*定义

28、字符数组pass_str*/ int i=0; /*检验密码*/ while(1) clrscr(); printf(请输入密码n); gets(pass_str); /*输入密码*/*假定正确口令假定正确口令为password*/ if(strcmp(pass_str,“password)!=0) printf(口令口令错误,按恣意,按恣意键继续); else break; /*输入正确的密入正确的密码,中止循,中止循环*/ getch(); i+; if(i=3) exit(0);/*输入三次入三次错误的密的密码,退出程序,退出程序*/ /*以下以下为输入正确密入正确密码所所进入的程序段入

29、的程序段*/ printf(密密码正确正确!欢迎他迎他进入入!); 4拷拷贝字符串字符串strcpy()函数函数1调用方式:用方式:strcpy(字符数字符数组, 字符串字符串)其中其中“字符串可以是串常量,也可以是字符数字符串可以是串常量,也可以是字符数组。2函函数数功功能能:将将“字字符符串串完完好好地地复复制制到到“字字符符数数组中,字符数中,字符数组中原有内容被覆盖。中原有内容被覆盖。3运用运用阐明明1字字符符数数组必必需需定定义得得足足够大大,以以便便包包容容复复制制过来来的的字符串。复制字符串。复制时,连同同终了了标志志0一同复制。一同复制。2不不能能用用赋值运运算算符符“将将一一

30、个个字字符符串串直直接接赋值给一一个字符数个字符数组,只能用,只能用strcpy()函数来函数来处置。置。 5衔接字符串接字符串strcat()函数函数1调用方式:用方式:strcat(字符数字符数组, 字符串字符串)2函函数数功功能能:把把“字字符符串串衔接接到到“字字符符数数组中中的的字字符符串串尾尾端端,并并存存储于于“字字符符数数组中中。“字字符符数数组中中原原来来的的终了了标志志,被被“字字符符串串的的第第一一个个字字符符覆覆盖盖,而而“字字符符串在操作中未被修正。串在操作中未被修正。3运用运用阐明明 1由由于于没没有有边境境检查,编程程者者要要留留意意保保证“字字符符数数组定定义得

31、得足足够大大,以以便便包包容容衔接接后后的的目目的的字字符符串串;否否那那么么,会因会因长度不度不够而而产生生问题。 2衔接接前前两两个个字字符符串串都都有有终了了标志志0,衔接接后后“字字符符数数组中中存存储的的字字符符串串的的终了了标志志0被被舍舍弃弃,只只在在目目的的串串的最后保管一个的最后保管一个0。6求求字字符符串串长度度strlen()函函数数len是是length的的缩写写1调用方式:用方式:strlen(字符串字符串)2函函数数功功能能:求求字字符符串串常常量量或或字字符符数数组的的实践践长度不包含度不包含终了了标志。志。7将字符串中大写字母将字符串中大写字母转换成小写成小写s

32、trlwr()函数函数1调用方式:用方式:strlwr(字符串字符串)2函函数数功功能能:将将字字符符串串中中的的大大写写字字母母转换成成小小写写,其它字符包括小写字母和非字母字符不其它字符包括小写字母和非字母字符不转换。8将字符串中小写字母将字符串中小写字母转换成大写成大写strupr()函数函数1调用方式:用方式:strupr(字符串字符串)2函函数数功功能能:将将字字符符串串中中小小写写字字母母转换成成大大写写,其它字符包括大写字母和非字母字符不其它字符包括大写字母和非字母字符不转换。7.5 数数组作作为函数参数函数参数数组用作函数参数有两种方式:一种是把数数组用作函数参数有两种方式:一

33、种是把数组元素又称下标变量作为实参运用;另一组元素又称下标变量作为实参运用;另一种是把数组名作为函数的形参和实参运用。种是把数组名作为函数的形参和实参运用。 7.5.1 数组元素作为函数参数数组元素作为函数参数 7.5.2 数组名作为函数的形参和实参数组名作为函数的形参和实参 7.5.1 数组元素作为函数参数 数组元素就是下标变量,它与普通变量并无数组元素就是下标变量,它与普通变量并无区别。数组元素只能用作函数实参,其用法与普区别。数组元素只能用作函数实参,其用法与普通变量完全一样:在发生函数调用时,把数组元通变量完全一样:在发生函数调用时,把数组元素的值传送给形参,实现单向值传送。素的值传送

34、给形参,实现单向值传送。例例7.9 写一函数,统计字符串中字母的个数。写一函数,统计字符串中字母的个数。/*功能:数组元素作为函数实参功能:数组元素作为函数实参*/int isalp(char c) if (c=a&c=A&c=Z) return(1); else return(0); main() int i,num=0; char str255; printf(Input a string: ); gets(str); for(i=0;stri!=0;i+) if (isalp(stri) num+; puts(str); printf(num=%dn,num); getch(); 阐明:

35、阐明:1用用数数组组元元素素作作实实参参时时,只只需需数数组组类类型型和和函函数数的的形形参参类类型型一一致致即即可可,并并不不要要求求函函数数的的形形参参也也是是下下标标变变量量。换换句句话话说说,对对数数组组元元素素的的处处置置是是按普通变量对待的。按普通变量对待的。2在在普普通通变变量量或或下下标标变变量量作作函函数数参参数数时时,形形参参变变量量和和实实参参变变量量是是由由编编译译系系统统分分配配的的两两个个不不同同的的内内存存单单元元。在在函函数数调调用用时时发发生生的的值值传传送送,是是把实参变量的值赋予形参变量。把实参变量的值赋予形参变量。7.5.2 数组名作为函数的形参和实参数

36、数组组名名作作函函数数参参数数时时,既既可可以以作作形形参参,也也可可以以作实参。作实参。数数组组名名作作函函数数参参数数时时,要要求求形形参参和和相相对对应应的的实实参参都都必必需需是是类类型型一一样样的的数数组组或或指指向向数数组组的的指指针针变量,都必需有明确的数组阐明变量,都必需有明确的数组阐明例例7.10 知知某某个个学学生生5门门课课程程的的成成果果,求求平平均均成成果。果。float aver(float a ) /*求求平平均均值值函函数数*/ int i; float av,s=a0; for(i=1;i5;i+) s += ai; av=s/5; return av; vo

37、id main() float sco5,av; int i; printf(ninput 5 scores:n); for(i=0;i5;i+) scanf(%f,&scoi); av=aver(sco);/*调用函数,实参为一数组名调用函数,实参为一数组名*/ printf(average score is %5.2fn,av); getch(); 阐明:阐明:1用用数数组组名名作作函函数数参参数数,应应该该在在调调用用函函数数和和被被调调用用函函数数中中分分别别定定义义数数组组,且且数数据据类类型型必必需需一一致致,否否那那么么结结果果将将出出错错。例例如如,在在本本案案例例中中,形形参

38、参数数组组为为float a,实参数组为实参数组为float sco,它们的数据类型一样。,它们的数据类型一样。2C编编译译系系统统对对形形参参数数组组大大小小不不作作检检查查,所所以以形形参数组可以不指定大小。例如,本案例中的形参数组参数组可以不指定大小。例如,本案例中的形参数组a。 假假设设指指定定形形参参数数组组的的大大小小,那那么么实实参参数数组组的的大大小小必必需需大大于于等等于于形形参参数数组组,否否那那么么因因形形参参数数组组的的部部分分元元素素没没有确定值而导致计算结果错误。有确定值而导致计算结果错误。本章习题本章习题P163 7.31 7.32 7.33P164 7.37 7.40 7.44 7.45

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号