c语言第五章数组_第1页
c语言第五章数组_第2页
c语言第五章数组_第3页
c语言第五章数组_第4页
c语言第五章数组_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 C语言支持的数据类型 数据类型决定:数据类型决定:1. 1. 数据占内存字节数数据占内存字节数2. 2. 数据取值范围数据取值范围3. 3. 可进行的操作可进行的操作数据类型数据类型本章要点本章要点1.1.什么是数组什么是数组? ? 为什么要使用数组为什么要使用数组? ? 如何定义数组如何定义数组? ?2.2.如何引用数组元素如何引用数组元素? ?3.3.数组元素在内存中按什么方式存放数组元素在内存中按什么方式存放? ?4.4.什么是字符串什么是字符串? ? 字符串结束符的作用是什么字符串结束符的作用是什么? ?5.5.如何实现字符串的存储和操作,包括字符串的输入如何实现字符串的存储和操作,

2、包括字符串的输入和输出和输出? ?6.6.怎样理解怎样理解C C语言将字符串作为一个特殊的一维字符语言将字符串作为一个特殊的一维字符数组数组? ? 5.1 一维数组一维数组5.2 二维数组二维数组5.3字符数组和字符串字符数组和字符串问题的提出问题的提出n输入输入10个数,之后再将他们输出。个数,之后再将他们输出。main( ) int a0,a1,a2,a3,a4,a5,a6,a7,a8,a9; scanf(“%d”,&a0); scanf(“%d”,&a1); scanf(“%d”,&a2); scanf(“%d”,&a3); scanf(“%d”,&

3、;a4); scanf(“%d”,&a5); scanf(“%d”,&a6); scanf(“%d”,&a7); scanf(“%d”,&a8); scanf(“%d”,&a9);printf(“%d”,a0);printf(“%d”,a1);printf(“%d”,a2);printf(“%d”,a3);printf(“%d”,a4);printf(“%d”,a5);printf(“%d”,a6);printf(“%d”,a7); printf(“%d”,a8);printf(“%d”,a9); 5.1 一维数组一维数组5.2 二维数组二维数组5.3字

4、符数组和字符串字符数组和字符串问题的提出问题的提出n我们希望我们希望main( ) 一下定义一下定义10个整数个整数 a10; 循环输入循环输入 scanf(“%d”,&ai); 循环输出循环输出 printf(“%d”,ai); 一批相同类型的变量使用同一个数组变量名,用下一批相同类型的变量使用同一个数组变量名,用下标来相互区分。标来相互区分。优点:表述简洁,可读性高;便于使用优点:表述简洁,可读性高;便于使用循环循环结构结构 5.1 一维数组一维数组5.2 二维数组二维数组5.3字符数组和字符串字符数组和字符串数组的概念数组的概念n数组:数组:相同类型相同类型变量的集合,共用一个名

5、字,用变量的集合,共用一个名字,用下标区别。下标区别。n按照下标递增在内存中连续存放。按照下标递增在内存中连续存放。n数组元素:数组中的变量。数组元素:数组中的变量。n每个元素都属于同一类型。每个元素都属于同一类型。n由由数组名数组名和和下标下标唯一标识。唯一标识。 5.1 一维数组一维数组5.2 二维数组二维数组5.3字符数组和字符串字符数组和字符串第五章数组第五章数组5.1 一维数组一维数组5.2 二维数组二维数组5.3 字符数组和字符串字符数组和字符串l 一维数组好比数学中的数列,各个元素排成一排。一维数组好比数学中的数列,各个元素排成一排。l二维数组好比数学中的矩阵,各个元素先站成排,

6、二维数组好比数学中的矩阵,各个元素先站成排,各个排再站成列。各个排再站成列。l字符数组也是一维或二维数组,它的元素都是字符字符数组也是一维或二维数组,它的元素都是字符型变量。型变量。 5.1 一维数组一维数组5.2 二维数组二维数组5.3字符数组和字符串字符数组和字符串5.1 一维数组一维数组n一维数组是一种构造数据类型。一维数组是一种构造数据类型。学习如下:学习如下:n5.1.1 一维数组定义一维数组定义n5.1.2 一维数组元素的引用一维数组元素的引用n5.1.3 一维数组的初始化一维数组的初始化 5.1 一维数组一维数组5.2 二维数组二维数组5.3字符数组和字符串字符数组和字符串5.1

