收藏 分享(赏)

C语言chap7(多维数组).ppt

上传人:hwpkd79526 文档编号:10024000 上传时间:2019-09-29 格式:PPT 页数:40 大小:203.50KB
下载 相关 举报
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页
点击查看更多>>
资源描述

1、7.1 一维数组,第 7 章 多维数组,1一维数组的定义,语句形式:类型说明符 数组名常量表达式,说明: 数组名定名规则和变量名相同。, 常量表达式表示数组元素的个数,即数组的长度。如:int a10; 表示a数组有10个元素:a0,a1,a2, a9,没有a10。,注意:数组的下标是从0开始的。,2一维数组元素的引用, C不允许对数组进行动态定义。以下作法是错误的。int n;scanf(“%d”,数组必须先定义,然后再使用。C的数组元素只能逐个引用而不能一次引用整个数组。一维数组元素的表示形式为:数组名下标 下标可以是整型常量或整型表达式。,例7.1main( ) int i,a10;fo

2、r (i=0; i=0; i-)printf(“%2d”,a i);,输出结果: 10 9 8 7 6 5 4 3 2 1,3一维数组的初始化,赋值语句和输入语句均可使数组中的元素赋初值,但占用运行时间。简捷的方法是在程序运行之前使数组初始化。,对数组元素初始化的方法有:,1) 在定义数组时对数组元素赋以初值。如:static int a10=0,1,2,3,4,5,6,7,8,9;,说明: 依次赋予数组元素的初值必须用 括起来。, “static”是C的一个关键字,意为“静态存储”。C规定只有静态存储(static)数组和外部存储(extern)数组才能初始化。,2) 可以只给一部分元素赋值

3、。如:static int a10=0,1,2,3,4;,3) 在C中系统会自动对所定义的静态数组的每个元素赋初值0。,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”, ,例7.3 用冒泡法将10个数按从小到大排序。,当有n个数时需要作n1趟这样的搜索,每趟搜索要作n1次比较。,main( )

4、int i, j,t,a11;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); ,7.2. 二维数组,语句形式:类型说明符 数组名常量表达式1 常量表达式2,如:float a34; 定义a是一个3x4 (3行4列)的数组,即a数组有12个元素。,但不得写成:float a3,4;,注意: 二维数组中元素的排列顺序为按行按列。即存放完第1 行的元素后再接着存放第 2

5、行的元素,依次类推。, C允许定义多维数组。如:float 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; 同样,static int a 4=0,

6、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”);printf(“array b:n”);for (i=0; i=2; i+) for ( j=0; j=1; j+) printf(“

7、%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; imax) max=ai j; c=j;printf(“max=%2d,row=%d,colum=%dn”, max,i+1,c+1); ,输出结果: max=11, row=1, colum=3 max= 9, row=2, colum=2 max=13, row=3, colum=2,7.3 多维数组 与二维数组的定义类似

8、例如: int a345, b2453; 分别为定义的三维、四维数组。 其中,a有60个元素,b有120个元素。 7.4字符数组与字符串,7.4.1 字符数组的逐个字符操作,例7.6 从键盘输入一个字符串,回车键结束,并将字符串在屏幕上输出。 main( )int i; static char str80;clrscr(); for(i=0;i80;i+) stri=getch(); /*逐次给数组元素stri赋值,但不回显在屏幕上*/printf(“*“); /*以星号代替输入字符的个数*/if(stri=x0d) break;/*若输入回车则终止循环*/ i=0;while(stri!=x

9、0d)printf(“%c“,stri+); /*逐次输出字符数组的各个元素*/printf(“n“); getch(); /*程序暂停*/,1字符数组的定义 1维字符数组,用于存储和处理1个字符串,其定义格式与1维数值数组一样。 2维字符数组,用于同时存储和处理多个字符串,其定义格式与2维数值数组一样。2字符数组的初始化 字符数组的初始化,可以通过为每个数组元素指定初值字符来实现。3字符数组的引用字符数组的逐个字符引用,与引用数值数组元素类似。,(1)字符数组的输入除了可以通过初始化使字符数组各元素得到初值外,也可以使用getchar()或scanf()函数输入字符。例如:char str1

