资源描述
,*,N e w H o r i z o n C o l l e g e E n g l i s h,Book 3 Unit 5,VI.Answers To Exercises,*,*,*,*,*,*,*,*,*,*,*,*,第六讲 数组,一维数组,二维数组,字符数组和字符串,第六讲 数组一维数组,C,语言的数据类型,C语言的数据类型,什么是数组?,数组名,数组元素的下标(,C,语言规定下标从,0,开始,),数组元素的访问,简单的说,,数组就是一组有序的、类型相同的数据的集合。,什么是数组?数组名简单的说,数组就是一组有序的、类型相同的数,6.1,一维数组,定义方式:,数据类型 数组名,常量,表达式,;,合法标识符,表示元素个数,下标从,0,开始,a0,0,1,4,5,a1,a2,a3,a4,a5,2,3,a,编译时分配连续内存,数组名表示内存首地址,是,地址常量,例:,int a6;,6.1 一维数组合法标识符 表示元素个数a00145a,一维数组的引用,数组必须,先定义,,,后使用,只能逐个引用数组元素,不能一次引用整个数组,数组元素表示形式:,数组名下标,其中:下标可以是常量或整型表达式,例,int i=15;,int datai;,例,int a10;,printf(“%d”,a);(,),必须,for(j=0;j10;j+),printf(“%dt”,aj);(,),例,int data5;,data5=10;,(,不能用变量定义数组维数,),/C语言对数组不作越界检查,,使用时要,注意,一维数组的引用例 int i=15;例 in,一维数组的初始化,初始化方式,在定义数组时,为数组元素赋初值,(,在编译阶段使之得到初值),int a5=1,2,3,4,5;,等价于:,a0=1;a1=2;a2=3;a3=4;a4=5;,说明:,数组不初始化,其元素值为随机数,对static数组元素不赋初值,系统会自动赋以0值,当全部数组元素赋初值时,可不指定数组长度,如,int a5=6,2,3;,等价于:,a0=6;a1=2;a2=3;a3=0;a4=0;,如,int a3=6,2,3,5,1;,static int a5;,等价于:,a0=0;a1=0;a2=0;a3=0;a4=0;,只给部分数组元素赋初值,int a=1,2,3,4,5,6;,编译系统根据初值个数确定数组维数,一维数组的初始化在定义数组时,为数组元素赋初值 int a,例,1,读,10,个整数存入数组,找出其中最大值和最小值,步骤,:,1.,输入,:for循环输入10个整数,2.,处理,:,(a)先令,max=min=x0,(b)依次用xi和max,min比较(循环),若maxxi,令,min=xi,3.输出:max和,min,#include,#define SIZE 10,void main(),int xSIZE,i,max,min;,printf(Enter 10 integers:n);,for(i=0;iSIZE;i+),printf(%d:,i+1);,scanf(%d,max=min=x0;,for(i=1;iSIZE;i+),if(maxxi)min=xi;,printf(Maximum value is%dn,max);,printf(Minimum value is%dn,min);,例1 读10个整数存入数组,找出其中最大值和最小值步骤:#,例,2,用数组求,Fibonacci数列前20个数,#include,void 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);,f0,f1,f2,f3,f4,f5,f19,.,1,1,f19,0,1,4,5,2,3,19,2,3,5,例2 用数组求Fibonacci数列前20个数#includ,6.2,二维数组,二维数组的定义,定义方式:,数据类型数组名,常量表达式,常量表达式,;,数组元素的存放顺序,原因:内存是一维的,二维数组:按行序优先,多维数组:最右下标变化最快,例,int a34;,float b25;,int c234;,int a3,4;(,),行数,列数,元素个数,=,行数,*,列数,int c234,0,1,2,3,4,5,6,7,.,20,21,22,23,c000,c001,c002,c003,c010,c011,c012,c013,c020,c021,c022,c023,c100,c101,c102,c103,c110,c111,c112,c113,c120,c121,c122,c123,int a32,a,0,1,a,1,0,a,1,1,a,2,0,a,2,1,0,1,4,5,2,3,a,0,0,a00 a01,a10 a11,a20 a21,6.2 二维数组数组元素的存放顺序例 int a34,二维数组理解,例,int a34;,2016,17,2018,19,2020,21,2022,23,2008,9,2010,11,2012,13,2014,15,2000,1,2002,3,2004,5,20006,7,a00,a01,a02,a03,a10,a11,a12,a13,a20,a21,a22,a23,每个元素,ai,由包含,4,个元素,的一维数组组成,二维数组,a,是由,3,个元素组成,a0,a1,a2,行名,0,1,4,5,2,3,a01,a02,a03,a10,a11,a00,a13,a20,a21,a22,a23,a12,6,7,10,11,8,9,a0,a1,a2,二维数组理解例 int a34;2016201,二维数组元素的引用,形式:,数组名,下标,下标,二维数组元素的初始化,分行初始化:,按元素排列顺序初始化,例,int a23=,1,2,3,4,5,6,;,a00,a01,a02,a10,a11,a12,1,2,3,4,5,6,全部初始化,例,int a23=,1,2,4,;,a00,a01,a02,a10,a11,a12,1,2,0,4,0,0,部分初始化,例,int a3=,1,4,5,;,a00,a01,a02,a10,a11,a12,1,0,0,4,5,0,第一维,长度省略初始化,例,int a23=,1,2,3,4,5,6,;,a00,a01,a02,a10,a11,a12,1,2,3,4,5,6,全部初始化,例,int a23=,1,2,4,;,a00,a01,a02,a10,a11,a12,1,2,4,0,0,0,部分初始化,例,int a3=,1,2,3,4,5,;,a00,a01,a02,a10,a11,a12,1,2,3,4,5,0,第一维,长度省略初始化,二维数组元素的引用按元素排列顺序初始化 a00,例,3,将二维数组,a,行列元素互换,存到另一个数组中,#include,void main(),int a23=1,2,3,4,5,6;,int b32,i,j;,printf(array a:n);,for(i=0;i=1;i+),for(j=0;j=2;j+),printf(%5d,aij);,bji=aij;,printf(n);,printf(array b:n);,for(i=0;i=2;i+),for(j=0;j=1;j+),printf(%5d,bij);,printf(n);,a=,1 2 3,4 5 6,b=,1 4,2 5,3 6,例3 将二维数组a行列元素互换,存到另一个数组中#incl,字符串,字符串及其结束标志,无字符串变量,用字符数组处理字符串,字符串结束标志:0,例 “hello”共5个字符,在内存占6个字节,字符串长度5,h e l l o,0,104 101 108 108 111 0,内存存放字符,ASCII,码,6.3,字符数组和字符串,字符串例 “hello”共5个字符,在内存占6个字节,字符数组,定义:,char,数组名,常量表达式,;,字符数组的初始化,逐个字符赋值,用字符串常量,字符数组的引用,例,char c10,ch34;,例,char ch5=,B,o,y,;,ch0,B,o,y,0,0,逐个字符赋值,ch1,ch2,ch3,ch4,例,char ch5=“Boy”;,ch0,B,o,y,0,0,用字符串常量,ch1,ch2,ch3,ch4,例,char ch,6,=,“Hello”,;,char ch6=“Hello”;,char ch=“Hello”;,用字符串常量,ch0,H,e,l,l,o,ch1,ch2,ch3,ch4,0,ch5,字符数组的初始化例 char c10,ch34,字符串的输入输出,逐个字符,I/O,:,%c,整个字符串,I/O,:,%s,例 用,%c,main(),char str5;,int i;,for(i=0;i5;i+),scanf(“%c”,&,stri);,for(i=0;i5;i+),printf(“%c”,stri);,例 用,%s,main(),char str5;,scanf(“%s”,str);,printf(“%s”,str);,用字符数组名,不要加,&,输入串长度,数组维数,遇空格或回车结束,自动加,0,用字符数组名,遇,0,结束,字符串的输入输出例 用%c 例 用%s 用字符数组名,不,例,main(),char a=“Hello”;,printf(“%s”,a);,结果:,Hello,用“,%s”,输出时,遇,0,结束,main(),char a=h,e,l,0,l,o,0;,printf(%s,a);,输出:,hel,h e l 0 l o 0,数组中有多个,0,时,遇第一个结束,例 main()结果:Hello 用“%s”输出时,,例,4,字符串输入举例,#include,main(),char a15,b5,c5;,scanf(%s%s%s,a,b,c);,printf(a=%snb=%snc=%sn,a,b,c);,scanf(%s,a);,printf(a=%sn,a);,运行情况:,输入:,How are you?,输出:,a=How,b=are,c=you?,输入:,How are you?,输出:,a=How,scanf,中%s输入时,遇,空格或回车结束,运行情况:,输入:,How are you?,H o w 0,a r e 0,y o u?0,例4 字符串输入举例#include 运,例 若准备将字符串“,This is a string.”记录下来,,,错误,的输入语句为:,(,A,),for(k=0;k17;k+),sk=getchar();,(,B,),while(c=getchar()!=n),sk+=c;,(,C,),scanf(“%20s”,s);,例 若准备将字符串“This is a strin,字符串输出函数,puts,格式:,puts,(字符数组),功能:向显示器输出字符串(输出完,换行),说明:字符数组必须以,0,结束,字符串输入函数,gets,格式:,gets,(字符数组),功能:从键盘输入一以,回车结束,的字符串放入字符数组中,,并自动加0,说明:输入串长度应小于字符数组维数,例,#include,main(),char string80;,printf(“Input a string:”);,gets(string);,puts(string);,输入,:,How are you?,输出,:,How are you?,常用的字符串处理函数,包含在头文件,#include,字符串输出函数puts字符串输入函数gets例#inc,字符串长度函数,strlen,格式:,strlen,(字符数组),功能:计算字符串长度,返值:返回字符串实际长度,,不包括0在内,例 对于以下字符串,,strlen(s
展开阅读全文