7、.1 一维数组的定义一维数组的定义n一维数组的定义形式:一维数组的定义形式: 数据类型数据类型 数组名数组名常量表达式常量表达式合法标识符合法标识符数组元素个数,数组长度数组元素个数,数组长度数组元素的类型数组元素的类型2004 a0 a1 a2 a920002008内存内存2036例例 int a10;一批相同类型的变量一批相同类型的变量使用同一个数组名使用同一个数组名, ,用下标来相互区分。用下标来相互区分。 5.1 一维数组一维数组5.2 二维数组二维数组5.3字符数组和字符串字符数组和字符串5.1.1 一维数组的定义一维数组的定义l 数组名遵循标识符的命名规则。数组名遵循标识符的命名规

8、则。l注意使用注意使用 l数据类型可以是任何类型,如数据类型可以是任何类型,如int,float,charl常量表达式说明数组元素个数定义后不允许改变。常量表达式说明数组元素个数定义后不允许改变。n正确的定义方式正确的定义方式n int b2+3;n int c10;n错误的定义方式错误的定义方式 n int x=10,ax;n int a(10);n int a1.0; 5.1 一维数组一维数组5.2 二维数组二维数组5.3字符数组和字符串字符数组和字符串n数组元素必须先定义,后使用。数组元素必须先定义,后使用。n不能一次使用整个数组,只能使用元素。不能一次使用整个数组,只能使用元素。n使用

9、数组元素与使用使用数组元素与使用一般变量一般变量方法完全相同。方法完全相同。使用数组元素的形式:数组名使用数组元素的形式:数组名下标下标例如例如 int a10 ;/定义定义10个变量:个变量:a0、a1 a9 scanf(“%d”,&a0); /为为a0赋值赋值 a1=10* *a0; /计算计算a1的值的值 printf(“%d”,a1); /输出输出a1n下标不要越界,不能使用下标不要越界,不能使用a105.1.2 一维数组元素的引用一维数组元素的引用 5.1 一维数组一维数组5.2 二维数组二维数组5.3字符数组和字符串字符数组和字符串5.1.3 一维数组的初始化一维数组的初始

10、化n (1)对全部数组元素赋初始值对全部数组元素赋初始值 int a5=1,2,3,4,5;a12345 a0 a1 a2 a3 a4n(2)对部分数组元素赋初始值对部分数组元素赋初始值 int a5=1,2,3;n(3)可以省略数组长度,系统自动计算。可以省略数组长度,系统自动计算。 int a =1,2,3,4,5; /长度就是长度就是5 a12300 a0 a1 a2 a3 a4 5.1 一维数组一维数组5.2 二维数组二维数组5.3字符数组和字符串字符数组和字符串5.1.3 一维数组的初始化一维数组的初始化n 问题问题1,例如,例如int a5; printf(“%d”,a0); 会输

11、出什么?会输出什么?随机数随机数n 问题问题2,要定义,要定义100个整型变量,初值都为个整型变量,初值都为0,怎么写?,怎么写?int a100=0; 5.1 一维数组一维数组5.2 二维数组二维数组5.3字符数组和字符串字符数组和字符串 只能逐个对数组元素进行操作(字符数组例外)只能逐个对数组元素进行操作(字符数组例外)输入方法:输入方法:int a10,i;输入第输入第i个数组元素:个数组元素:scanf(%d,&ai);输入所有数组元素:输入所有数组元素:for (i=0;i10;i+) scanf(%d,&ai);输出方法:输出方法:输出第输出第i个数组元素:个数组元

12、素:printf(%d,ai); 输出所有数组元素:输出所有数组元素:for (i=0;i10;i+) printf(%d,ai);5.1.4 5.1.4 一维数组应用举例一维数组应用举例n一维数组的输入和输出一维数组的输入和输出 5.1 一维数组一维数组5.2 二维数组二维数组5.3字符数组和字符串字符数组和字符串5.1.4 5.1.4 一维数组应用举例一维数组应用举例例例5.1 建立一个存放建立一个存放10个数据的数组,数组元素值为数个数据的数组,数组元素值为数组元素下标的组元素下标的10倍,然后按正序和逆序输出。倍,然后按正序和逆序输出。010 2090807060504030正序输出正

