收藏 分享(赏)

7二维数组.ppt

上传人:fmgc7290 文档编号:12253158 上传时间:2021-12-06 格式:PPT 页数:41 大小:498.50KB
下载 相关 举报
7二维数组.ppt_第1页
第1页 / 共41页
7二维数组.ppt_第2页
第2页 / 共41页
7二维数组.ppt_第3页
第3页 / 共41页
7二维数组.ppt_第4页
第4页 / 共41页
7二维数组.ppt_第5页
第5页 / 共41页
点击查看更多>>
资源描述

1、第7章 数组,1. 目的、要求 掌握一维数组的定义、引用及其初始化。 掌握二维数组的定义、引用及其初始化。 掌握字符数组的定义、引用及其初始化。 2. 重点、难点 数组名的含义及其使用中应注意的问题; 二维数组的初始化问题。 字符串函数的使用。,1、二维数组的定义 类型说明符 数组名常量表达式1常量表达式2 float a34,b510; int line515; char data230,s5; 注意:不能写成 float a3,4,b5,10; C语言这种定义二维数组的方式,使得可以把二维数组看成一种特殊的一维数组。如:,a0-a00 a01 a02 a03 a a1-a10 a11 a1

2、2 a13 a2-a20 a21 a22 a23 即把 a看成包含3个元素的一维数组,而每个元素又是一个包含4个元素的一维数组。,二维数组及多维数组 二维数组的定义 定义方式: 数据类型 数组名常量表达式常量表达式;,数组元素的存放顺序 原因:内存是一维的 二维数组:按行序优先 多维数组:最右下标变化最快,例 int a34; float b25; int c234; int a3,4; (),行数,列数,元素个数=行数*列数,int a32,二维数组理解,例 int a34;,每个元素ai由包含4个元素 的一维数组组成,二维数组a是由3个元素组成,二维数组中元素的排列顺序为:按行存放。,存放

3、顺序: 1,2,3行。,a34,a,C语言允许使用多维数组,其基础为二维数组。,如: 语句 int a232;定义一个12个元素的3维数组。,下标变化顺序: 3,2,1。,1) 对二维数组 amn,元素 aij 在数组中的排列位置计算公式为: i * n + j + 1,例:有数组a34, 则a21的位置为: 2*4+1+1=10 表示它是第10个元素。,2) 对二维数组 amn,元素 aij 在数组中的顺序号计算公式为: i * n + j,例:有数组a34, a21的顺序号为: 2*4+1=9 表示它前面有9个元素。,#include main() int i,j,k,a232; for

4、(i=0;i2;i+) for (j=0;j3;j+) for (k=0;k2;k+) scanf(%d, ,例、向3维数组赋值并输出其全部元素。,2、 二维数组的初始化,1)分行初始化。如: int a34=1,2,3,4,5,6,7,8,9,10,11,12; 2)也可将数据写在一个花括号内,系统按排列顺序对元素赋初值, 即按行连续赋值,在之间列出所有元素。如: int a34=1,2,3,4,5,6,7,8,9,10,11,12; 3)也可对部分元素赋初值。如 int a34=1,5,9; int a22=1,2 1 0 0 0 等价于 a00=1,a01=2, 5 0 0 0 a10=

5、0,a11=0. 9 0 0 0,int a34=1,0,6,0,0,11; 其结果为: 1 0 0 0 0 6 0 0 0 0 11 0,int a34=1,5,6; 其结果为: 1 0 0 0 5 6 0 0 0 0 0 0,也可以对第二行不赋初值:如 int a34=1, ,9;,4)若对全部元素都赋初值,则定义数组时对第一维的长度可以不指定,但第二维的长度不能省略。,int a34=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;,若定义时省略第一维的长度并部分赋初值,则应采用分行赋初值的方法。如: i

6、nt a 4=0,0,3, ,0,10; 结果为 0 0 3 0 0 0 0 0 0 10 0 0,二维数组元素的引用 形式: 数组名下标下标 二维数组元素的初始化 分行初始化:,按元素排列顺序初始化,例、给二维数组元素赋初值并输出,#include main() int i,j; int a33=1,2,3,4,5,6,7,8,9; for(i=0;i3;i+) for(j=0;j3;j+) printf(“%4d”,aij); printf(“n”); ,运行结果: 1 2 3 4 5 6 7 8 9,3 、二维数组的引用 数组必须“先定义,后引用”。 二维数组元素的表示形式: 数组名下标

7、1下标2 下标可以是整型表达式。 数组元素可以出现在表达式中,也可以被赋值。如: b12=a23/2; 注意:下标值的范围不能越界。常见错误: int a34; | a34=3;,下标变量a34指数组a34以外的某一存储单元。,#include main() int i,j,a33,b33,c33; for(i=0;i3;i+) for(j=0;j3;j+) cij=aij+bij; ,for(i=0;i3;i+) for(j=0;j3;j+) cij=aji;,例、实现矩阵a和b的加法,例、实现矩阵a的转置,即将其每行元素转换成相应的列元素,4、利用循环语句对二维数组赋值,#include