10、0; for(i=0; i10; i+) scanf(“%c“, /*清除键盘输入缓冲区*/ ,(2)字符数组的输出字符数组的输出,可以用putchar()或printf()函数。例如:char str10=“c language“; for(i=0; i10; i+) printf(“%c“, stri); printf(“n“); 注意:逐个字符输入、输出时,要指出元素的下标,而且使用“%c”格式符。另外,从键盘上输入字符时,无需输入字符的定界符单引号;输出时,系统也不输出字符的定界符。,Scanf(“%s”)方式输入字符串时: 从第一个非空白字符开始,遇到第一个空白字符结束;并在末尾自动

11、补上一个字符0 #include main( ) char name13; int i; for (i =0; i =12; i +) scanf(“ %c”, ,例7e_1:采用不同的方式输入输出字符串,运行结果: Pear & Apple Pear & Apple Pear & Apple Pear,#include #include main( ) int i;char name74=“sun“,“mon“,“tue“,“wed“, “thu“,“wen“,“sat“;printf(“Result is:n“);name03= ,例: 7e_2字符串数组值的改变。,程序运行结果: sun

12、&mon mon tue&wed wed thu wen&sat sat,赋初值:,改变后:,7.4.2 字符数组的整体操作,例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语言中的字符串,可以包括字母、数字、专用字符、转

13、义字符等。 C语言规定:以0作为字符串结束标志(0代表ASCII码为0的字符,表示一个“空操作”,只起一个标志作用)。因此可以对字符数组采用另一种方式进行操作了字符数组的整体操作。,注意:由于系统在存储字符串常量时,会在串尾自动加上1个结束标志,所以无需人为地再加1个。 另外,由于结束标志也要在字符数组中占用一个元素的存储空间,因此在说明字符数组长度时,至少为字符串所需长度加1。2字符数组的整体初始化 字符串设置了结束标志以后,对字符数组的初始化,就可以用字符串常量来初始化字符数组。3字符数组的整体引用 (1)字符串的输入 除了可以通过初始化使字符数组各元素得到初值外,也可以使用scanf()

14、函数输入字符串。 (2)字符串的输出 printf()函数,不仅可以逐个输出字符数组元素,还可以整体输出存放在字符数组中的字符串。,7.4.3 常用的字符串处理函数,字符串标准函数的原型在头文件string.h中。1输入字符串gets()函数 (1)调用方式:gets(字符数组) (2)函数功能:从标准输入设备(stdin)键盘上,读取1个字符串(可以包含空格),并将其存储到字符数组中去。 (3)使用说明1)gets()读取的字符串,其长度没有限制,编程者要保证字符数组有足够大的空间,存放输入的字符串。2)该函数输入的字符串中允许包含空格,而scanf()函数不允许。遇到回车输入结束!,2输出

15、字符串puts()函数 (1)调用方式:puts(字符数组) (2)函数功能:把字符数组中所存放的字符串,输出到标准输出设备中去,并用n取代字符串的结束标志0。所以用puts()函数输出字符串时,不要求另加换行符。 ( 3)使用说明 1)字符串中允许包含转义字符,输出时产生一个控制操作。 2)该函数一次只能输出一个字符串,而printf()函数也能用来输出字符串,且一次能输出多个。,1. 输入(用scanf(“%s”),(2) 输入多个字符串,可用空格隔开。static char str15, str25, str35;scanf(“%s%s%s“, str1, str2,str3);,(1)

16、 输入字符串时,系统自动加上0,输入 How are youstr1得到: H o w0 str2得到: a r e0 str3得到: y o u 0,2.输入(用gets()static char str 15,gets(str);输入:how are you 则str得到: how are you0 例7e_3(演示)#include #include main()static char str15,str25,str35,str15;scanf(“%s%s%s“, str1, str2,str3); /*输入 how are you回车*/printf(“%s%s%s%sn“, str1

17、, str2,str3);puts(str1);puts(str2);puts(str3); /*puts()将0转换为n*/fflush(stdin); /*清除键盘缓冲区,內部位置指针置首位*/gets(str); /*输入 how are you回车*/ puts(str);,运行屏幕显示: how are you howareyou how are you how are you how are you,例7e_4(演示) 从键盘按下面次序输入,分析程序结果:aa bb回车cc dd回车 #include #include main() char a15,a25,a35,a45;sca

18、nf(“%s%s”,a1,a2);gets(a3);gets(a4);puts(a1); puts(a2);puts(a3); puts(a4); ,程序运行结果: aa bbcc dd,说明: 输入流为一队列aabbccdd scanf(“%s”,);从队列中一个一个地读字符,每读一个,标准输入设备文件stdin内部指针向右移动一个字符位置;以非空白字符开始,以第一个空白字符结束. gets();从队列中一个一个地读字符,每读一个,标准输入设备文件内部指针向右移动一个字符位置;以为串输入结束标志. 则: a15:aa0 a25:bb0 a35:0 a45:ccdd0,3字符串比较strcmp

19、()函数 (1)调用方式:strcmp(字符串1 ,字符串2) 其中“字符串”可以是串常量,也可以是1维字符数组。 (2)函数功能:比较两个字符串的大小。 如果:字符串1=字符串2,函数返回值等于0;字符串1字符串2,函数返回值正整数。 (3)使用说明 1)如果一个字符串是另一个字符串从头开始的子串,则母串为大。 2)不能使用关系运算符“”来比较两个字符串,只能用strcmp() 函数来处理。,例7.8 gets函数和strcmp函数的应用。 /*功能:简单密码检测程序*/ #include “stdio.h“ main()char pass_str80; /*定义字符数组pass_str*/