13、序输出 0 10 20 30 40 50 60 70 80 90逆序输出逆序输出 90 80 70 60 50 40 30 20 10 0a a0 a1 a2 a3 a4 a5 a6 a7 a8 a9n第一步:定义含有第一步:定义含有10个整型数据元素的数组个整型数据元素的数组an第二步:为第二步:为a的的10个元素个元素a0、a1.a9分别赋值分别赋值n第三步:正序输出,即输出第三步:正序输出,即输出a0、a1.a9n第四步:逆序输出,即输出第四步:逆序输出,即输出a9、a8.a0 5.1 一维数组一维数组5.2 二维数组二维数组5.3字符数组和字符串字符数组和字符串通过循环,逐个处理数组元

14、素通过循环,逐个处理数组元素;变量变量 i i 既做既做 数组下标,又做数组下标,又做 循环变量。循环变量。5.1.4 5.1.4 一维数组应用举例一维数组应用举例n int a10,i;n 对于对于i从从0到到9循环循环 ai=10* *i;n 对于对于i从从0到到9循环循环 printf(“%d“,ai);n 对于对于i从从9到到0循环循环 printf(“%d“,ai);void main() int a10 ,i; for(i=0;i10;i+) /*赋值赋值*/ ai=i* *10; for(i=0;i=0;i-) /*逆序输出逆序输出*/ printf(%5d,ai); 5.1 一

15、维数组一维数组5.2 二维数组二维数组5.3字符数组和字符串字符数组和字符串例例 5.2 用数组求用数组求Fibonacci数列前数列前20个数个数f0f1f2f3f4f5f19.11f19014523192355.1.4 5.1.4 一维数组应用举例一维数组应用举例1, 1, 2, 3, 5, 8, 13, f0=1f1=1fn=fn-1+fn-2 (n=2) 5.1 一维数组一维数组5.2 二维数组二维数组5.3字符数组和字符串字符数组和字符串void main( ) int i; int f 20 = 1, 1; /* 数组初始化数组初始化 */ for(i = 2; i 20; i+)

16、 f i = f i - 1 + f i - 2; /*计算数列并存到数组计算数列并存到数组*/ for(i = 0; i max) max=ai;nsum+=ai;nave=sum/10;n输出最大值,总和,平均值输出最大值,总和,平均值void main()int a10,i,max ; . . scanf(%d,&ai); max=a0; for(i=0;i10;i+) if(maxai) max=ai; . ; . ; 输出输出max ,sum,ave ; ,sum=0,avesum+=aiave=sum/10for(i=0;ia1a0a1,则交则交换;然后比较第二个数与第三个

17、数;依次类推,直至第换;然后比较第二个数与第三个数;依次类推,直至第n-1n-1个数和第个数和第n n个数比较为止个数比较为止第一趟冒泡排序,结果最大的第一趟冒泡排序,结果最大的数被安置在最后一个元素位置上数被安置在最后一个元素位置上。(2 2)对前)对前n-1n-1个数进行第二趟冒泡排序,结果使次大的数被个数进行第二趟冒泡排序,结果使次大的数被安置在第安置在第n-1n-1个元素位置个元素位置。(3 3)重复上述过程,共经过)重复上述过程,共经过n-1n-1趟冒泡排序后,排序结束趟冒泡排序后,排序结束。 5.1 一维数组一维数组5.2 二维数组二维数组5.3字符数组和字符串字符数组和字符串 3

18、 4 4冒泡排序过程冒泡排序过程a0a1a2a3 第一趟排序第一趟排序 1 3 2 1 3 2 4 4 第第 二趟排序二趟排序 2 1 3 4 第第 三趟排序三趟排序 1 2 3 4结果结果 5.1 一维数组一维数组5.2 二维数组二维数组5.3字符数组和字符串字符数组和字符串main() int a10,i,j,t; for(i=0;i10;i+)/*输入输入*/ scanf(%d,&ai); printf(n); for( ;j=9;j+)/*排序排序*/ for(i=0; iai+1) t=ai; ai=ai+1; ai+1=t; for(i=0;i10;i+) /*输出输出*/