8、main() int i,j,a33; for(i=0;i3;i+) for(j=0;j3;j+) printf(a%d%d=,i,j); scanf(%d, ,例、打印一个数字方阵(5X5阶),使它的正对角元素为0,其余元素为1。,#include main() int i,j,a55; for(i=0;i5;i+) for(j=0;j5;j+) if(i=j)aij=0; else aij=1; for(i=0;i5;i+) for(j=0;j5;j+) printf(“%4d”,aij); printf(“n”); ,运行结果: 0 1 1 1 1 1 0 1 1 1 1 1 0 1 1

9、 1 1 1 0 1 1 1 1 1 0,字 符 数 组,概念: 用来存放字符数据的数组称为字符数组,数组中一个元素存放一个字符。 1 字符数组的定义 char c10;或 int c10; (因字符型与整型互相通用) 2 字符数组的初始化 字符数组初始化最易理解的形式为逐个字符赋给数组中的各元素。如: char c10=I, , a, m,;,若花括号中提供的初值个数大于数组长度,则出语法错误;若初值个数小于数组长度,则将初值赋给数组前面的元素,后面的元素自动定为空字符(0)。如: char c6=H, e, r, e, !; 其数组状态为:,若提供的初值个数与预定的数组长度相同,在定义时可

10、以省略数组长度。 定义和初始化二维字符数组的方法与前述数值型二维数组类似。,char diamond55=, , *, , *, , *, *, , , , *, , *, , *, , , *;,* * * * * * * *,3 字符数组的引用,例:字符数组输出字符串,main() char c10=I, ,a,m, ,a, ,b,o,y; int i; for (i=0;i10;i+) printf(%c,ci); printf(n); ,例:字符数组输出钻石图形,main() char diamond5= , ,*, ,*, ,*,*, , , ,*, ,*, ,*, , ,*; in

11、t i,j; for (i=0;i5;i+) for (j=0;j5;j+) printf(%c,diamondij); printf(n); ,4 字符串和字符串结束标志,C语言中,可以将字符串作为字符数组来处理, 字符串结束标志为0,是一个“空操作符”,其 ASCII码值为0。因而不会产生附加的操作或增加 有效字符,只是一个辨别的标志而已。,C语言中没有字符串变量,通常用字符数组来存放字符串。字符串以0作为串的结束标志,当一个字符串存入字符数组时,同时也把结束符0存入数组。,由于数组是一些具有相同特性的变量构成的带下标的变量,所以作为字符序列的字符串显然可构成数组,因此字符数组可用字符串常

12、量来初始化。如:,char c =“Hello, boys and girls!”或直接写成 char c =“Hello, boys and girls!”; 注意:1)字符串用双引号而不是单引号; 2)数组C的长度为22而不是21。,几点说明:,1)字符数组是否需要其最后一个字符为0完全根据需要确定。下列用法完全合法: char c5=C,h,i,n,a; 2) 只要使用字符串常量,系统就会自动加一个0。 3)为了测定字符串的实际长度时处理方法一致,通常在字符数组中人为加一个0。如: char c6=C,h,i,n,a,0;,5 字符数组的输入输出,1). 用格式符“%c”逐个字符输入输出

13、; 2). 用格式符“%s”将字符串一次输入输出。如: char c =“happy”; printf(“%s”,c); 结果为: happy 注意:1)输出字符不包括结束符0; 2)使用“%s”格式时,printf函数的输出项是字符数组名“c”,而不是数组元素名“ci”;,3)若数组长度大于字符串实际长度,也只输出到0。 4)若数组中包含若干个0,则只输出到第一个0。,当使用scanf函数时,系统会自动在输入最后一个字符后加结束符0。同样的scanf函数的输入项是字符数组名,而不是数组元素名。并且数组名前不加地址符 gets(name); printf(“%sn”,name);,运行结果:

14、Hello,world Hello,world,gets(字符数组1,字符数组2),3. strcat(字符数组1,字符数组2) 功能:连接两个字符串,结果放在字符数组1中。 说明:1)字符数组1必须有足够的长度; 2)连接时原数组1后的0自动取消,即后一 字符串将从前一字符串的0处开始连接。,#include #include main() char str130=My name is ,str220; gets(str2); strcat(str1,str2); /*strcat(str1,Tom);*/ printf(%sn,str1); ,4. strcpy(字符数组1,字符串2) 功

15、能:将字符串2拷贝到字符数组1中。,说明:1)数组1必须有足够的长度; 2)字符串2可以是字符串常量,数组1必须是数组名; 3)连同字符串后的0一起拷贝; 4)赋值语句只能将一个字符赋给一个字符型变量或字符数组元素;而不能将一个字符串常量或字符数组直接赋给另一个字符数组。这种操作只能用strcpy函数实现。 str1=“China”; str1=str2; 5)strncpy函数只取字符串2中前面的若干个字符置换串1中的前n个字符。 strncpy=(str1,str2,2);,#include #include main() char str130=My name is ,str220; g

16、ets(str2); strcat(str1,str2); strcpy(str1,str2); printf(%sn,str1); ,例、字符串函数应用,运行结果: 输入:Janette 输出:Janette,运行结果: 输入:Janette 输出:Ja name is Janette,/* strncpy(str1,str2,2); */,5. strcmp(字符串1,字符串2) 功能:按ASCII码值大小比较两个字符串。 比较规则: 1)若两个字符串的字符序列完全相同,则两个串相等 2)开头字母的ASCII 码较小的串小,如“apple”“orange” 3)开头字母相同,则比较第二个,

17、如“exercise”“express” 4)空字符串小于任何字符串,若两串开始的一串字符相同,则较短的串小,如“abc”字符串2,函数值为一正整数; 7)字符串10) strcpy(string,str2); printf(nthe largest string is:n%sn,string); ,输入:CHINA HOLLAND AMERICA 输出: HOLLAND,例:输出3个字符串中最大者,解题思路及输入“ I am a boy.”时各参数的状态如下:,例:统计单词个数,#include stdio.h main() char string81; int i,num=0,word=0; char c; 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); ,P142 7.10, 7.11 补充: 1、有五个同学,每人有三门课,从键盘输入每人每门课的成绩,求每个同学三门课程的平均成绩。 2、计算网络域名地址的长度,如“”的长度为3,而“”的长度为4。,作 业,

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

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

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


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

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

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