20、int i=0;/*检验密码*/while(1)clrscr();printf(“请输入密码n“);gets(pass_str); /*输入密码*/,/*假定正确口令为password*/ if(strcmp(pass_str,“password”)!=0) printf(“口令错误,按任意键继续“);elsebreak; /*输入正确的密码,中止循环*/getch();i+;if(i=3) exit(0);/*输入三次错误的密码,退出程序*/ /*以下为输入正确密码所进入的程序段*/printf(“密码正确!欢迎你进入!“); ,4拷贝字符串strcpy()函数 (1)调用方式:strcpy

21、(字符数组, 字符串) 其中“字符串”可以是串常量,也可以是字符数组。 (2)函数功能:将“字符串”完整地复制到“字符数组”中,字符数组中原有内容被覆盖。 (3)使用说明 1)字符数组必须定义得足够大,以便容纳复制过来的字符串。复制时,连同结束标志0一起复制。 2)不能用赋值运算符“”将一个字符串直接赋值给一个字符数组,只能用strcpy()函数来处理。,5连接字符串strcat()函数 (1)调用方式:strcat(字符数组, 字符串) (2)函数功能:把“字符串”连接到“字符数组”中的字符串尾端,并存储于“字符数组”中。“字符数组”中原来的结束标志,被“字符串”的第一个字符覆盖,而“字符串

22、”在操作中未被修改。 (3)使用说明1)由于没有边界检查,编程者要注意保证“字符数组”定义得足够大,以便容纳连接后的目标字符串;否则,会因长度不够而产生问题。2)连接前两个字符串都有结束标志0,连接后“字符数组”中存储的字符串的结束标志0被舍弃,只在目标串的最后保留一个0。,6求字符串长度strlen()函数(len是length的缩写) (1)调用方式:strlen(字符串) (2)函数功能:求字符串(常量或字符数组)的实际长度(不包含结束标志)。 7将字符串中大写字母转换成小写strlwr()函数 (1)调用方式:strlwr(字符串) (2)函数功能:将字符串中的大写字母转换成小写,其它

23、字符(包括小写字母和非字母字符)不转换。 8将字符串中小写字母转换成大写strupr()函数 (1)调用方式:strupr(字符串) (2)函数功能:将字符串中小写字母转换成大写,其它字符(包括大写字母和非字母字符)不转换。,7.5 数组作为函数参数,数组用作函数参数有两种形式:一种是把数组元素(又称下标变量)作为实参使用;另一种是把数组名作为函数的形参和实参使用。 7.5.1 数组元素作为函数参数 7.5.2 数组名作为函数的形参和实参,7.5.1 数组元素作为函数参数,数组元素就是下标变量,它与普通变量并无区别。数组元素只能用作函数实参,其用法与普通变量完全相同:在发生函数调用时,把数组元

24、素的值传送给形参,实现单向值传送。 例7.9 写一函数,统计字符串中字母的个数。 /*功能:数组元素作为函数实参*/ int isalp(char c) if (c=a,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();,说明: (1)用数组元素作实参时,只要数组类型和函数的形参类型一致即可,并不要求函数的形参也是下标变量。换句话说,对数组元素的处理是

25、按普通变量对待的。 (2)在普通变量或下标变量作函数参数时,形参变量和实参变量是由编译系统分配的两个不同的内存单元。在函数调用时发生的值传送,是把实参变量的值赋予形参变量。,7.5.2 数组名作为函数的形参和实参,数组名作函数参数时,既可以作形参,也可以作实参。 数组名作函数参数时,要求形参和相对应的实参都必须是类型相同的数组(或指向数组的指针变量),都必须有明确的数组说明 例7.10 已知某个学生5门课程的成绩,求平均成绩。 float aver(float a ) /*求平均值函数*/ int i;float av,s=a0; for(i=1;i5;i+) s += ai;av=s/5;r

26、eturn av;,void main() float sco5,av;int i;printf(“ninput 5 scores:n“);for(i=0;i5;i+) scanf(“%f“,说明: (1)用数组名作函数参数,应该在调用函数和被调用函数中分别定义数组,且数据类型必须一致,否则结果将出错。例如,在本案例中,形参数组为float a,实参数组为float sco,它们的数据类型相同。 (2)C编译系统对形参数组大小不作检查,所以形参数组可以不指定大小。例如,本案例中的形参数组a。如果指定形参数组的大小,则实参数组的大小必须大于等于形参数组,否则因形参数组的部分元素没有确定值而导致计算结果错误。,本章习题P163 7.31 7.32 7.33 P164 7.37 7.40 7.44 7.45,

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

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报