19、printf(%d ,ai);步骤步骤: :1.1. 输入输入: : for for循环输入循环输入1010个整个整数数2. 2. 处理处理: :排序排序 循环做循环做9 9次:次: 找出第找出第j j大数大数3. 3. 输出输出: : for for循环输循环输出出1010个整数个整数 例例5.4输入输入10个数,对其进行从小到大排序个数,对其进行从小到大排序找出第找出第j j大数大数 5.1 一维数组一维数组5.2 二维数组二维数组5.3字符数组和字符串字符数组和字符串5.1一维数组一维数组-应用举例应用举例n例例5.6输入输入10个数,对其进行从小到大排序个数,对其进行从小到大排序用选择

20、法排序排序过程:排序过程:(1 1)首先通过)首先通过n-1n-1次比较,从次比较,从n n个数中找出最小的,个数中找出最小的, 将将它与第一个数交换它与第一个数交换。 第一趟选择排序,结果最小的数被安置在第一个元第一趟选择排序,结果最小的数被安置在第一个元素位置上素位置上。(2 2)再通过)再通过n-2n-2次比较,从剩余的次比较,从剩余的n-1n-1个数中找出个数中找出第二小第二小的的数数,将它与第二个数交换,将它与第二个数交换。 第二趟选择排序第二趟选择排序, ,结果结果第二第二小的数被安置在第一个元小的数被安置在第一个元素位置上素位置上。(3 3)重复上述过程,共经过)重复上述过程,共

21、经过n-1n-1趟排序后,排序结束趟排序后,排序结束。 5.1 一维数组一维数组5.2 二维数组二维数组5.3字符数组和字符串字符数组和字符串选择法排序:输入选择法排序:输入10个数个数,将最小值与第一个数交换,将最小值与第一个数交换,输出交换后的输出交换后的10个数。个数。1)用)用k记录最小值对应的下标记录最小值对应的下标 k=1; for(j=2;j=10;j+) if(ajak) k=j; ak就是最小值就是最小值2)最小值与第一个数交换)最小值与第一个数交换 ak a1 x=a1; a1=ak; ak=x;5.1一维数组一维数组-应用举例应用举例 5.1 一维数组一维数组5.2 二维

22、数组二维数组5.3字符数组和字符串字符数组和字符串例例初始:初始: 49 38 65 97 76 13 27 k=1j=2i=11349一趟:一趟: 13 38 65 97 76 49 27 i=22738二趟:二趟: 13 27 65 97 76 49 38 三趟:三趟: 13 27 38 97 76 49 65 四趟:四趟: 13 27 38 49 76 97 65 五趟:五趟: 13 27 38 49 65 97 76 六趟:六趟: 13 27 38 49 65 76 97 k=6kkk=2j=3 j=4j=5 j=6j=7jjjjji表示趟数表示趟数 k表每趟中最小数的下标表每趟中最小

23、数的下标a8 5.1 一维数组一维数组5.2 二维数组二维数组5.3字符数组和字符串字符数组和字符串例例5.6输入输入10个数,对其进行从小到大排序个数,对其进行从小到大排序void main() int a11,i,j,k,x; for(i=1;i11;i+) scanf(%d,&ai); for(i=1;i10;i+) k=i; for(j=i+1;j=10;j+) if(ajak) k=j; if(i!=k) x=ai; ai=ak; ak=x; for(i=1;i11;i+) printf(%d ,ai);步骤步骤: :1.1.输入输入: : for for循环输入循环输入10

