- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
scanf函数中的输入项是字符数组名。输入项为字 符数组名时,不要再加地址符&
C语言编译系统对数组名的处理是:数组名代表该 数组的起始地址。
C语言在执行printf(“%s”,c)语句时,按字符数组名c 找到其数组起始地址,然后逐个输出其中的字符, 直到遇到’\0’为止
字符串处理函数
puts(字符数组)
字符数组
用来存放字符数据的数组是字符数组;字 符数组中一个元素存放一个字符
字符数组的定义:
char c[10];
由于字符型与整形是互相通用的,因此上 面的定义也可以改成
int c[10];
字符数组的初始化
逐个字符赋给数组中的各元素
static char c[10]={‘I’,’_’,’a’,’m’,’ _’,’h’,’a’,’p’,’p’,’y’}
这表示只给前面5个元素赋初值,后5个元素值为0
不能给数组整体赋初值
例:int a[10]={0*10};//错
在对全部数组元素赋初值时,可以不指定数组 长度
例: int a[]={0,1,2,3,4}; 注意与int a[10]={0,1,2,3,4};的区别
一维数组的初始化(续)
一维数组的初始化(续)
常量表达式表示元素的个数,即数组长度
长度为N的数组, 数组成员从0开始下标,一直到N-1 使用数组元素a[ N ],错误
常量表达式中可以包括字面常量和符号常量,不能包 含变量;也就是说,C语言不允许对数组的大小作动态 定义,即数组大小不依赖于程序运行过程中变量的值
例:
int n; scanf("%d",&n); int a[n];//错
static char c[]={‘H’,’i’,’\0’,’M’,’a’,’n’,’!’,’\0’}
字符数组的输入输出(续)
空格为利用scanf函数输入多个字符串时的分隔符:
static char str[13]; scanf("%s",str); 则输入How are you?,str数组的状态为How\0
strcpy(str1 ,str2);
字符数组1必须足够大,以便容纳被拷贝的字符串str2 字符数组1必须写成数组名形式,字符串2可以是字符数组
二维数组的定义(续)
C语言中,二维数组中元素排列的顺序是: 按行存放,即在内存中先顺序存放第一行 的元素,再存放第二行的元素,依次类推
a00 a01 a02 a03 a10 a11 a12 a13 a20 a21 a22 a23
二维数组的定义(续)
多维数组的定义
定义三维数组的方法:float a[2][3][4]
可以对部分元素赋初值
int a[3][4] = {{1},{5},{9}}; int a[3][4]={{1},{5,6}}; int a[3][4]={{1},{},{9}} 其余元素自动为0——适合稀疏矩阵
如对全部元素都赋初值,则定义数组时第一维的长 度可省略
a[ ][4]={1,2,3,4,5,6,7,8,9,10,11,12}; int a[][4]={{0,0,3},{},{0,10}};
字符串处理函数(续)
strcat(字符数组1,字符数组2)
连接两个字符数组中的字符串,把字符串2接到字符串1 的后面,结果放在字符数组1中
static char str1[30]={"People's Republic of "}; static char str2={"China"}; printf("%s",strcat(strl,str2));
a[0][0][2] a[0][1][2] a[0][2][2] a[1][0][2] a[1][1][2] a[1][2][2]
a[0][0][3] a[0][1][3] a[0][2][3] a[1][0][3] a[1][1][3] a[1][2][3]
二维数组的引用
二维数组的引用方式:数组名[下标][下标] 严格区分在定义数组时用的a[3][4]和引用元
素时的a[3][4]的区别:
前者用来定义数组的维数和各维的大小 后者a[3][4]中的3和4是下标值,a[3][4]表示某一
个元素 下标值应在已定义的数组大小的范围内; a[3][4]
定义的数组中,没有a[3][4]这个单元
int a[3][4]; //…………. a[3][4]=3;//错误
字符串和字符串结束标志(续)
最经常使用的是以字符串常量的方式初始化字符数 组,并可以省略{}
static char c[] = “I am happy”,该字符串长度为11(因字符 串常量最后由系统自动增加一个’\0’)
等价于static char c[]={'I',’ ’,'a','m',‘ ','h','a','p','p','y','\0'};
一维数组元素的引用
数组必须先定义,然后使用; 数组元素的表示形式:
数组名[下标] 下标可以是整型常量或整型表达式
例:a[0]=a[3*j+2];
一维数组的初始化
如何让数组中的元素具有指定的值?
常用赋值语句或输入语句,例
for (j=0;j<10;++j) a[j]=j;
也可使数组在定义(分配内存)的时候就得到 初值,称为初始化
字符数组并不要求它的最后一个字为‘\0’,甚至可 以不包含‘\0’。象以下这样写完全是合法的:
static char c[5]={'C','h','i','n','a'};//合法 但这样的字符串在printf输出时危险:printf(“%s”,c);
为了使字符数组与字符串常量在处理方法一致,便 于测定字符序列的实际长度在字符数组中也常常人 为地加上一个‘\0’, 如:
将一个字符串输出到终端 用puts函数输出的字符串中可以包含转义字符
static char str[]={"China\nBeijing"}; puts(str);
gets(字符数组)
从终端输入一个字符串到字符数组,该函数返回值是 字符数组的起始地址
用puts和gets函数只能输入或输出一个字符串,不 能写成:puts(str1,str2)或gets(str1,str2)
static char c[6]={'C','h','i','n','a','\0'};
字符数,用格式”%c”格式 符
void main() { static char diamond[][5]= {{' ',' ','*'},{' ','*',' ','*'}, {'*',' ',' ',' ','*'},{' ','*',' ','*'},{' ',' ','*'}}; int i,j; for(i=0;i<5;i++)
一维数组的初始化(续)
二维数组的定义和引用
二维数组的定义
类型 数组名[常量表达式][常量表达式] 例:
float a[3][4];//3行4列的数组 float a[3, 4];//错
C语言把二维数组看作是一种特殊的一维数 组,它的元素又是一个一维数组
二维数组的定义
对a[3][4],可以把a看成一个一维数组,它有3个元 素:a[0],a[1],a[2];每个元素又是一个包含4个 元素的一维数组
函数返回值为字符数组1的地址 字符数组1必须足够大,以便容纳连接后的新字符串 连接前两个字符串的后面都有一个’\0’,连接时将字
符串1后面的’\0’撤消,只在新串最后保留一个’\0’
字符串处理函数(续)
strcpy(字符数组1,字符串2)
将字符串2拷贝到字符数组1中去
static char str1[10],str2[]={"China"};
多位数组在内存中的排列顺序为:第一维 的下标变化最慢,最右边的下标变化最快
实际开发中,不要使用7维以上的多维数组
a[0][0][0] a[0][1][0] a[0][2][0] a[1][0][0] a[1][1][0] a[1][2][0]
a[0][0][1] a[0][1][1] a[0][2][1] a[1][0][1] a[1][1][1] a[1][2][1]
二维数组的初始化
按行给二维数组赋初值
int a[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
将所有数据写在一个花括号内,按数组排列的顺序 给各个元素赋初值
int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12}; 特别是要初始化的元素较多时,不建议此种方式
如果提供的初值个数与预定的数组长度相同,在 定义时可以省略数组的长度
如果花括弧中提供的初值个数(即字符个数)大于数组 长度,则作语法错误处理
如果初值个数小于数组长度,则只将这些字符赋给数组 中前面那些元素,其余的元素自动定为空字符(即'\0')
也可以定义和初始化一个二维字符数组
static char diamond[5][5]={{‘_’,’ _’,’*’}, {‘_’,’*’,’ _’,’*’}, {‘*’,’ _’,‘_’,’ _’,’*’}, {‘_’,’*’,’ _’,’*’}, {‘_’,’ _’,’*’}};