24、10个整数个整数2. 2. 排序处理排序处理: : 循环做循环做9 9次:次: 找出数中第找出数中第i i小数小数( (循环循环) )3. 3. 输出输出: : for for循环输入循环输入1010个整数个整数找出找出10个数中个数中第第i小数小数 5.1 一维数组一维数组5.2 二维数组二维数组5.3字符数组和字符串字符数组和字符串5.2 二维数组二维数组多维数组的空间想象多维数组的空间想象二维数组:二维数组: 一个表格或一个平面矩阵一个表格或一个平面矩阵一维数组:一维数组: 一列长表或一个向量一列长表或一个向量三维数组:三维数组: 三维空间的一个方阵三维空间的一个方阵 5.1 一维数组一

25、维数组5.2 二维数组二维数组5.3字符数组和字符串字符数组和字符串n5个学生,个学生,5门课程,求每个学生的门课程,求每个学生的5门课程的平均门课程的平均成绩,求每门课程的成绩,求每门课程的5个同学的平均成绩,如何处个同学的平均成绩,如何处理?理?n int stu15,stu25,stu45;n思考:求每门课程的平均成绩遇到什么问题?思考:求每门课程的平均成绩遇到什么问题?5.2 二维数组二维数组问题的提出问题的提出 5.1 一维数组一维数组5.2 二维数组二维数组5.3字符数组和字符串字符数组和字符串5.2 二维数组二维数组n1 二维数组的定义二维数组的定义n 定义方式:定义方式: 类型

26、名类型名 数组名数组名行长度行长度列长度列长度 例如:例如:int a23; int a34; float b52; int c234; int a3,4; ( ) 5.1 一维数组一维数组5.2 二维数组二维数组5.3字符数组和字符串字符数组和字符串5.2 二维数组二维数组n 1 二维数组的定义二维数组的定义n 存储方式:按行存储存储方式:按行存储int a23;01201内存地址内存地址200020002004200420082008201220122016201620202020a01a10a11a12a00a02a0a1a0a1每个元素每个元素ai又是一个包含又是一个包含3个元素的一维

27、数组个元素的一维数组a由由2个元素组成个元素组成a0,a1是行名是行名,每行首地址每行首地址 5.1 一维数组一维数组5.2 二维数组二维数组5.3字符数组和字符串字符数组和字符串5.2 二维数组二维数组n1.先定义后使用先定义后使用 若有若有int a35 ;int a35 ; 则则a02a02表示引用二维数组中第表示引用二维数组中第0 0行第行第2 2列元素列元素n2.下标可以是整型常量或整型表达式下标可以是整型常量或整型表达式 stu2-12stu2-12n3.3.不要超下标引用不要超下标引用 定义定义 int a35 ; int a35 ; 引用引用a35a35是错误的!是错误的!2二

28、维数组的引用二维数组的引用 5.1 一维数组一维数组5.2 二维数组二维数组5.3字符数组和字符串字符数组和字符串5.2 二维数组二维数组n3 二维数组的初始化二维数组的初始化 全部元素赋值全部元素赋值1.1.分行赋值分行赋值 int a23=1,2,3,4,5,6;int a23=1,2,3,4,5,6;2.2.按元素顺序赋值按元素顺序赋值 int a23=1,2,3,4,5,6;int a23=1,2,3,4,5,6;3.3.允许省略第一维长度允许省略第一维长度 int a 3=1,2,3,4,5,6;int a 3=1,2,3,4,5,6; 第一维长度为第一维长度为2 21 2 3 4

29、5 61 2 3 4 5 61 2 3 4 5 6 5.1 一维数组一维数组5.2 二维数组二维数组5.3字符数组和字符串字符数组和字符串5.2 二维数组二维数组n3 3 二维数组的初始化二维数组的初始化部分元素赋值部分元素赋值1.1.分行赋值分行赋值 int a23=1,2,3,4;int a23=1,2,3,4;2.2.按元素存储顺序赋值按元素存储顺序赋值 int a23=1,2,3,4;int a23=1,2,3,4;3.3.允许省略第一维长度允许省略第一维长度 int a 3=1,2,3,4;int a 3=1,2,3,4; 第一维长度为第一维长度为2 2 1 2 3 4 1 2 3

30、4 1 2 3 4 5.1 一维数组一维数组5.2 二维数组二维数组5.3字符数组和字符串字符数组和字符串5.2 二维数组二维数组n4 4 二维数组的输入和输出二维数组的输入和输出int a23,i,j;输出第输出第i行第行第j列列元素:元素:printf(“%d”,aij);输出整个数组元素:输出整个数组元素:for (i=0;i2;i+) for(j=0;j3;j+) printf(“%d”,aij);输入第输入第i行第行第j列元素:列元素:scanf(“%d”,&aij);输入整个数组元素:输入整个数组元素:for (i=0;i2;i+) for(j=0;j3;j+) scanf

31、(“%d”,&aij); 5.1 一维数组一维数组5.2 二维数组二维数组5.3字符数组和字符串字符数组和字符串5.2 二维数组二维数组应用举例应用举例n例例5.7 输入两个输入两个2*3的矩阵,计算并输出两个矩阵的矩阵,计算并输出两个矩阵的和。的和。#includemain() int a23,b23,sum23,i,j;/* 输入数组输入数组 a的元素的元素*/ for(i=0;i2;i+) for(j=0;j3;j+) scanf(“%d”,&aij); 5.1 一维数组一维数组5.2 二维数组二维数组5.3字符数组和字符串字符数组和字符串/* 输入数组输入数组 b的元素

32、的元素*/for(i=0;i2;i+) for(j=0;j3;j+) scanf(%d,&bij); /* 数组数组 求和求和*/ for(i=0;i2;i+) for(j=0;j3;j+) sumij=aij+bij; /* 数组数组 输出输出*/ for(i=0;i2;i+) for(j=0;j3;j+) printf(“%5d”,sumij); printf(n); 5.1 一维数组一维数组5.2 二维数组二维数组5.3字符数组和字符串字符数组和字符串5.2 二维数组二维数组应用举例应用举例n例例5.8 求一个求一个4*4矩阵的主对角线元素之积矩阵的主对角线元素之积 5.1 一维

33、数组一维数组5.2 二维数组二维数组5.3字符数组和字符串字符数组和字符串int aNN; N是正整数是正整数数组元素数组元素 aij,i和和j的取值范围的取值范围0,N-1用二维数组用二维数组a表示表示N*N方阵时,对应关系方阵时,对应关系:a00 a01 a02a10 a11 a12a20 a21 a22方阵方阵 概念概念主对角线主对角线 i=j上三角上三角 i=j 5.1 一维数组一维数组5.2 二维数组二维数组5.3字符数组和字符串字符数组和字符串5.2 二维数组二维数组应用举例应用举例n 例例5.8求一个求一个4*4矩阵的主对角线元素之积矩阵的主对角线元素之积#includemain

34、() int a44=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,i,j,s=1; for(i=0;i4;i+) for(j=0;j4;j+) if(i=j) s=s*aij; printf(s=%d,s); 5.1 一维数组一维数组5.2 二维数组二维数组5.3字符数组和字符串字符数组和字符串5.3 字符数组和字符串字符数组和字符串n主要内容:主要内容:n理解字符串与字符数组的概念理解字符串与字符数组的概念n掌握字符串的输入掌握字符串的输入/输出处理输出处理n能够使用字符串处理函数能够使用字符串处理函数 5.1 一维数组一维数组5.2 二维数组二维数组5.3

35、字符数组和字符串字符数组和字符串5.3 字符数组和字符串字符数组和字符串字符数组字符数组例例 char c10, ch34;n 1 字符数组的定义字符数组的定义n 2 字符数组的初始化字符数组的初始化n逐个字符赋值逐个字符赋值n用字符串常量用字符串常量 例例 char ch5=H,e,l,l,o;ch0Helloch1 ch2 ch3 ch4 例例 char ch6=“Hello”; char ch6=“Hello”; char ch =“Hello”;ch0Helloch1 ch2 ch3 ch40ch5 5.1 一维数组一维数组5.2 二维数组二维数组5.3字符数组和字符串字符数组和字符串

36、n字符串字符串: :用一对双引号括起来的字符序列用一对双引号括起来的字符序列nC C中中无字符串变量,用字符数组处理字符串无字符串变量,用字符数组处理字符串n字符串结束标志:字符串结束标志:00“hello”hello”共共5 5个字符,在内存占个字符,在内存占6 6个字节个字节,字符串长度字符串长度5 5 h e l l o 0h e l l o 0104 101 108 108 111 0104 101 108 108 111 0内存存放字符内存存放字符ASCIIASCII码码5.3 字符数组和字符串字符数组和字符串字符串字符串 5.1 一维数组一维数组5.2 二维数组二维数组5.3字符数

37、组和字符串字符数组和字符串n字符串的输入输出字符串的输入输出n逐个字符逐个字符I/OI/O: %c%cn整个字符串整个字符串I/OI/O: %s%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);用字符数组名用字符数组名, ,不要加不要加& &输入串长度不要越界输入串长度不要越界遇空格或回车结束

38、输入遇空格或回车结束输入自动加自动加00用字符数组名用字符数组名, ,遇遇00结束输出结束输出5.3 字符数组和字符串字符数组和字符串字符串字符串 5.1 一维数组一维数组5.2 二维数组二维数组5.3字符数组和字符串字符数组和字符串例例 main( ) char a5=H,e,l,l,o; printf(“%s”,a); 例例 main( ) char a =“Hello”; printf(“%s”,a); 结果:结果:Hello#-=* h h e l l oe l l o02314结果:Hello用“%s”输出时,遇0结束5.3 字符数组和字符串字符数组和字符串例题例题 5.1 一维数组

39、一维数组5.2 二维数组二维数组5.3字符数组和字符串字符数组和字符串main() char a =h,e,l,0,l,o,0; printf(%s,a);输出:输出:hel h e l 0 l o 0数组中有多个数组中有多个00时时, ,遇第一个结束遇第一个结束5.3 5.3 字符数组和字符串字符数组和字符串例题例题 5.1 一维数组一维数组5.2 二维数组二维数组5.3字符数组和字符串字符数组和字符串main() int i; char a5; scanf(%s,a); for(i=0;i5;i+) printf(%d,ai);运行情况:运行情况:(1 1)若输入)若输入 hel , he

40、l , 正常正常(2 2)若输入)若输入 hell , hell , 正常正常(3 3)若输入)若输入 hello , hello , 用用% %s s 输出时,会出现问题输出时,会出现问题 h e l 0 h e l l 0 h e l l o输入字符串长度输入字符串长度 数组维数数组维数5.3 5.3 字符数组和字符串字符数组和字符串例题例题 5.1 一维数组一维数组5.2 二维数组二维数组5.3字符数组和字符串字符数组和字符串 H o w 0 a r e 0 y o u ? 0 #include main() char a15,b5,c5; scanf(%s%s%s,a,b,c); pr

41、intf(a=%snb=%snc=%sn,a,b,c); scanf(%s,a); printf(a=%sn,a);scanfscanf中中% %s s输入时输入时, ,遇空格遇空格或回车结束或回车结束5.3 5.3 字符数组和字符串字符数组和字符串例题例题输入:输入:How are you?输出:输出:a=How b=are c=you?输入:输入:How are you?输出:输出:a=How 5.1 一维数组一维数组5.2 二维数组二维数组5.3字符数组和字符串字符数组和字符串若准备将字符串若准备将字符串“This is a string.”This is a string.”记录下来,

42、记录下来,应该怎样输入?应该怎样输入?5.3 5.3 字符数组和字符串字符数组和字符串 5.1 一维数组一维数组5.2 二维数组二维数组5.3字符数组和字符串字符数组和字符串包含在头文件包含在头文件string.hstring.hu字符串输出函数字符串输出函数putsputs格式:格式:puts(puts(字符数组字符数组) )功能:向显示器输出字符串(输出完,换行)功能:向显示器输出字符串(输出完,换行)说明:字符数组必须以说明:字符数组必须以00结束结束u字符串输入函数字符串输入函数getsgets格式:格式:gets(gets(字符数组字符数组) )功能:从键盘输入一以回车结束的字符串放

43、入字符数组中,功能:从键盘输入一以回车结束的字符串放入字符数组中, 并自动加并自动加00说明:输入串长度应小于字符数组维数说明:输入串长度应小于字符数组维数5.3 5.3 字符数组和字符串字符数组和字符串字符串函数字符串函数 5.1 一维数组一维数组5.2 二维数组二维数组5.3字符数组和字符串字符数组和字符串包含在头文件包含在头文件string.hstring.hu字符串输出函数字符串输出函数puts(puts(字符数组字符数组) )u字符串输入函数字符串输入函数gets(字符数组字符数组)例例 #include main( ) char string80; printf(“Input a

44、string:”); gets(string); puts(string); 输入输入: How are you?输出输出: How are you ? 5.3 5.3 字符数组和字符串字符数组和字符串字符串函数字符串函数 5.1 一维数组一维数组5.2 二维数组二维数组5.3字符数组和字符串字符数组和字符串u字符串连接函数字符串连接函数strcatstrcat格式:格式:strcat(strcat(字符数组字符数组1,1,字符数组字符数组2)2)功能:把字符数组功能:把字符数组2 2连到字符数组连到字符数组1 1后面后面返值:返回字符数组返值:返回字符数组1 1的首地址的首地址说明:说明:字

45、符数组字符数组1 1必须足够大必须足够大 连接前连接前, ,两串均以两串均以00结束结束; ;连接后连接后, ,串串1010取消取消, , 新串最后加新串最后加00u字符串拷贝函数字符串拷贝函数strcpystrcpy格式:格式:strcpy(strcpy(字符数组字符数组1,1,字符串字符串2)2)功能:将字符串功能:将字符串2 2,拷贝到字符数组,拷贝到字符数组1 1中去中去返值:返回字符数组返值:返回字符数组1 1的首地址的首地址说明:说明:字符数组字符数组1 1必须足够大必须足够大 拷贝时拷贝时00一同拷贝一同拷贝 不能使用赋值语句为一个字符数组赋值不能使用赋值语句为一个字符数组赋值5

46、.3 5.3 字符数组和字符串字符数组和字符串字符串函数字符串函数 5.1 一维数组一维数组5.2 二维数组二维数组5.3字符数组和字符串字符数组和字符串#include #include void main() char des25, c = C+; char blank = , visual = visual; strcpy(des,visual); strcat(des, blank); strcat(des, c); printf(%sn, des);5.3 5.3 字符数组和字符串字符数组和字符串字符串函数字符串函数visual C+vsua0123456789il24.0vsua0

47、0123456789i24.lvsuaC+0123456789i024.l 5.1 一维数组一维数组5.2 二维数组二维数组5.3字符数组和字符串字符数组和字符串u字符串比较函数字符串比较函数strcmp格式:格式:strcmp(字符串字符串1,字符串字符串2)功能:比较两个字符串功能:比较两个字符串比较规则:对两串从左向右逐个字符比较(比较规则:对两串从左向右逐个字符比较(ASCII码),码), 直到遇到不同字符或直到遇到不同字符或0为止为止返值:返回返值:返回int型整数,型整数,a. 若字符串若字符串1 字符串字符串2, 返回正整数返回正整数 c. 若字符串若字符串1= 字符串字符串2,

48、 返回零返回零说明:字符串比较不能用说明:字符串比较不能用“=”,必须用必须用strcmpu字符串长度函数字符串长度函数strlen格式:格式:strlen(字符数组字符数组)功能:计算字符串长度功能:计算字符串长度返值:返回字符串实际长度,不包括返值:返回字符串实际长度,不包括0在内在内5.3 5.3 字符数组和字符串字符数组和字符串字符串函数字符串函数 5.1 一维数组一维数组5.2 二维数组二维数组5.3字符数组和字符串字符数组和字符串例例 对于以下字符串,对于以下字符串,strlen(s)的值为:的值为:(1)char s10=A,0,B,C,0,D;(2)char s =“tv0willn”;(3)char s =“x69082n”; 答案:答案:1 3 15.3 5.3 字符数组和字符串字符数组和字符串字符串函数字符串函数 5.1 一维数组一维数组5.2 二维数组二维数组5.3字符数组和字符串字符数组和字符串 5.1 一维数组一维数组5.2 二维数组二维数组5.3字符数组和字符串字符数组和字符串#

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论